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.
@@ -351,15 +351,19 @@ module.exports = __toCommonJS(StormcloudVideoPlayer_exports);
351
351
  var import_hls = __toESM(require("hls.js"), 1);
352
352
  var MAX_VAST_WRAPPER_DEPTH = 5;
353
353
  function createHlsAdPlayer(contentVideo, options) {
354
+ var _contentVideo_AD_VIDEO_PROP, _contentVideo_AD_CONTAINER_PROP;
354
355
  var adPlaying = false;
355
356
  var originalMutedState = false;
356
357
  var originalVolume = Math.max(0, Math.min(1, contentVideo.volume || 1));
357
358
  var listeners = /* @__PURE__ */ new Map();
358
359
  var licenseKey = options === null || options === void 0 ? void 0 : options.licenseKey;
359
360
  var mainHlsInstance = options === null || options === void 0 ? void 0 : options.mainHlsInstance;
360
- var adVideoElement;
361
+ var AD_CONTAINER_PROP = "__stormcloudAdContainer";
362
+ var AD_VIDEO_PROP = "__stormcloudAdVideo";
363
+ var adVideoElement = (_contentVideo_AD_VIDEO_PROP = contentVideo[AD_VIDEO_PROP]) !== null && _contentVideo_AD_VIDEO_PROP !== void 0 ? _contentVideo_AD_VIDEO_PROP : void 0;
361
364
  var adHls;
362
- var adContainerEl;
365
+ var adContainerEl = (_contentVideo_AD_CONTAINER_PROP = contentVideo[AD_CONTAINER_PROP]) !== null && _contentVideo_AD_CONTAINER_PROP !== void 0 ? _contentVideo_AD_CONTAINER_PROP : void 0;
366
+ var adEventHandlers = [];
363
367
  var currentAd;
364
368
  var podAds = [];
365
369
  var podIndex = 0;
@@ -514,6 +518,56 @@ function createHlsAdPlayer(contentVideo, options) {
514
518
  var url = mediaFile.url.toLowerCase();
515
519
  return type.startsWith("video/") || url.endsWith(".mp4") || url.includes(".mp4?");
516
520
  }
521
+ function isAudioMediaFile(mediaFile) {
522
+ var type = mediaFile.type.toLowerCase();
523
+ var url = (mediaFile.url.toLowerCase().split("?")[0] || "").trim();
524
+ 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");
525
+ }
526
+ function collectVideoMediaFiles(scope, verbose) {
527
+ var mediaFileElements = scope.querySelectorAll("MediaFile");
528
+ var mediaFiles = [];
529
+ if (verbose) {
530
+ console.log("[HlsAdPlayer] Found ".concat(mediaFileElements.length, " MediaFile element(s) in VAST XML"));
531
+ }
532
+ mediaFileElements.forEach(function(mf, index) {
533
+ var _mf_textContent;
534
+ var type = mf.getAttribute("type") || "";
535
+ var url = ((_mf_textContent = mf.textContent) === null || _mf_textContent === void 0 ? void 0 : _mf_textContent.trim()) || "";
536
+ var width = mf.getAttribute("width") || "";
537
+ var height = mf.getAttribute("height") || "";
538
+ if (verbose) {
539
+ console.log("[HlsAdPlayer] MediaFile ".concat(index, ': type="').concat(type, '", url="').concat(url, '", width="').concat(width, '", height="').concat(height, '"'));
540
+ }
541
+ if (!url) {
542
+ if (verbose) {
543
+ console.warn("[HlsAdPlayer] MediaFile ".concat(index, " has empty URL"));
544
+ }
545
+ return;
546
+ }
547
+ var bitrateAttr = mf.getAttribute("bitrate");
548
+ var bitrateValue = bitrateAttr ? parseInt(bitrateAttr, 10) : void 0;
549
+ var mediaFile = {
550
+ url: url,
551
+ type: type,
552
+ width: parseInt(width || "1920", 10),
553
+ height: parseInt(height || "1080", 10),
554
+ bitrate: bitrateValue && bitrateValue > 0 ? bitrateValue : void 0
555
+ };
556
+ if (isAudioMediaFile(mediaFile)) {
557
+ console.warn("[HlsAdPlayer] MediaFile ".concat(index, ' skipped (audio-only, type="').concat(type, '") — audio ads are not played to avoid a black screen'));
558
+ return;
559
+ }
560
+ if (isHlsMediaFile(mediaFile) || isProgressiveMediaFile(mediaFile)) {
561
+ mediaFiles.push(mediaFile);
562
+ if (verbose) {
563
+ console.log("[HlsAdPlayer] Added ".concat(isHlsMediaFile(mediaFile) ? "HLS" : "progressive", " MediaFile: ").concat(url));
564
+ }
565
+ } else if (verbose) {
566
+ console.log("[HlsAdPlayer] MediaFile ".concat(index, ' ignored (type="').concat(type, '" is not supported)'));
567
+ }
568
+ });
569
+ return mediaFiles;
570
+ }
517
571
  function createEmptyTrackingUrls() {
518
572
  return {
519
573
  impression: [],
@@ -601,37 +655,7 @@ function createHlsAdPlayer(contentVideo, options) {
601
655
  var durationText = ((_xmlDoc_querySelector3 = xmlDoc.querySelector("Duration")) === null || _xmlDoc_querySelector3 === void 0 ? void 0 : _xmlDoc_querySelector3.textContent) || "00:00:30";
602
656
  var durationParts = durationText.split(":");
603
657
  var duration = parseInt(durationParts[0] || "0", 10) * 3600 + parseInt(durationParts[1] || "0", 10) * 60 + parseInt(durationParts[2] || "0", 10);
604
- var mediaFileElements = xmlDoc.querySelectorAll("MediaFile");
605
- var mediaFiles = [];
606
- console.log("[HlsAdPlayer] Found ".concat(mediaFileElements.length, " MediaFile element(s) in VAST XML"));
607
- mediaFileElements.forEach(function(mf, index) {
608
- var _mf_textContent;
609
- var type = mf.getAttribute("type") || "";
610
- var url = ((_mf_textContent = mf.textContent) === null || _mf_textContent === void 0 ? void 0 : _mf_textContent.trim()) || "";
611
- var width = mf.getAttribute("width") || "";
612
- var height = mf.getAttribute("height") || "";
613
- console.log("[HlsAdPlayer] MediaFile ".concat(index, ': type="').concat(type, '", url="').concat(url, '", width="').concat(width, '", height="').concat(height, '"'));
614
- var mediaFile = {
615
- url: url,
616
- type: type,
617
- width: parseInt(width || "1920", 10),
618
- height: parseInt(height || "1080", 10),
619
- bitrate: void 0
620
- };
621
- if (!url) {
622
- console.warn("[HlsAdPlayer] MediaFile ".concat(index, " has empty URL"));
623
- return;
624
- }
625
- var bitrateAttr = mf.getAttribute("bitrate");
626
- var bitrateValue = bitrateAttr ? parseInt(bitrateAttr, 10) : void 0;
627
- mediaFile.bitrate = bitrateValue && bitrateValue > 0 ? bitrateValue : void 0;
628
- if (isHlsMediaFile(mediaFile) || isProgressiveMediaFile(mediaFile)) {
629
- mediaFiles.push(mediaFile);
630
- console.log("[HlsAdPlayer] Added ".concat(isHlsMediaFile(mediaFile) ? "HLS" : "progressive", " MediaFile: ").concat(url));
631
- } else {
632
- console.log("[HlsAdPlayer] MediaFile ".concat(index, ' ignored (type="').concat(type, '" is not supported)'));
633
- }
634
- });
658
+ var mediaFiles = collectVideoMediaFiles(xmlDoc, true);
635
659
  if (mediaFiles.length === 0) {
636
660
  if (isNoAdAvailable) {
637
661
  console.warn("[HlsAdPlayer] No ads available (VAST response indicates no ads)");
@@ -679,28 +703,7 @@ function createHlsAdPlayer(contentVideo, options) {
679
703
  var durationText = ((_adElement_querySelector3 = adElement.querySelector("Duration")) === null || _adElement_querySelector3 === void 0 ? void 0 : _adElement_querySelector3.textContent) || "00:00:30";
680
704
  var durationParts = durationText.split(":");
681
705
  var duration = parseInt(durationParts[0] || "0", 10) * 3600 + parseInt(durationParts[1] || "0", 10) * 60 + parseInt(durationParts[2] || "0", 10);
682
- var mediaFileElements = adElement.querySelectorAll("MediaFile");
683
- var mediaFiles = [];
684
- mediaFileElements.forEach(function(mf) {
685
- var _mf_textContent;
686
- var type = mf.getAttribute("type") || "";
687
- var url = ((_mf_textContent = mf.textContent) === null || _mf_textContent === void 0 ? void 0 : _mf_textContent.trim()) || "";
688
- var width = mf.getAttribute("width") || "";
689
- var height = mf.getAttribute("height") || "";
690
- if (!url) return;
691
- var bitrateAttr = mf.getAttribute("bitrate");
692
- var bitrateValue = bitrateAttr ? parseInt(bitrateAttr, 10) : void 0;
693
- var mediaFile = {
694
- url: url,
695
- type: type,
696
- width: parseInt(width || "1920", 10),
697
- height: parseInt(height || "1080", 10),
698
- bitrate: bitrateValue && bitrateValue > 0 ? bitrateValue : void 0
699
- };
700
- if (isHlsMediaFile(mediaFile) || isProgressiveMediaFile(mediaFile)) {
701
- mediaFiles.push(mediaFile);
702
- }
703
- });
706
+ var mediaFiles = collectVideoMediaFiles(adElement, false);
704
707
  if (mediaFiles.length === 0) {
705
708
  if (isNoAdAvailable) {
706
709
  console.warn("[HlsAdPlayer] Pod <Ad> indicates no ad available");
@@ -1003,7 +1006,8 @@ function createHlsAdPlayer(contentVideo, options) {
1003
1006
  }
1004
1007
  function setupAdEventListeners() {
1005
1008
  if (!adVideoElement || !currentAd) return;
1006
- adVideoElement.addEventListener("timeupdate", function() {
1009
+ if (adEventHandlers.length > 0) return;
1010
+ var onTimeUpdate = function onTimeUpdate() {
1007
1011
  if (!currentAd || !adVideoElement) return;
1008
1012
  noteAdProgress();
1009
1013
  var progress = adVideoElement.currentTime / currentAd.duration;
@@ -1019,15 +1023,15 @@ function createHlsAdPlayer(contentVideo, options) {
1019
1023
  trackingFired.thirdQuartile = true;
1020
1024
  fireTrackingPixels(currentAd.trackingUrls.thirdQuartile);
1021
1025
  }
1022
- });
1023
- adVideoElement.addEventListener("playing", function() {
1026
+ };
1027
+ var onPlaying = function onPlaying() {
1024
1028
  startStallWatchdog();
1025
1029
  if (!currentAd || trackingFired.start) return;
1026
1030
  trackingFired.start = true;
1027
1031
  fireTrackingPixels(currentAd.trackingUrls.start);
1028
1032
  console.log("[HlsAdPlayer] Ad started playing");
1029
- });
1030
- adVideoElement.addEventListener("ended", function() {
1033
+ };
1034
+ var onEnded = function onEnded() {
1031
1035
  if (!currentAd || trackingFired.complete) return;
1032
1036
  trackingFired.complete = true;
1033
1037
  fireTrackingPixels(currentAd.trackingUrls.complete);
@@ -1036,8 +1040,8 @@ function createHlsAdPlayer(contentVideo, options) {
1036
1040
  return;
1037
1041
  }
1038
1042
  handleAdComplete();
1039
- });
1040
- adVideoElement.addEventListener("error", function(e) {
1043
+ };
1044
+ var onError = function onError(e) {
1041
1045
  if (!adPlaying) return;
1042
1046
  console.error("[HlsAdPlayer] Ad video error:", e);
1043
1047
  if (currentAd) {
@@ -1047,25 +1051,100 @@ function createHlsAdPlayer(contentVideo, options) {
1047
1051
  return;
1048
1052
  }
1049
1053
  handleAdError();
1050
- });
1051
- adVideoElement.addEventListener("volumechange", function() {
1052
- if (!currentAd) return;
1054
+ };
1055
+ var onVolumeChange = function onVolumeChange() {
1056
+ if (!currentAd || !adVideoElement) return;
1053
1057
  if (adVideoElement.muted) {
1054
1058
  fireTrackingPixels(currentAd.trackingUrls.mute);
1055
1059
  } else {
1056
1060
  fireTrackingPixels(currentAd.trackingUrls.unmute);
1057
1061
  }
1058
- });
1059
- adVideoElement.addEventListener("pause", function() {
1060
- if (currentAd && !adVideoElement.ended) {
1062
+ };
1063
+ var onPause = function onPause() {
1064
+ if (currentAd && adVideoElement && !adVideoElement.ended) {
1061
1065
  fireTrackingPixels(currentAd.trackingUrls.pause);
1062
1066
  }
1063
- });
1064
- adVideoElement.addEventListener("play", function() {
1065
- if (currentAd && adVideoElement.currentTime > 0) {
1067
+ };
1068
+ var onPlay = function onPlay() {
1069
+ if (currentAd && adVideoElement && adVideoElement.currentTime > 0) {
1066
1070
  fireTrackingPixels(currentAd.trackingUrls.resume);
1067
1071
  }
1068
- });
1072
+ };
1073
+ adEventHandlers = [
1074
+ {
1075
+ type: "timeupdate",
1076
+ handler: onTimeUpdate
1077
+ },
1078
+ {
1079
+ type: "playing",
1080
+ handler: onPlaying
1081
+ },
1082
+ {
1083
+ type: "ended",
1084
+ handler: onEnded
1085
+ },
1086
+ {
1087
+ type: "error",
1088
+ handler: onError
1089
+ },
1090
+ {
1091
+ type: "volumechange",
1092
+ handler: onVolumeChange
1093
+ },
1094
+ {
1095
+ type: "pause",
1096
+ handler: onPause
1097
+ },
1098
+ {
1099
+ type: "play",
1100
+ handler: onPlay
1101
+ }
1102
+ ];
1103
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
1104
+ try {
1105
+ for(var _iterator = adEventHandlers[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
1106
+ var _step_value = _step.value, type = _step_value.type, handler = _step_value.handler;
1107
+ adVideoElement.addEventListener(type, handler);
1108
+ }
1109
+ } catch (err) {
1110
+ _didIteratorError = true;
1111
+ _iteratorError = err;
1112
+ } finally{
1113
+ try {
1114
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
1115
+ _iterator.return();
1116
+ }
1117
+ } finally{
1118
+ if (_didIteratorError) {
1119
+ throw _iteratorError;
1120
+ }
1121
+ }
1122
+ }
1123
+ }
1124
+ function teardownAdEventListeners() {
1125
+ if (adVideoElement) {
1126
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
1127
+ try {
1128
+ for(var _iterator = adEventHandlers[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
1129
+ var _step_value = _step.value, type = _step_value.type, handler = _step_value.handler;
1130
+ adVideoElement.removeEventListener(type, handler);
1131
+ }
1132
+ } catch (err) {
1133
+ _didIteratorError = true;
1134
+ _iteratorError = err;
1135
+ } finally{
1136
+ try {
1137
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
1138
+ _iterator.return();
1139
+ }
1140
+ } finally{
1141
+ if (_didIteratorError) {
1142
+ throw _iteratorError;
1143
+ }
1144
+ }
1145
+ }
1146
+ }
1147
+ adEventHandlers = [];
1069
1148
  }
1070
1149
  function setAdPlayingFlag(isPlaying) {
1071
1150
  if (isPlaying) {
@@ -1211,15 +1290,13 @@ function createHlsAdPlayer(contentVideo, options) {
1211
1290
  adHls = void 0;
1212
1291
  }
1213
1292
  if (adVideoElement) {
1214
- adVideoElement.pause();
1215
- adVideoElement.removeAttribute("src");
1216
1293
  try {
1294
+ adVideoElement.pause();
1295
+ adVideoElement.removeAttribute("src");
1217
1296
  adVideoElement.load();
1218
1297
  } catch (error) {
1219
- console.warn("[HlsAdPlayer] adVideoElement.load() threw after src removal:", error);
1298
+ console.warn("[HlsAdPlayer] Error releasing ad decoder:", error);
1220
1299
  }
1221
- adVideoElement.remove();
1222
- adVideoElement = void 0;
1223
1300
  }
1224
1301
  if (adContainerEl) {
1225
1302
  adContainerEl.style.display = "none";
@@ -1282,6 +1359,7 @@ function createHlsAdPlayer(contentVideo, options) {
1282
1359
  (_contentVideo_parentElement = contentVideo.parentElement) === null || _contentVideo_parentElement === void 0 ? void 0 : _contentVideo_parentElement.appendChild(container);
1283
1360
  adContainerEl = container;
1284
1361
  }
1362
+ contentVideo[AD_CONTAINER_PROP] = adContainerEl;
1285
1363
  },
1286
1364
  requestAds: function requestAds(vastTagUrl) {
1287
1365
  return _async_to_generator(function() {
@@ -1384,8 +1462,9 @@ function createHlsAdPlayer(contentVideo, options) {
1384
1462
  if (!adVideoElement) {
1385
1463
  adVideoElement = createAdVideoElement();
1386
1464
  adContainerEl === null || adContainerEl === void 0 ? void 0 : adContainerEl.appendChild(adVideoElement);
1387
- setupAdEventListeners();
1465
+ contentVideo[AD_VIDEO_PROP] = adVideoElement;
1388
1466
  }
1467
+ setupAdEventListeners();
1389
1468
  resetQuartileTracking(true);
1390
1469
  contentVolume = contentVideo.volume;
1391
1470
  originalVolume = Math.max(0, Math.min(1, contentVolume || originalVolume));
@@ -1513,11 +1592,8 @@ function createHlsAdPlayer(contentVideo, options) {
1513
1592
  setAdPlayingFlag(false);
1514
1593
  contentVideo.muted = originalMutedState;
1515
1594
  contentVideo.volume = Math.max(0, Math.min(1, originalVolume));
1595
+ teardownAdEventListeners();
1516
1596
  releaseAdDecoder();
1517
- if (adContainerEl === null || adContainerEl === void 0 ? void 0 : adContainerEl.parentElement) {
1518
- adContainerEl.parentElement.removeChild(adContainerEl);
1519
- }
1520
- adContainerEl = void 0;
1521
1597
  currentAd = void 0;
1522
1598
  podAds = [];
1523
1599
  podIndex = 0;
@@ -3930,6 +4006,11 @@ function detectBrowser() {
3930
4006
  chromeVersion: chromeVersionNum
3931
4007
  };
3932
4008
  }
4009
+ function requiresMediaPipelineResetAfterAds() {
4010
+ var _browser_tizenVersion;
4011
+ var browser = detectBrowser();
4012
+ return browser.name === "Samsung Tizen" && ((_browser_tizenVersion = browser.tizenVersion) !== null && _browser_tizenVersion !== void 0 ? _browser_tizenVersion : 0) >= 5;
4013
+ }
3933
4014
  function getBrowserConfigOverrides() {
3934
4015
  var browser = detectBrowser();
3935
4016
  var overrides = {};
@@ -6691,30 +6772,49 @@ var HlsEngine = /*#__PURE__*/ function() {
6691
6772
  {
6692
6773
  key: "reloadLiveStream",
6693
6774
  value: function reloadLiveStream() {
6775
+ var _this = this;
6694
6776
  var hls = this.hls;
6695
6777
  if (!hls) {
6696
6778
  return;
6697
6779
  }
6698
6780
  if (this.debug) {
6699
- console.log("[StormcloudVideoPlayer] Hard-reloading live stream (detach \u2192 reset video \u2192 re-attach)");
6781
+ console.log("[StormcloudVideoPlayer] Hard-reloading live stream (destroy hls \u2192 reset video \u2192 fresh setupHls)");
6700
6782
  }
6701
6783
  try {
6702
6784
  this.reloadingLiveStream = true;
6703
6785
  hls.stopLoad();
6704
6786
  hls.detachMedia();
6787
+ hls.destroy();
6788
+ this.hls = void 0;
6705
6789
  try {
6706
6790
  this.video.removeAttribute("src");
6707
6791
  this.video.load();
6708
6792
  } catch (error) {
6709
6793
  console.warn("[StormcloudVideoPlayer] video.load() threw after src removal:", error);
6710
6794
  }
6711
- hls.attachMedia(this.video);
6712
6795
  } catch (error) {
6713
6796
  this.reloadingLiveStream = false;
6797
+ this.hls = void 0;
6714
6798
  if (this.debug) {
6715
- console.warn("[StormcloudVideoPlayer] Failed to hard-reload live stream:", error);
6799
+ console.warn("[StormcloudVideoPlayer] Failed to tear down during hard-reload:", error);
6716
6800
  }
6801
+ return;
6717
6802
  }
6803
+ var recreateDelayMs = 600;
6804
+ window.setTimeout(function() {
6805
+ if (_this.hls) {
6806
+ _this.reloadingLiveStream = false;
6807
+ return;
6808
+ }
6809
+ try {
6810
+ _this.setupHls();
6811
+ } catch (error) {
6812
+ _this.reloadingLiveStream = false;
6813
+ if (_this.debug) {
6814
+ console.warn("[StormcloudVideoPlayer] Failed to rebuild pipeline during hard-reload:", error);
6815
+ }
6816
+ }
6817
+ }, recreateDelayMs);
6718
6818
  }
6719
6819
  },
6720
6820
  {
@@ -8027,6 +8127,14 @@ var AdBreakOrchestrator = /*#__PURE__*/ function() {
8027
8127
  this.host.video.style.visibility = "visible";
8028
8128
  this.host.video.style.opacity = "1";
8029
8129
  if (this.host.isLiveStream()) {
8130
+ if (this.host.requiresMediaPipelineResetAfterAds()) {
8131
+ if (this.debug) {
8132
+ console.log("[StormcloudVideoPlayer] Live break end \u2014 hard-reloading stream to reacquire decoder (single-decoder platform)");
8133
+ }
8134
+ this.host.reloadLiveStream();
8135
+ this.monitorLiveResumeStall(this.host.video.currentTime);
8136
+ return;
8137
+ }
8030
8138
  var liveSyncPos = this.host.getLiveSyncPosition();
8031
8139
  if (liveSyncPos != null && liveSyncPos > this.host.video.currentTime) {
8032
8140
  if (this.debug) {
@@ -8088,9 +8196,10 @@ var AdBreakOrchestrator = /*#__PURE__*/ function() {
8088
8196
  key: "monitorLiveResumeStall",
8089
8197
  value: function monitorLiveResumeStall(resumeBaseline) {
8090
8198
  var _this = this;
8199
+ var needsReset = this.host.requiresMediaPipelineResetAfterAds();
8091
8200
  var pollIntervalMs = 1e3;
8092
- var graceMs = 5e3;
8093
- var recoveryCooldownMs = 5e3;
8201
+ var graceMs = needsReset ? 8e3 : 5e3;
8202
+ var recoveryCooldownMs = needsReset ? 7e3 : 5e3;
8094
8203
  var maxRecoveries = 3;
8095
8204
  var maxMonitorMs = 45e3;
8096
8205
  var startTime = Date.now();
@@ -8204,7 +8313,12 @@ var AdBreakOrchestrator = /*#__PURE__*/ function() {
8204
8313
  if (canRecover) {
8205
8314
  recoveries++;
8206
8315
  lastRecoveryAt = Date.now();
8207
- if (recoveries === 1) {
8316
+ if (needsReset) {
8317
+ if (_this.debug) {
8318
+ console.warn("[StormcloudVideoPlayer] Content still wedged after ad break — hard-reloading live stream (recovery ".concat(recoveries, "/").concat(maxRecoveries, ") — ").concat(_this.describeVideoState()));
8319
+ }
8320
+ _this.host.reloadLiveStream();
8321
+ } else if (recoveries === 1) {
8208
8322
  if (_this.debug) {
8209
8323
  console.warn("[StormcloudVideoPlayer] Content wedged after ad break — calling recoverMediaError() (recovery ".concat(recoveries, "/").concat(maxRecoveries, ") — ").concat(_this.describeVideoState()));
8210
8324
  }
@@ -8417,6 +8531,9 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
8417
8531
  recoverMediaError: function recoverMediaError() {
8418
8532
  return _this.hlsEngine.recoverMediaError();
8419
8533
  },
8534
+ requiresMediaPipelineResetAfterAds: function requiresMediaPipelineResetAfterAds1() {
8535
+ return requiresMediaPipelineResetAfterAds();
8536
+ },
8420
8537
  generatePodVastUrl: function generatePodVastUrl(base, breakDurationMs) {
8421
8538
  return _this.generatePodVastUrl(base, breakDurationMs);
8422
8539
  }