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.
@@ -402,15 +402,19 @@ var import_react = require("react");
402
402
  var import_hls = __toESM(require("hls.js"), 1);
403
403
  var MAX_VAST_WRAPPER_DEPTH = 5;
404
404
  function createHlsAdPlayer(contentVideo, options) {
405
+ var _contentVideo_AD_VIDEO_PROP, _contentVideo_AD_CONTAINER_PROP;
405
406
  var adPlaying = false;
406
407
  var originalMutedState = false;
407
408
  var originalVolume = Math.max(0, Math.min(1, contentVideo.volume || 1));
408
409
  var listeners = /* @__PURE__ */ new Map();
409
410
  var licenseKey = options === null || options === void 0 ? void 0 : options.licenseKey;
410
411
  var mainHlsInstance = options === null || options === void 0 ? void 0 : options.mainHlsInstance;
411
- var adVideoElement;
412
+ var AD_CONTAINER_PROP = "__stormcloudAdContainer";
413
+ var AD_VIDEO_PROP = "__stormcloudAdVideo";
414
+ var adVideoElement = (_contentVideo_AD_VIDEO_PROP = contentVideo[AD_VIDEO_PROP]) !== null && _contentVideo_AD_VIDEO_PROP !== void 0 ? _contentVideo_AD_VIDEO_PROP : void 0;
412
415
  var adHls;
413
- var adContainerEl;
416
+ var adContainerEl = (_contentVideo_AD_CONTAINER_PROP = contentVideo[AD_CONTAINER_PROP]) !== null && _contentVideo_AD_CONTAINER_PROP !== void 0 ? _contentVideo_AD_CONTAINER_PROP : void 0;
417
+ var adEventHandlers = [];
414
418
  var currentAd;
415
419
  var podAds = [];
416
420
  var podIndex = 0;
@@ -565,6 +569,56 @@ function createHlsAdPlayer(contentVideo, options) {
565
569
  var url = mediaFile.url.toLowerCase();
566
570
  return type.startsWith("video/") || url.endsWith(".mp4") || url.includes(".mp4?");
567
571
  }
572
+ function isAudioMediaFile(mediaFile) {
573
+ var type = mediaFile.type.toLowerCase();
574
+ var url = (mediaFile.url.toLowerCase().split("?")[0] || "").trim();
575
+ 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");
576
+ }
577
+ function collectVideoMediaFiles(scope, verbose) {
578
+ var mediaFileElements = scope.querySelectorAll("MediaFile");
579
+ var mediaFiles = [];
580
+ if (verbose) {
581
+ console.log("[HlsAdPlayer] Found ".concat(mediaFileElements.length, " MediaFile element(s) in VAST XML"));
582
+ }
583
+ mediaFileElements.forEach(function(mf, index) {
584
+ var _mf_textContent;
585
+ var type = mf.getAttribute("type") || "";
586
+ var url = ((_mf_textContent = mf.textContent) === null || _mf_textContent === void 0 ? void 0 : _mf_textContent.trim()) || "";
587
+ var width = mf.getAttribute("width") || "";
588
+ var height = mf.getAttribute("height") || "";
589
+ if (verbose) {
590
+ console.log("[HlsAdPlayer] MediaFile ".concat(index, ': type="').concat(type, '", url="').concat(url, '", width="').concat(width, '", height="').concat(height, '"'));
591
+ }
592
+ if (!url) {
593
+ if (verbose) {
594
+ console.warn("[HlsAdPlayer] MediaFile ".concat(index, " has empty URL"));
595
+ }
596
+ return;
597
+ }
598
+ var bitrateAttr = mf.getAttribute("bitrate");
599
+ var bitrateValue = bitrateAttr ? parseInt(bitrateAttr, 10) : void 0;
600
+ var mediaFile = {
601
+ url: url,
602
+ type: type,
603
+ width: parseInt(width || "1920", 10),
604
+ height: parseInt(height || "1080", 10),
605
+ bitrate: bitrateValue && bitrateValue > 0 ? bitrateValue : void 0
606
+ };
607
+ if (isAudioMediaFile(mediaFile)) {
608
+ console.warn("[HlsAdPlayer] MediaFile ".concat(index, ' skipped (audio-only, type="').concat(type, '") — audio ads are not played to avoid a black screen'));
609
+ return;
610
+ }
611
+ if (isHlsMediaFile(mediaFile) || isProgressiveMediaFile(mediaFile)) {
612
+ mediaFiles.push(mediaFile);
613
+ if (verbose) {
614
+ console.log("[HlsAdPlayer] Added ".concat(isHlsMediaFile(mediaFile) ? "HLS" : "progressive", " MediaFile: ").concat(url));
615
+ }
616
+ } else if (verbose) {
617
+ console.log("[HlsAdPlayer] MediaFile ".concat(index, ' ignored (type="').concat(type, '" is not supported)'));
618
+ }
619
+ });
620
+ return mediaFiles;
621
+ }
568
622
  function createEmptyTrackingUrls() {
569
623
  return {
570
624
  impression: [],
@@ -652,37 +706,7 @@ function createHlsAdPlayer(contentVideo, options) {
652
706
  var durationText = ((_xmlDoc_querySelector3 = xmlDoc.querySelector("Duration")) === null || _xmlDoc_querySelector3 === void 0 ? void 0 : _xmlDoc_querySelector3.textContent) || "00:00:30";
653
707
  var durationParts = durationText.split(":");
654
708
  var duration = parseInt(durationParts[0] || "0", 10) * 3600 + parseInt(durationParts[1] || "0", 10) * 60 + parseInt(durationParts[2] || "0", 10);
655
- var mediaFileElements = xmlDoc.querySelectorAll("MediaFile");
656
- var mediaFiles = [];
657
- console.log("[HlsAdPlayer] Found ".concat(mediaFileElements.length, " MediaFile element(s) in VAST XML"));
658
- mediaFileElements.forEach(function(mf, index) {
659
- var _mf_textContent;
660
- var type = mf.getAttribute("type") || "";
661
- var url = ((_mf_textContent = mf.textContent) === null || _mf_textContent === void 0 ? void 0 : _mf_textContent.trim()) || "";
662
- var width = mf.getAttribute("width") || "";
663
- var height = mf.getAttribute("height") || "";
664
- console.log("[HlsAdPlayer] MediaFile ".concat(index, ': type="').concat(type, '", url="').concat(url, '", width="').concat(width, '", height="').concat(height, '"'));
665
- var mediaFile = {
666
- url: url,
667
- type: type,
668
- width: parseInt(width || "1920", 10),
669
- height: parseInt(height || "1080", 10),
670
- bitrate: void 0
671
- };
672
- if (!url) {
673
- console.warn("[HlsAdPlayer] MediaFile ".concat(index, " has empty URL"));
674
- return;
675
- }
676
- var bitrateAttr = mf.getAttribute("bitrate");
677
- var bitrateValue = bitrateAttr ? parseInt(bitrateAttr, 10) : void 0;
678
- mediaFile.bitrate = bitrateValue && bitrateValue > 0 ? bitrateValue : void 0;
679
- if (isHlsMediaFile(mediaFile) || isProgressiveMediaFile(mediaFile)) {
680
- mediaFiles.push(mediaFile);
681
- console.log("[HlsAdPlayer] Added ".concat(isHlsMediaFile(mediaFile) ? "HLS" : "progressive", " MediaFile: ").concat(url));
682
- } else {
683
- console.log("[HlsAdPlayer] MediaFile ".concat(index, ' ignored (type="').concat(type, '" is not supported)'));
684
- }
685
- });
709
+ var mediaFiles = collectVideoMediaFiles(xmlDoc, true);
686
710
  if (mediaFiles.length === 0) {
687
711
  if (isNoAdAvailable) {
688
712
  console.warn("[HlsAdPlayer] No ads available (VAST response indicates no ads)");
@@ -730,28 +754,7 @@ function createHlsAdPlayer(contentVideo, options) {
730
754
  var durationText = ((_adElement_querySelector3 = adElement.querySelector("Duration")) === null || _adElement_querySelector3 === void 0 ? void 0 : _adElement_querySelector3.textContent) || "00:00:30";
731
755
  var durationParts = durationText.split(":");
732
756
  var duration = parseInt(durationParts[0] || "0", 10) * 3600 + parseInt(durationParts[1] || "0", 10) * 60 + parseInt(durationParts[2] || "0", 10);
733
- var mediaFileElements = adElement.querySelectorAll("MediaFile");
734
- var mediaFiles = [];
735
- mediaFileElements.forEach(function(mf) {
736
- var _mf_textContent;
737
- var type = mf.getAttribute("type") || "";
738
- var url = ((_mf_textContent = mf.textContent) === null || _mf_textContent === void 0 ? void 0 : _mf_textContent.trim()) || "";
739
- var width = mf.getAttribute("width") || "";
740
- var height = mf.getAttribute("height") || "";
741
- if (!url) return;
742
- var bitrateAttr = mf.getAttribute("bitrate");
743
- var bitrateValue = bitrateAttr ? parseInt(bitrateAttr, 10) : void 0;
744
- var mediaFile = {
745
- url: url,
746
- type: type,
747
- width: parseInt(width || "1920", 10),
748
- height: parseInt(height || "1080", 10),
749
- bitrate: bitrateValue && bitrateValue > 0 ? bitrateValue : void 0
750
- };
751
- if (isHlsMediaFile(mediaFile) || isProgressiveMediaFile(mediaFile)) {
752
- mediaFiles.push(mediaFile);
753
- }
754
- });
757
+ var mediaFiles = collectVideoMediaFiles(adElement, false);
755
758
  if (mediaFiles.length === 0) {
756
759
  if (isNoAdAvailable) {
757
760
  console.warn("[HlsAdPlayer] Pod <Ad> indicates no ad available");
@@ -1054,7 +1057,8 @@ function createHlsAdPlayer(contentVideo, options) {
1054
1057
  }
1055
1058
  function setupAdEventListeners() {
1056
1059
  if (!adVideoElement || !currentAd) return;
1057
- adVideoElement.addEventListener("timeupdate", function() {
1060
+ if (adEventHandlers.length > 0) return;
1061
+ var onTimeUpdate = function onTimeUpdate() {
1058
1062
  if (!currentAd || !adVideoElement) return;
1059
1063
  noteAdProgress();
1060
1064
  var progress = adVideoElement.currentTime / currentAd.duration;
@@ -1070,15 +1074,15 @@ function createHlsAdPlayer(contentVideo, options) {
1070
1074
  trackingFired.thirdQuartile = true;
1071
1075
  fireTrackingPixels(currentAd.trackingUrls.thirdQuartile);
1072
1076
  }
1073
- });
1074
- adVideoElement.addEventListener("playing", function() {
1077
+ };
1078
+ var onPlaying = function onPlaying() {
1075
1079
  startStallWatchdog();
1076
1080
  if (!currentAd || trackingFired.start) return;
1077
1081
  trackingFired.start = true;
1078
1082
  fireTrackingPixels(currentAd.trackingUrls.start);
1079
1083
  console.log("[HlsAdPlayer] Ad started playing");
1080
- });
1081
- adVideoElement.addEventListener("ended", function() {
1084
+ };
1085
+ var onEnded = function onEnded() {
1082
1086
  if (!currentAd || trackingFired.complete) return;
1083
1087
  trackingFired.complete = true;
1084
1088
  fireTrackingPixels(currentAd.trackingUrls.complete);
@@ -1087,8 +1091,8 @@ function createHlsAdPlayer(contentVideo, options) {
1087
1091
  return;
1088
1092
  }
1089
1093
  handleAdComplete();
1090
- });
1091
- adVideoElement.addEventListener("error", function(e) {
1094
+ };
1095
+ var onError = function onError(e) {
1092
1096
  if (!adPlaying) return;
1093
1097
  console.error("[HlsAdPlayer] Ad video error:", e);
1094
1098
  if (currentAd) {
@@ -1098,25 +1102,100 @@ function createHlsAdPlayer(contentVideo, options) {
1098
1102
  return;
1099
1103
  }
1100
1104
  handleAdError();
1101
- });
1102
- adVideoElement.addEventListener("volumechange", function() {
1103
- if (!currentAd) return;
1105
+ };
1106
+ var onVolumeChange = function onVolumeChange() {
1107
+ if (!currentAd || !adVideoElement) return;
1104
1108
  if (adVideoElement.muted) {
1105
1109
  fireTrackingPixels(currentAd.trackingUrls.mute);
1106
1110
  } else {
1107
1111
  fireTrackingPixels(currentAd.trackingUrls.unmute);
1108
1112
  }
1109
- });
1110
- adVideoElement.addEventListener("pause", function() {
1111
- if (currentAd && !adVideoElement.ended) {
1113
+ };
1114
+ var onPause = function onPause() {
1115
+ if (currentAd && adVideoElement && !adVideoElement.ended) {
1112
1116
  fireTrackingPixels(currentAd.trackingUrls.pause);
1113
1117
  }
1114
- });
1115
- adVideoElement.addEventListener("play", function() {
1116
- if (currentAd && adVideoElement.currentTime > 0) {
1118
+ };
1119
+ var onPlay = function onPlay() {
1120
+ if (currentAd && adVideoElement && adVideoElement.currentTime > 0) {
1117
1121
  fireTrackingPixels(currentAd.trackingUrls.resume);
1118
1122
  }
1119
- });
1123
+ };
1124
+ adEventHandlers = [
1125
+ {
1126
+ type: "timeupdate",
1127
+ handler: onTimeUpdate
1128
+ },
1129
+ {
1130
+ type: "playing",
1131
+ handler: onPlaying
1132
+ },
1133
+ {
1134
+ type: "ended",
1135
+ handler: onEnded
1136
+ },
1137
+ {
1138
+ type: "error",
1139
+ handler: onError
1140
+ },
1141
+ {
1142
+ type: "volumechange",
1143
+ handler: onVolumeChange
1144
+ },
1145
+ {
1146
+ type: "pause",
1147
+ handler: onPause
1148
+ },
1149
+ {
1150
+ type: "play",
1151
+ handler: onPlay
1152
+ }
1153
+ ];
1154
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
1155
+ try {
1156
+ for(var _iterator = adEventHandlers[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
1157
+ var _step_value = _step.value, type = _step_value.type, handler = _step_value.handler;
1158
+ adVideoElement.addEventListener(type, handler);
1159
+ }
1160
+ } catch (err) {
1161
+ _didIteratorError = true;
1162
+ _iteratorError = err;
1163
+ } finally{
1164
+ try {
1165
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
1166
+ _iterator.return();
1167
+ }
1168
+ } finally{
1169
+ if (_didIteratorError) {
1170
+ throw _iteratorError;
1171
+ }
1172
+ }
1173
+ }
1174
+ }
1175
+ function teardownAdEventListeners() {
1176
+ if (adVideoElement) {
1177
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
1178
+ try {
1179
+ for(var _iterator = adEventHandlers[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
1180
+ var _step_value = _step.value, type = _step_value.type, handler = _step_value.handler;
1181
+ adVideoElement.removeEventListener(type, handler);
1182
+ }
1183
+ } catch (err) {
1184
+ _didIteratorError = true;
1185
+ _iteratorError = err;
1186
+ } finally{
1187
+ try {
1188
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
1189
+ _iterator.return();
1190
+ }
1191
+ } finally{
1192
+ if (_didIteratorError) {
1193
+ throw _iteratorError;
1194
+ }
1195
+ }
1196
+ }
1197
+ }
1198
+ adEventHandlers = [];
1120
1199
  }
1121
1200
  function setAdPlayingFlag(isPlaying) {
1122
1201
  if (isPlaying) {
@@ -1262,15 +1341,13 @@ function createHlsAdPlayer(contentVideo, options) {
1262
1341
  adHls = void 0;
1263
1342
  }
1264
1343
  if (adVideoElement) {
1265
- adVideoElement.pause();
1266
- adVideoElement.removeAttribute("src");
1267
1344
  try {
1345
+ adVideoElement.pause();
1346
+ adVideoElement.removeAttribute("src");
1268
1347
  adVideoElement.load();
1269
1348
  } catch (error) {
1270
- console.warn("[HlsAdPlayer] adVideoElement.load() threw after src removal:", error);
1349
+ console.warn("[HlsAdPlayer] Error releasing ad decoder:", error);
1271
1350
  }
1272
- adVideoElement.remove();
1273
- adVideoElement = void 0;
1274
1351
  }
1275
1352
  if (adContainerEl) {
1276
1353
  adContainerEl.style.display = "none";
@@ -1333,6 +1410,7 @@ function createHlsAdPlayer(contentVideo, options) {
1333
1410
  (_contentVideo_parentElement = contentVideo.parentElement) === null || _contentVideo_parentElement === void 0 ? void 0 : _contentVideo_parentElement.appendChild(container);
1334
1411
  adContainerEl = container;
1335
1412
  }
1413
+ contentVideo[AD_CONTAINER_PROP] = adContainerEl;
1336
1414
  },
1337
1415
  requestAds: function requestAds(vastTagUrl) {
1338
1416
  return _async_to_generator(function() {
@@ -1435,8 +1513,9 @@ function createHlsAdPlayer(contentVideo, options) {
1435
1513
  if (!adVideoElement) {
1436
1514
  adVideoElement = createAdVideoElement();
1437
1515
  adContainerEl === null || adContainerEl === void 0 ? void 0 : adContainerEl.appendChild(adVideoElement);
1438
- setupAdEventListeners();
1516
+ contentVideo[AD_VIDEO_PROP] = adVideoElement;
1439
1517
  }
1518
+ setupAdEventListeners();
1440
1519
  resetQuartileTracking(true);
1441
1520
  contentVolume = contentVideo.volume;
1442
1521
  originalVolume = Math.max(0, Math.min(1, contentVolume || originalVolume));
@@ -1564,11 +1643,8 @@ function createHlsAdPlayer(contentVideo, options) {
1564
1643
  setAdPlayingFlag(false);
1565
1644
  contentVideo.muted = originalMutedState;
1566
1645
  contentVideo.volume = Math.max(0, Math.min(1, originalVolume));
1646
+ teardownAdEventListeners();
1567
1647
  releaseAdDecoder();
1568
- if (adContainerEl === null || adContainerEl === void 0 ? void 0 : adContainerEl.parentElement) {
1569
- adContainerEl.parentElement.removeChild(adContainerEl);
1570
- }
1571
- adContainerEl = void 0;
1572
1648
  currentAd = void 0;
1573
1649
  podAds = [];
1574
1650
  podIndex = 0;
@@ -3981,6 +4057,11 @@ function detectBrowser() {
3981
4057
  chromeVersion: chromeVersionNum
3982
4058
  };
3983
4059
  }
4060
+ function requiresMediaPipelineResetAfterAds() {
4061
+ var _browser_tizenVersion;
4062
+ var browser = detectBrowser();
4063
+ return browser.name === "Samsung Tizen" && ((_browser_tizenVersion = browser.tizenVersion) !== null && _browser_tizenVersion !== void 0 ? _browser_tizenVersion : 0) >= 5;
4064
+ }
3984
4065
  function getBrowserConfigOverrides() {
3985
4066
  var browser = detectBrowser();
3986
4067
  var overrides = {};
@@ -6742,30 +6823,49 @@ var HlsEngine = /*#__PURE__*/ function() {
6742
6823
  {
6743
6824
  key: "reloadLiveStream",
6744
6825
  value: function reloadLiveStream() {
6826
+ var _this = this;
6745
6827
  var hls = this.hls;
6746
6828
  if (!hls) {
6747
6829
  return;
6748
6830
  }
6749
6831
  if (this.debug) {
6750
- console.log("[StormcloudVideoPlayer] Hard-reloading live stream (detach \u2192 reset video \u2192 re-attach)");
6832
+ console.log("[StormcloudVideoPlayer] Hard-reloading live stream (destroy hls \u2192 reset video \u2192 fresh setupHls)");
6751
6833
  }
6752
6834
  try {
6753
6835
  this.reloadingLiveStream = true;
6754
6836
  hls.stopLoad();
6755
6837
  hls.detachMedia();
6838
+ hls.destroy();
6839
+ this.hls = void 0;
6756
6840
  try {
6757
6841
  this.video.removeAttribute("src");
6758
6842
  this.video.load();
6759
6843
  } catch (error) {
6760
6844
  console.warn("[StormcloudVideoPlayer] video.load() threw after src removal:", error);
6761
6845
  }
6762
- hls.attachMedia(this.video);
6763
6846
  } catch (error) {
6764
6847
  this.reloadingLiveStream = false;
6848
+ this.hls = void 0;
6765
6849
  if (this.debug) {
6766
- console.warn("[StormcloudVideoPlayer] Failed to hard-reload live stream:", error);
6850
+ console.warn("[StormcloudVideoPlayer] Failed to tear down during hard-reload:", error);
6767
6851
  }
6852
+ return;
6768
6853
  }
6854
+ var recreateDelayMs = 600;
6855
+ window.setTimeout(function() {
6856
+ if (_this.hls) {
6857
+ _this.reloadingLiveStream = false;
6858
+ return;
6859
+ }
6860
+ try {
6861
+ _this.setupHls();
6862
+ } catch (error) {
6863
+ _this.reloadingLiveStream = false;
6864
+ if (_this.debug) {
6865
+ console.warn("[StormcloudVideoPlayer] Failed to rebuild pipeline during hard-reload:", error);
6866
+ }
6867
+ }
6868
+ }, recreateDelayMs);
6769
6869
  }
6770
6870
  },
6771
6871
  {
@@ -8078,6 +8178,14 @@ var AdBreakOrchestrator = /*#__PURE__*/ function() {
8078
8178
  this.host.video.style.visibility = "visible";
8079
8179
  this.host.video.style.opacity = "1";
8080
8180
  if (this.host.isLiveStream()) {
8181
+ if (this.host.requiresMediaPipelineResetAfterAds()) {
8182
+ if (this.debug) {
8183
+ console.log("[StormcloudVideoPlayer] Live break end \u2014 hard-reloading stream to reacquire decoder (single-decoder platform)");
8184
+ }
8185
+ this.host.reloadLiveStream();
8186
+ this.monitorLiveResumeStall(this.host.video.currentTime);
8187
+ return;
8188
+ }
8081
8189
  var liveSyncPos = this.host.getLiveSyncPosition();
8082
8190
  if (liveSyncPos != null && liveSyncPos > this.host.video.currentTime) {
8083
8191
  if (this.debug) {
@@ -8139,9 +8247,10 @@ var AdBreakOrchestrator = /*#__PURE__*/ function() {
8139
8247
  key: "monitorLiveResumeStall",
8140
8248
  value: function monitorLiveResumeStall(resumeBaseline) {
8141
8249
  var _this = this;
8250
+ var needsReset = this.host.requiresMediaPipelineResetAfterAds();
8142
8251
  var pollIntervalMs = 1e3;
8143
- var graceMs = 5e3;
8144
- var recoveryCooldownMs = 5e3;
8252
+ var graceMs = needsReset ? 8e3 : 5e3;
8253
+ var recoveryCooldownMs = needsReset ? 7e3 : 5e3;
8145
8254
  var maxRecoveries = 3;
8146
8255
  var maxMonitorMs = 45e3;
8147
8256
  var startTime = Date.now();
@@ -8255,7 +8364,12 @@ var AdBreakOrchestrator = /*#__PURE__*/ function() {
8255
8364
  if (canRecover) {
8256
8365
  recoveries++;
8257
8366
  lastRecoveryAt = Date.now();
8258
- if (recoveries === 1) {
8367
+ if (needsReset) {
8368
+ if (_this.debug) {
8369
+ console.warn("[StormcloudVideoPlayer] Content still wedged after ad break — hard-reloading live stream (recovery ".concat(recoveries, "/").concat(maxRecoveries, ") — ").concat(_this.describeVideoState()));
8370
+ }
8371
+ _this.host.reloadLiveStream();
8372
+ } else if (recoveries === 1) {
8259
8373
  if (_this.debug) {
8260
8374
  console.warn("[StormcloudVideoPlayer] Content wedged after ad break — calling recoverMediaError() (recovery ".concat(recoveries, "/").concat(maxRecoveries, ") — ").concat(_this.describeVideoState()));
8261
8375
  }
@@ -8468,6 +8582,9 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
8468
8582
  recoverMediaError: function recoverMediaError() {
8469
8583
  return _this.hlsEngine.recoverMediaError();
8470
8584
  },
8585
+ requiresMediaPipelineResetAfterAds: function requiresMediaPipelineResetAfterAds1() {
8586
+ return requiresMediaPipelineResetAfterAds();
8587
+ },
8471
8588
  generatePodVastUrl: function generatePodVastUrl(base, breakDurationMs) {
8472
8589
  return _this.generatePodVastUrl(base, breakDurationMs);
8473
8590
  }