stormcloud-video-player 0.8.46 → 0.8.47

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.
package/lib/index.d.cts CHANGED
@@ -4001,6 +4001,7 @@ interface BrowserInfo {
4001
4001
  chromeVersion?: number | undefined;
4002
4002
  }
4003
4003
  declare function detectBrowser(): BrowserInfo;
4004
+ declare function requiresMediaPipelineResetAfterAds(): boolean;
4004
4005
  declare function getBrowserConfigOverrides(): {
4005
4006
  allowNativeHls?: boolean;
4006
4007
  pauseContentDuringAds?: boolean;
@@ -4043,4 +4044,4 @@ interface PalNonceManager {
4043
4044
  }
4044
4045
  declare function createPalNonceManager(): PalNonceManager;
4045
4046
 
4046
- export { type AdBreak, type AdController, type AdControllerOptions, type AdDetectInfo, type AdImpressionInfo, type AdLoadedInfo, type AdSchedule, type BaseStormcloudPlayerProps, type BrowserInfo, type ClientInfo, DEFAULT_MQTT_CONFIG, type HeartbeatData, IS_BROWSER, IS_GLOBAL, IS_IOS, IS_SAFARI, type ImaController, type ImaControllerOptions, type LateJoinPolicy, type MQTTConfig, type MQTTStatus, MQTT_CA_CERT_FILE, type OnProgressProps, type PalNonceManager, type PalNonceOptions, type PlayerAnalyticsContext, SUPPORTS_DASH, SUPPORTS_HLS, StormcloudPlayer, StormcloudVideoPlayer, StormcloudVideoPlayerComponent, type StormcloudVideoPlayerConfig, type StormcloudVideoPlayerProps, type TrackingData, applyMQTTConfig, buildAnalyticsContext, buildMQTTBrokerUrl, buildPlayerTopic, canPlay, configureMQTT, createHlsAdPlayer, createPalNonceManager, createStormcloudPlayer, StormcloudVideoPlayerComponent as default, detectBrowser, disconnectMQTT, ensureMQTTClient, getBrowserConfigOverrides, getBrowserID, getClientInfo, getMQTTStatus, initMQTTClient, initializePolyfills, isMQTTConfigured, isMQTTConnected, isMQTTEnabled, isMediaStream, lazy, logBrowserInfo, merge, mqttConfig, omit, parseQuery, players, publishMQTT, randomString, sendAdDetectTracking, sendAdImpressionTracking, sendAdLoadedTracking, sendHeartbeat, sendInitialTracking, supportsFeature, supportsModernJS, supportsWebKitPresentationMode };
4047
+ export { type AdBreak, type AdController, type AdControllerOptions, type AdDetectInfo, type AdImpressionInfo, type AdLoadedInfo, type AdSchedule, type BaseStormcloudPlayerProps, type BrowserInfo, type ClientInfo, DEFAULT_MQTT_CONFIG, type HeartbeatData, IS_BROWSER, IS_GLOBAL, IS_IOS, IS_SAFARI, type ImaController, type ImaControllerOptions, type LateJoinPolicy, type MQTTConfig, type MQTTStatus, MQTT_CA_CERT_FILE, type OnProgressProps, type PalNonceManager, type PalNonceOptions, type PlayerAnalyticsContext, SUPPORTS_DASH, SUPPORTS_HLS, StormcloudPlayer, StormcloudVideoPlayer, StormcloudVideoPlayerComponent, type StormcloudVideoPlayerConfig, type StormcloudVideoPlayerProps, type TrackingData, applyMQTTConfig, buildAnalyticsContext, buildMQTTBrokerUrl, buildPlayerTopic, canPlay, configureMQTT, createHlsAdPlayer, createPalNonceManager, createStormcloudPlayer, StormcloudVideoPlayerComponent as default, detectBrowser, disconnectMQTT, ensureMQTTClient, getBrowserConfigOverrides, getBrowserID, getClientInfo, getMQTTStatus, initMQTTClient, initializePolyfills, isMQTTConfigured, isMQTTConnected, isMQTTEnabled, isMediaStream, lazy, logBrowserInfo, merge, mqttConfig, omit, parseQuery, players, publishMQTT, randomString, requiresMediaPipelineResetAfterAds, sendAdDetectTracking, sendAdImpressionTracking, sendAdLoadedTracking, sendHeartbeat, sendInitialTracking, supportsFeature, supportsModernJS, supportsWebKitPresentationMode };
package/lib/index.d.ts CHANGED
@@ -4001,6 +4001,7 @@ interface BrowserInfo {
4001
4001
  chromeVersion?: number | undefined;
4002
4002
  }
4003
4003
  declare function detectBrowser(): BrowserInfo;
4004
+ declare function requiresMediaPipelineResetAfterAds(): boolean;
4004
4005
  declare function getBrowserConfigOverrides(): {
4005
4006
  allowNativeHls?: boolean;
4006
4007
  pauseContentDuringAds?: boolean;
@@ -4043,4 +4044,4 @@ interface PalNonceManager {
4043
4044
  }
4044
4045
  declare function createPalNonceManager(): PalNonceManager;
4045
4046
 
4046
- export { type AdBreak, type AdController, type AdControllerOptions, type AdDetectInfo, type AdImpressionInfo, type AdLoadedInfo, type AdSchedule, type BaseStormcloudPlayerProps, type BrowserInfo, type ClientInfo, DEFAULT_MQTT_CONFIG, type HeartbeatData, IS_BROWSER, IS_GLOBAL, IS_IOS, IS_SAFARI, type ImaController, type ImaControllerOptions, type LateJoinPolicy, type MQTTConfig, type MQTTStatus, MQTT_CA_CERT_FILE, type OnProgressProps, type PalNonceManager, type PalNonceOptions, type PlayerAnalyticsContext, SUPPORTS_DASH, SUPPORTS_HLS, StormcloudPlayer, StormcloudVideoPlayer, StormcloudVideoPlayerComponent, type StormcloudVideoPlayerConfig, type StormcloudVideoPlayerProps, type TrackingData, applyMQTTConfig, buildAnalyticsContext, buildMQTTBrokerUrl, buildPlayerTopic, canPlay, configureMQTT, createHlsAdPlayer, createPalNonceManager, createStormcloudPlayer, StormcloudVideoPlayerComponent as default, detectBrowser, disconnectMQTT, ensureMQTTClient, getBrowserConfigOverrides, getBrowserID, getClientInfo, getMQTTStatus, initMQTTClient, initializePolyfills, isMQTTConfigured, isMQTTConnected, isMQTTEnabled, isMediaStream, lazy, logBrowserInfo, merge, mqttConfig, omit, parseQuery, players, publishMQTT, randomString, sendAdDetectTracking, sendAdImpressionTracking, sendAdLoadedTracking, sendHeartbeat, sendInitialTracking, supportsFeature, supportsModernJS, supportsWebKitPresentationMode };
4047
+ export { type AdBreak, type AdController, type AdControllerOptions, type AdDetectInfo, type AdImpressionInfo, type AdLoadedInfo, type AdSchedule, type BaseStormcloudPlayerProps, type BrowserInfo, type ClientInfo, DEFAULT_MQTT_CONFIG, type HeartbeatData, IS_BROWSER, IS_GLOBAL, IS_IOS, IS_SAFARI, type ImaController, type ImaControllerOptions, type LateJoinPolicy, type MQTTConfig, type MQTTStatus, MQTT_CA_CERT_FILE, type OnProgressProps, type PalNonceManager, type PalNonceOptions, type PlayerAnalyticsContext, SUPPORTS_DASH, SUPPORTS_HLS, StormcloudPlayer, StormcloudVideoPlayer, StormcloudVideoPlayerComponent, type StormcloudVideoPlayerConfig, type StormcloudVideoPlayerProps, type TrackingData, applyMQTTConfig, buildAnalyticsContext, buildMQTTBrokerUrl, buildPlayerTopic, canPlay, configureMQTT, createHlsAdPlayer, createPalNonceManager, createStormcloudPlayer, StormcloudVideoPlayerComponent as default, detectBrowser, disconnectMQTT, ensureMQTTClient, getBrowserConfigOverrides, getBrowserID, getClientInfo, getMQTTStatus, initMQTTClient, initializePolyfills, isMQTTConfigured, isMQTTConnected, isMQTTEnabled, isMediaStream, lazy, logBrowserInfo, merge, mqttConfig, omit, parseQuery, players, publishMQTT, randomString, requiresMediaPipelineResetAfterAds, sendAdDetectTracking, sendAdImpressionTracking, sendAdLoadedTracking, sendHeartbeat, sendInitialTracking, supportsFeature, supportsModernJS, supportsWebKitPresentationMode };
package/lib/index.js CHANGED
@@ -372,15 +372,19 @@ import React, { useEffect, useRef, useMemo, useCallback } from "react";
372
372
  import Hls from "hls.js";
373
373
  var MAX_VAST_WRAPPER_DEPTH = 5;
374
374
  function createHlsAdPlayer(contentVideo, options) {
375
+ var _contentVideo_AD_VIDEO_PROP, _contentVideo_AD_CONTAINER_PROP;
375
376
  var adPlaying = false;
376
377
  var originalMutedState = false;
377
378
  var originalVolume = Math.max(0, Math.min(1, contentVideo.volume || 1));
378
379
  var listeners = /* @__PURE__ */ new Map();
379
380
  var licenseKey = options === null || options === void 0 ? void 0 : options.licenseKey;
380
381
  var mainHlsInstance = options === null || options === void 0 ? void 0 : options.mainHlsInstance;
381
- var adVideoElement;
382
+ var AD_CONTAINER_PROP = "__stormcloudAdContainer";
383
+ var AD_VIDEO_PROP = "__stormcloudAdVideo";
384
+ var adVideoElement = (_contentVideo_AD_VIDEO_PROP = contentVideo[AD_VIDEO_PROP]) !== null && _contentVideo_AD_VIDEO_PROP !== void 0 ? _contentVideo_AD_VIDEO_PROP : void 0;
382
385
  var adHls;
383
- var adContainerEl;
386
+ var adContainerEl = (_contentVideo_AD_CONTAINER_PROP = contentVideo[AD_CONTAINER_PROP]) !== null && _contentVideo_AD_CONTAINER_PROP !== void 0 ? _contentVideo_AD_CONTAINER_PROP : void 0;
387
+ var adEventHandlers = [];
384
388
  var currentAd;
385
389
  var podAds = [];
386
390
  var podIndex = 0;
@@ -1024,7 +1028,8 @@ function createHlsAdPlayer(contentVideo, options) {
1024
1028
  }
1025
1029
  function setupAdEventListeners() {
1026
1030
  if (!adVideoElement || !currentAd) return;
1027
- adVideoElement.addEventListener("timeupdate", function() {
1031
+ if (adEventHandlers.length > 0) return;
1032
+ var onTimeUpdate = function onTimeUpdate() {
1028
1033
  if (!currentAd || !adVideoElement) return;
1029
1034
  noteAdProgress();
1030
1035
  var progress = adVideoElement.currentTime / currentAd.duration;
@@ -1040,15 +1045,15 @@ function createHlsAdPlayer(contentVideo, options) {
1040
1045
  trackingFired.thirdQuartile = true;
1041
1046
  fireTrackingPixels(currentAd.trackingUrls.thirdQuartile);
1042
1047
  }
1043
- });
1044
- adVideoElement.addEventListener("playing", function() {
1048
+ };
1049
+ var onPlaying = function onPlaying() {
1045
1050
  startStallWatchdog();
1046
1051
  if (!currentAd || trackingFired.start) return;
1047
1052
  trackingFired.start = true;
1048
1053
  fireTrackingPixels(currentAd.trackingUrls.start);
1049
1054
  console.log("[HlsAdPlayer] Ad started playing");
1050
- });
1051
- adVideoElement.addEventListener("ended", function() {
1055
+ };
1056
+ var onEnded = function onEnded() {
1052
1057
  if (!currentAd || trackingFired.complete) return;
1053
1058
  trackingFired.complete = true;
1054
1059
  fireTrackingPixels(currentAd.trackingUrls.complete);
@@ -1057,8 +1062,8 @@ function createHlsAdPlayer(contentVideo, options) {
1057
1062
  return;
1058
1063
  }
1059
1064
  handleAdComplete();
1060
- });
1061
- adVideoElement.addEventListener("error", function(e) {
1065
+ };
1066
+ var onError = function onError(e) {
1062
1067
  if (!adPlaying) return;
1063
1068
  console.error("[HlsAdPlayer] Ad video error:", e);
1064
1069
  if (currentAd) {
@@ -1068,25 +1073,100 @@ function createHlsAdPlayer(contentVideo, options) {
1068
1073
  return;
1069
1074
  }
1070
1075
  handleAdError();
1071
- });
1072
- adVideoElement.addEventListener("volumechange", function() {
1073
- if (!currentAd) return;
1076
+ };
1077
+ var onVolumeChange = function onVolumeChange() {
1078
+ if (!currentAd || !adVideoElement) return;
1074
1079
  if (adVideoElement.muted) {
1075
1080
  fireTrackingPixels(currentAd.trackingUrls.mute);
1076
1081
  } else {
1077
1082
  fireTrackingPixels(currentAd.trackingUrls.unmute);
1078
1083
  }
1079
- });
1080
- adVideoElement.addEventListener("pause", function() {
1081
- if (currentAd && !adVideoElement.ended) {
1084
+ };
1085
+ var onPause = function onPause() {
1086
+ if (currentAd && adVideoElement && !adVideoElement.ended) {
1082
1087
  fireTrackingPixels(currentAd.trackingUrls.pause);
1083
1088
  }
1084
- });
1085
- adVideoElement.addEventListener("play", function() {
1086
- if (currentAd && adVideoElement.currentTime > 0) {
1089
+ };
1090
+ var onPlay = function onPlay() {
1091
+ if (currentAd && adVideoElement && adVideoElement.currentTime > 0) {
1087
1092
  fireTrackingPixels(currentAd.trackingUrls.resume);
1088
1093
  }
1089
- });
1094
+ };
1095
+ adEventHandlers = [
1096
+ {
1097
+ type: "timeupdate",
1098
+ handler: onTimeUpdate
1099
+ },
1100
+ {
1101
+ type: "playing",
1102
+ handler: onPlaying
1103
+ },
1104
+ {
1105
+ type: "ended",
1106
+ handler: onEnded
1107
+ },
1108
+ {
1109
+ type: "error",
1110
+ handler: onError
1111
+ },
1112
+ {
1113
+ type: "volumechange",
1114
+ handler: onVolumeChange
1115
+ },
1116
+ {
1117
+ type: "pause",
1118
+ handler: onPause
1119
+ },
1120
+ {
1121
+ type: "play",
1122
+ handler: onPlay
1123
+ }
1124
+ ];
1125
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
1126
+ try {
1127
+ for(var _iterator = adEventHandlers[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
1128
+ var _step_value = _step.value, type = _step_value.type, handler = _step_value.handler;
1129
+ adVideoElement.addEventListener(type, handler);
1130
+ }
1131
+ } catch (err) {
1132
+ _didIteratorError = true;
1133
+ _iteratorError = err;
1134
+ } finally{
1135
+ try {
1136
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
1137
+ _iterator.return();
1138
+ }
1139
+ } finally{
1140
+ if (_didIteratorError) {
1141
+ throw _iteratorError;
1142
+ }
1143
+ }
1144
+ }
1145
+ }
1146
+ function teardownAdEventListeners() {
1147
+ if (adVideoElement) {
1148
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
1149
+ try {
1150
+ for(var _iterator = adEventHandlers[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
1151
+ var _step_value = _step.value, type = _step_value.type, handler = _step_value.handler;
1152
+ adVideoElement.removeEventListener(type, handler);
1153
+ }
1154
+ } catch (err) {
1155
+ _didIteratorError = true;
1156
+ _iteratorError = err;
1157
+ } finally{
1158
+ try {
1159
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
1160
+ _iterator.return();
1161
+ }
1162
+ } finally{
1163
+ if (_didIteratorError) {
1164
+ throw _iteratorError;
1165
+ }
1166
+ }
1167
+ }
1168
+ }
1169
+ adEventHandlers = [];
1090
1170
  }
1091
1171
  function setAdPlayingFlag(isPlaying) {
1092
1172
  if (isPlaying) {
@@ -1232,15 +1312,13 @@ function createHlsAdPlayer(contentVideo, options) {
1232
1312
  adHls = void 0;
1233
1313
  }
1234
1314
  if (adVideoElement) {
1235
- adVideoElement.pause();
1236
- adVideoElement.removeAttribute("src");
1237
1315
  try {
1316
+ adVideoElement.pause();
1317
+ adVideoElement.removeAttribute("src");
1238
1318
  adVideoElement.load();
1239
1319
  } catch (error) {
1240
- console.warn("[HlsAdPlayer] adVideoElement.load() threw after src removal:", error);
1320
+ console.warn("[HlsAdPlayer] Error releasing ad decoder:", error);
1241
1321
  }
1242
- adVideoElement.remove();
1243
- adVideoElement = void 0;
1244
1322
  }
1245
1323
  if (adContainerEl) {
1246
1324
  adContainerEl.style.display = "none";
@@ -1303,6 +1381,7 @@ function createHlsAdPlayer(contentVideo, options) {
1303
1381
  (_contentVideo_parentElement = contentVideo.parentElement) === null || _contentVideo_parentElement === void 0 ? void 0 : _contentVideo_parentElement.appendChild(container);
1304
1382
  adContainerEl = container;
1305
1383
  }
1384
+ contentVideo[AD_CONTAINER_PROP] = adContainerEl;
1306
1385
  },
1307
1386
  requestAds: function requestAds(vastTagUrl) {
1308
1387
  return _async_to_generator(function() {
@@ -1405,8 +1484,9 @@ function createHlsAdPlayer(contentVideo, options) {
1405
1484
  if (!adVideoElement) {
1406
1485
  adVideoElement = createAdVideoElement();
1407
1486
  adContainerEl === null || adContainerEl === void 0 ? void 0 : adContainerEl.appendChild(adVideoElement);
1408
- setupAdEventListeners();
1487
+ contentVideo[AD_VIDEO_PROP] = adVideoElement;
1409
1488
  }
1489
+ setupAdEventListeners();
1410
1490
  resetQuartileTracking(true);
1411
1491
  contentVolume = contentVideo.volume;
1412
1492
  originalVolume = Math.max(0, Math.min(1, contentVolume || originalVolume));
@@ -1534,11 +1614,8 @@ function createHlsAdPlayer(contentVideo, options) {
1534
1614
  setAdPlayingFlag(false);
1535
1615
  contentVideo.muted = originalMutedState;
1536
1616
  contentVideo.volume = Math.max(0, Math.min(1, originalVolume));
1617
+ teardownAdEventListeners();
1537
1618
  releaseAdDecoder();
1538
- if (adContainerEl === null || adContainerEl === void 0 ? void 0 : adContainerEl.parentElement) {
1539
- adContainerEl.parentElement.removeChild(adContainerEl);
1540
- }
1541
- adContainerEl = void 0;
1542
1619
  currentAd = void 0;
1543
1620
  podAds = [];
1544
1621
  podIndex = 0;
@@ -3974,6 +4051,11 @@ function detectBrowser() {
3974
4051
  chromeVersion: chromeVersionNum
3975
4052
  };
3976
4053
  }
4054
+ function requiresMediaPipelineResetAfterAds() {
4055
+ var _browser_tizenVersion;
4056
+ var browser = detectBrowser();
4057
+ return browser.name === "Samsung Tizen" && ((_browser_tizenVersion = browser.tizenVersion) !== null && _browser_tizenVersion !== void 0 ? _browser_tizenVersion : 0) >= 5;
4058
+ }
3977
4059
  function getBrowserConfigOverrides() {
3978
4060
  var browser = detectBrowser();
3979
4061
  var overrides = {};
@@ -6764,30 +6846,49 @@ var HlsEngine = /*#__PURE__*/ function() {
6764
6846
  {
6765
6847
  key: "reloadLiveStream",
6766
6848
  value: function reloadLiveStream() {
6849
+ var _this = this;
6767
6850
  var hls = this.hls;
6768
6851
  if (!hls) {
6769
6852
  return;
6770
6853
  }
6771
6854
  if (this.debug) {
6772
- console.log("[StormcloudVideoPlayer] Hard-reloading live stream (detach \u2192 reset video \u2192 re-attach)");
6855
+ console.log("[StormcloudVideoPlayer] Hard-reloading live stream (destroy hls \u2192 reset video \u2192 fresh setupHls)");
6773
6856
  }
6774
6857
  try {
6775
6858
  this.reloadingLiveStream = true;
6776
6859
  hls.stopLoad();
6777
6860
  hls.detachMedia();
6861
+ hls.destroy();
6862
+ this.hls = void 0;
6778
6863
  try {
6779
6864
  this.video.removeAttribute("src");
6780
6865
  this.video.load();
6781
6866
  } catch (error) {
6782
6867
  console.warn("[StormcloudVideoPlayer] video.load() threw after src removal:", error);
6783
6868
  }
6784
- hls.attachMedia(this.video);
6785
6869
  } catch (error) {
6786
6870
  this.reloadingLiveStream = false;
6871
+ this.hls = void 0;
6787
6872
  if (this.debug) {
6788
- console.warn("[StormcloudVideoPlayer] Failed to hard-reload live stream:", error);
6873
+ console.warn("[StormcloudVideoPlayer] Failed to tear down during hard-reload:", error);
6789
6874
  }
6875
+ return;
6790
6876
  }
6877
+ var recreateDelayMs = 600;
6878
+ window.setTimeout(function() {
6879
+ if (_this.hls) {
6880
+ _this.reloadingLiveStream = false;
6881
+ return;
6882
+ }
6883
+ try {
6884
+ _this.setupHls();
6885
+ } catch (error) {
6886
+ _this.reloadingLiveStream = false;
6887
+ if (_this.debug) {
6888
+ console.warn("[StormcloudVideoPlayer] Failed to rebuild pipeline during hard-reload:", error);
6889
+ }
6890
+ }
6891
+ }, recreateDelayMs);
6791
6892
  }
6792
6893
  },
6793
6894
  {
@@ -8101,6 +8202,14 @@ var AdBreakOrchestrator = /*#__PURE__*/ function() {
8101
8202
  this.host.video.style.visibility = "visible";
8102
8203
  this.host.video.style.opacity = "1";
8103
8204
  if (this.host.isLiveStream()) {
8205
+ if (this.host.requiresMediaPipelineResetAfterAds()) {
8206
+ if (this.debug) {
8207
+ console.log("[StormcloudVideoPlayer] Live break end \u2014 hard-reloading stream to reacquire decoder (single-decoder platform)");
8208
+ }
8209
+ this.host.reloadLiveStream();
8210
+ this.monitorLiveResumeStall(this.host.video.currentTime);
8211
+ return;
8212
+ }
8104
8213
  var liveSyncPos = this.host.getLiveSyncPosition();
8105
8214
  if (liveSyncPos != null && liveSyncPos > this.host.video.currentTime) {
8106
8215
  if (this.debug) {
@@ -8162,9 +8271,10 @@ var AdBreakOrchestrator = /*#__PURE__*/ function() {
8162
8271
  key: "monitorLiveResumeStall",
8163
8272
  value: function monitorLiveResumeStall(resumeBaseline) {
8164
8273
  var _this = this;
8274
+ var needsReset = this.host.requiresMediaPipelineResetAfterAds();
8165
8275
  var pollIntervalMs = 1e3;
8166
- var graceMs = 5e3;
8167
- var recoveryCooldownMs = 5e3;
8276
+ var graceMs = needsReset ? 8e3 : 5e3;
8277
+ var recoveryCooldownMs = needsReset ? 7e3 : 5e3;
8168
8278
  var maxRecoveries = 3;
8169
8279
  var maxMonitorMs = 45e3;
8170
8280
  var startTime = Date.now();
@@ -8278,7 +8388,12 @@ var AdBreakOrchestrator = /*#__PURE__*/ function() {
8278
8388
  if (canRecover) {
8279
8389
  recoveries++;
8280
8390
  lastRecoveryAt = Date.now();
8281
- if (recoveries === 1) {
8391
+ if (needsReset) {
8392
+ if (_this.debug) {
8393
+ console.warn("[StormcloudVideoPlayer] Content still wedged after ad break — hard-reloading live stream (recovery ".concat(recoveries, "/").concat(maxRecoveries, ") — ").concat(_this.describeVideoState()));
8394
+ }
8395
+ _this.host.reloadLiveStream();
8396
+ } else if (recoveries === 1) {
8282
8397
  if (_this.debug) {
8283
8398
  console.warn("[StormcloudVideoPlayer] Content wedged after ad break — calling recoverMediaError() (recovery ".concat(recoveries, "/").concat(maxRecoveries, ") — ").concat(_this.describeVideoState()));
8284
8399
  }
@@ -8492,6 +8607,9 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
8492
8607
  recoverMediaError: function recoverMediaError() {
8493
8608
  return _this.hlsEngine.recoverMediaError();
8494
8609
  },
8610
+ requiresMediaPipelineResetAfterAds: function requiresMediaPipelineResetAfterAds1() {
8611
+ return requiresMediaPipelineResetAfterAds();
8612
+ },
8495
8613
  generatePodVastUrl: function generatePodVastUrl(base, breakDurationMs) {
8496
8614
  return _this.generatePodVastUrl(base, breakDurationMs);
8497
8615
  }
@@ -11804,5 +11922,5 @@ var createStormcloudPlayer = function createStormcloudPlayer(playerList, fallbac
11804
11922
  };
11805
11923
  var StormcloudPlayer = createStormcloudPlayer(players_default, players_default[players_default.length - 1]);
11806
11924
  var StormcloudPlayer_default = StormcloudPlayer;
11807
- export { DEFAULT_MQTT_CONFIG, IS_BROWSER, IS_GLOBAL, IS_IOS, IS_SAFARI, MQTT_CA_CERT_FILE, SUPPORTS_DASH, SUPPORTS_HLS, StormcloudPlayer_default as StormcloudPlayer, StormcloudVideoPlayer, StormcloudVideoPlayerComponent, applyMQTTConfig, buildAnalyticsContext, buildMQTTBrokerUrl, buildPlayerTopic, canPlay, configureMQTT, createHlsAdPlayer, createPalNonceManager, createStormcloudPlayer, StormcloudVideoPlayerComponent as default, detectBrowser, disconnectMQTT, ensureMQTTClient, getBrowserConfigOverrides, getBrowserID, getClientInfo, getMQTTStatus, initMQTTClient, initializePolyfills, isMQTTConfigured, isMQTTConnected, isMQTTEnabled, isMediaStream, lazy, logBrowserInfo, merge, mqttConfig, omit, parseQuery, players_default as players, publishMQTT, randomString, sendAdDetectTracking, sendAdImpressionTracking, sendAdLoadedTracking, sendHeartbeat, sendInitialTracking, supportsFeature, supportsModernJS, supportsWebKitPresentationMode };
11925
+ export { DEFAULT_MQTT_CONFIG, IS_BROWSER, IS_GLOBAL, IS_IOS, IS_SAFARI, MQTT_CA_CERT_FILE, SUPPORTS_DASH, SUPPORTS_HLS, StormcloudPlayer_default as StormcloudPlayer, StormcloudVideoPlayer, StormcloudVideoPlayerComponent, applyMQTTConfig, buildAnalyticsContext, buildMQTTBrokerUrl, buildPlayerTopic, canPlay, configureMQTT, createHlsAdPlayer, createPalNonceManager, createStormcloudPlayer, StormcloudVideoPlayerComponent as default, detectBrowser, disconnectMQTT, ensureMQTTClient, getBrowserConfigOverrides, getBrowserID, getClientInfo, getMQTTStatus, initMQTTClient, initializePolyfills, isMQTTConfigured, isMQTTConnected, isMQTTEnabled, isMediaStream, lazy, logBrowserInfo, merge, mqttConfig, omit, parseQuery, players_default as players, publishMQTT, randomString, requiresMediaPipelineResetAfterAds, sendAdDetectTracking, sendAdImpressionTracking, sendAdLoadedTracking, sendHeartbeat, sendInitialTracking, supportsFeature, supportsModernJS, supportsWebKitPresentationMode };
11808
11926
  //# sourceMappingURL=index.js.map