stormcloud-video-player 0.8.40 → 0.8.42
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/dist/stormcloud-vp.min.js +1 -1
- package/lib/index.cjs +133 -34
- package/lib/index.cjs.map +1 -1
- package/lib/index.js +134 -35
- package/lib/index.js.map +1 -1
- package/lib/player/AdBreakOrchestrator.cjs +62 -25
- package/lib/player/AdBreakOrchestrator.cjs.map +1 -1
- package/lib/player/AdBreakOrchestrator.d.cts +1 -0
- package/lib/player/StormcloudVideoPlayer.cjs +71 -30
- package/lib/player/StormcloudVideoPlayer.cjs.map +1 -1
- package/lib/players/HlsPlayer.cjs +71 -30
- package/lib/players/HlsPlayer.cjs.map +1 -1
- package/lib/players/index.cjs +71 -30
- package/lib/players/index.cjs.map +1 -1
- package/lib/sdk/hlsAdPlayer.cjs +8 -2
- package/lib/sdk/hlsAdPlayer.cjs.map +1 -1
- package/lib/ui/StormcloudVideoPlayer.cjs +133 -34
- package/lib/ui/StormcloudVideoPlayer.cjs.map +1 -1
- package/package.json +1 -1
package/lib/index.js
CHANGED
|
@@ -1486,7 +1486,10 @@ function createHlsAdPlayer(contentVideo, options) {
|
|
|
1486
1486
|
}
|
|
1487
1487
|
if (adVideoElement) {
|
|
1488
1488
|
adVideoElement.pause();
|
|
1489
|
-
adVideoElement.src
|
|
1489
|
+
adVideoElement.removeAttribute("src");
|
|
1490
|
+
try {
|
|
1491
|
+
adVideoElement.load();
|
|
1492
|
+
} catch (unused) {}
|
|
1490
1493
|
}
|
|
1491
1494
|
currentAd = void 0;
|
|
1492
1495
|
podAds = [];
|
|
@@ -1532,7 +1535,10 @@ function createHlsAdPlayer(contentVideo, options) {
|
|
|
1532
1535
|
}
|
|
1533
1536
|
if (adVideoElement) {
|
|
1534
1537
|
adVideoElement.pause();
|
|
1535
|
-
adVideoElement.src
|
|
1538
|
+
adVideoElement.removeAttribute("src");
|
|
1539
|
+
try {
|
|
1540
|
+
adVideoElement.load();
|
|
1541
|
+
} catch (unused) {}
|
|
1536
1542
|
adVideoElement.remove();
|
|
1537
1543
|
adVideoElement = void 0;
|
|
1538
1544
|
}
|
|
@@ -8065,51 +8071,88 @@ var AdBreakOrchestrator = /*#__PURE__*/ function() {
|
|
|
8065
8071
|
this.host.restartHlsLoad(liveSyncPos);
|
|
8066
8072
|
}
|
|
8067
8073
|
this.resumeContentPlayback();
|
|
8068
|
-
this.monitorLiveResumeStall(
|
|
8074
|
+
this.monitorLiveResumeStall(this.host.video.currentTime);
|
|
8069
8075
|
return;
|
|
8070
8076
|
}
|
|
8071
8077
|
this.resumeContentPlayback();
|
|
8072
8078
|
}
|
|
8073
8079
|
},
|
|
8080
|
+
{
|
|
8081
|
+
key: "getBufferedAhead",
|
|
8082
|
+
value: function getBufferedAhead() {
|
|
8083
|
+
var video = this.host.video;
|
|
8084
|
+
var t = video.currentTime;
|
|
8085
|
+
var ranges = video.buffered;
|
|
8086
|
+
for(var i = 0; i < ranges.length; i++){
|
|
8087
|
+
if (t >= ranges.start(i) - 0.5 && t <= ranges.end(i)) {
|
|
8088
|
+
return ranges.end(i) - t;
|
|
8089
|
+
}
|
|
8090
|
+
}
|
|
8091
|
+
return 0;
|
|
8092
|
+
}
|
|
8093
|
+
},
|
|
8074
8094
|
{
|
|
8075
8095
|
key: "monitorLiveResumeStall",
|
|
8076
|
-
value: function monitorLiveResumeStall(
|
|
8096
|
+
value: function monitorLiveResumeStall(resumeBaseline) {
|
|
8077
8097
|
var _this = this;
|
|
8078
|
-
var
|
|
8079
|
-
var
|
|
8080
|
-
|
|
8098
|
+
var pollIntervalMs = 1e3;
|
|
8099
|
+
var graceMs = 5e3;
|
|
8100
|
+
var reloadCooldownMs = 5e3;
|
|
8101
|
+
var maxHardReloads = 2;
|
|
8102
|
+
var maxMonitorMs = 25e3;
|
|
8103
|
+
var startTime = Date.now();
|
|
8104
|
+
var baseline = resumeBaseline;
|
|
8105
|
+
var hardReloads = 0;
|
|
8106
|
+
var lastReloadAt = 0;
|
|
8107
|
+
var poll = function poll1() {
|
|
8081
8108
|
if (_this.inAdBreak) {
|
|
8082
8109
|
return;
|
|
8083
8110
|
}
|
|
8084
|
-
var
|
|
8085
|
-
var
|
|
8086
|
-
|
|
8111
|
+
var video = _this.host.video;
|
|
8112
|
+
var currentTime = video.currentTime;
|
|
8113
|
+
var advanced = currentTime > baseline + 0.5;
|
|
8114
|
+
var playing = !video.paused && video.readyState >= 3;
|
|
8115
|
+
if (advanced && playing) {
|
|
8087
8116
|
if (_this.debug) {
|
|
8088
8117
|
console.log("[StormcloudVideoPlayer] Live stream resumed successfully after ad break");
|
|
8089
8118
|
}
|
|
8090
8119
|
return;
|
|
8091
8120
|
}
|
|
8092
|
-
if (
|
|
8093
|
-
|
|
8094
|
-
|
|
8121
|
+
if (video.paused) {
|
|
8122
|
+
var _video_play;
|
|
8123
|
+
(_video_play = video.play()) === null || _video_play === void 0 ? void 0 : _video_play.catch(function() {});
|
|
8124
|
+
}
|
|
8125
|
+
var elapsed = Date.now() - startTime;
|
|
8126
|
+
var bufferedAhead = _this.getBufferedAhead();
|
|
8127
|
+
var wedged = bufferedAhead < 0.5 && !advanced;
|
|
8128
|
+
if (elapsed >= maxMonitorMs) {
|
|
8129
|
+
if (_this.debug && !advanced) {
|
|
8130
|
+
console.warn("[StormcloudVideoPlayer] Live stream failed to resume after ".concat((maxMonitorMs / 1e3).toFixed(0), "s (t=").concat(currentTime.toFixed(2), "s, buffered=").concat(bufferedAhead.toFixed(2), "s)"));
|
|
8095
8131
|
}
|
|
8096
8132
|
return;
|
|
8097
8133
|
}
|
|
8098
|
-
|
|
8099
|
-
|
|
8100
|
-
|
|
8101
|
-
|
|
8102
|
-
|
|
8103
|
-
|
|
8104
|
-
_this.
|
|
8105
|
-
|
|
8106
|
-
|
|
8107
|
-
|
|
8108
|
-
|
|
8109
|
-
|
|
8134
|
+
var canHardReload = wedged && elapsed >= graceMs && Date.now() - lastReloadAt >= reloadCooldownMs && hardReloads < maxHardReloads;
|
|
8135
|
+
if (canHardReload) {
|
|
8136
|
+
hardReloads++;
|
|
8137
|
+
lastReloadAt = Date.now();
|
|
8138
|
+
var liveSyncPos = _this.host.getLiveSyncPosition();
|
|
8139
|
+
var reloadPos = liveSyncPos != null && liveSyncPos > currentTime ? liveSyncPos : currentTime;
|
|
8140
|
+
if (_this.debug) {
|
|
8141
|
+
console.warn("[StormcloudVideoPlayer] Content wedged after ad break (t=".concat(currentTime.toFixed(2), "s, buffered=").concat(bufferedAhead.toFixed(2), "s) — forcing HLS reload at ").concat(reloadPos.toFixed(2), "s (hard reload ").concat(hardReloads, "/").concat(maxHardReloads, ")"));
|
|
8142
|
+
}
|
|
8143
|
+
if (liveSyncPos != null && liveSyncPos > currentTime) {
|
|
8144
|
+
video.currentTime = liveSyncPos;
|
|
8145
|
+
}
|
|
8146
|
+
_this.host.restartHlsLoad(reloadPos);
|
|
8147
|
+
baseline = video.currentTime;
|
|
8148
|
+
if (video.paused) {
|
|
8149
|
+
var _video_play1;
|
|
8150
|
+
(_video_play1 = video.play()) === null || _video_play1 === void 0 ? void 0 : _video_play1.catch(function() {});
|
|
8151
|
+
}
|
|
8110
8152
|
}
|
|
8111
|
-
|
|
8112
|
-
}
|
|
8153
|
+
window.setTimeout(poll, pollIntervalMs);
|
|
8154
|
+
};
|
|
8155
|
+
window.setTimeout(poll, pollIntervalMs);
|
|
8113
8156
|
}
|
|
8114
8157
|
},
|
|
8115
8158
|
{
|
|
@@ -8813,12 +8856,10 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
8813
8856
|
];
|
|
8814
8857
|
case 3:
|
|
8815
8858
|
error = _state.sent();
|
|
8816
|
-
this.adBreak.adPodQueue = [];
|
|
8817
|
-
this.adBreak.inAdBreak = false;
|
|
8818
|
-
this.adBreak.showAds = false;
|
|
8819
8859
|
if (this.debug) {
|
|
8820
8860
|
console.warn("[StormcloudVideoPlayer] VMAP ad request failed:", error);
|
|
8821
8861
|
}
|
|
8862
|
+
this.adBreak.handleAdPodComplete();
|
|
8822
8863
|
return [
|
|
8823
8864
|
3,
|
|
8824
8865
|
4
|
|
@@ -8986,8 +9027,66 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
|
|
|
8986
9027
|
return StormcloudVideoPlayer;
|
|
8987
9028
|
}();
|
|
8988
9029
|
// src/ui/StormcloudVideoPlayer.tsx
|
|
8989
|
-
import { FaPlay, FaPause, FaVolumeUp, FaVolumeMute, FaVolumeDown
|
|
9030
|
+
import { FaPlay, FaPause, FaVolumeUp, FaVolumeMute, FaVolumeDown } from "react-icons/fa";
|
|
8990
9031
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
9032
|
+
var ExpandIcon = function ExpandIcon(param) {
|
|
9033
|
+
var _param_size = param.size, size = _param_size === void 0 ? 18 : _param_size;
|
|
9034
|
+
return /* @__PURE__ */ jsxs("svg", {
|
|
9035
|
+
width: size,
|
|
9036
|
+
height: size,
|
|
9037
|
+
viewBox: "0 0 24 24",
|
|
9038
|
+
fill: "none",
|
|
9039
|
+
stroke: "currentColor",
|
|
9040
|
+
strokeWidth: 2,
|
|
9041
|
+
strokeLinecap: "round",
|
|
9042
|
+
strokeLinejoin: "round",
|
|
9043
|
+
"aria-hidden": "true",
|
|
9044
|
+
focusable: "false",
|
|
9045
|
+
children: [
|
|
9046
|
+
/* @__PURE__ */ jsx("path", {
|
|
9047
|
+
d: "M9 4H4v5"
|
|
9048
|
+
}),
|
|
9049
|
+
/* @__PURE__ */ jsx("path", {
|
|
9050
|
+
d: "M20 9V4h-5"
|
|
9051
|
+
}),
|
|
9052
|
+
/* @__PURE__ */ jsx("path", {
|
|
9053
|
+
d: "M15 20h5v-5"
|
|
9054
|
+
}),
|
|
9055
|
+
/* @__PURE__ */ jsx("path", {
|
|
9056
|
+
d: "M4 15v5h5"
|
|
9057
|
+
})
|
|
9058
|
+
]
|
|
9059
|
+
});
|
|
9060
|
+
};
|
|
9061
|
+
var CompressIcon = function CompressIcon(param) {
|
|
9062
|
+
var _param_size = param.size, size = _param_size === void 0 ? 18 : _param_size;
|
|
9063
|
+
return /* @__PURE__ */ jsxs("svg", {
|
|
9064
|
+
width: size,
|
|
9065
|
+
height: size,
|
|
9066
|
+
viewBox: "0 0 24 24",
|
|
9067
|
+
fill: "none",
|
|
9068
|
+
stroke: "currentColor",
|
|
9069
|
+
strokeWidth: 2,
|
|
9070
|
+
strokeLinecap: "round",
|
|
9071
|
+
strokeLinejoin: "round",
|
|
9072
|
+
"aria-hidden": "true",
|
|
9073
|
+
focusable: "false",
|
|
9074
|
+
children: [
|
|
9075
|
+
/* @__PURE__ */ jsx("path", {
|
|
9076
|
+
d: "M4 9h5V4"
|
|
9077
|
+
}),
|
|
9078
|
+
/* @__PURE__ */ jsx("path", {
|
|
9079
|
+
d: "M15 4v5h5"
|
|
9080
|
+
}),
|
|
9081
|
+
/* @__PURE__ */ jsx("path", {
|
|
9082
|
+
d: "M20 15h-5v5"
|
|
9083
|
+
}),
|
|
9084
|
+
/* @__PURE__ */ jsx("path", {
|
|
9085
|
+
d: "M9 20v-5H4"
|
|
9086
|
+
})
|
|
9087
|
+
]
|
|
9088
|
+
});
|
|
9089
|
+
};
|
|
8991
9090
|
var CRITICAL_PROPS = [
|
|
8992
9091
|
"src",
|
|
8993
9092
|
"allowNativeHls",
|
|
@@ -10025,9 +10124,9 @@ var StormcloudVideoPlayerComponent = React.memo(function(props) {
|
|
|
10025
10124
|
minHeight: "".concat(36 * responsiveScale, "px")
|
|
10026
10125
|
},
|
|
10027
10126
|
title: isFullscreen2 ? "Exit Fullscreen" : "Enter Fullscreen",
|
|
10028
|
-
children: isFullscreen2 ? /* @__PURE__ */ jsx(
|
|
10127
|
+
children: isFullscreen2 ? /* @__PURE__ */ jsx(CompressIcon, {
|
|
10029
10128
|
size: Math.max(14, 18 * responsiveScale)
|
|
10030
|
-
}) : /* @__PURE__ */ jsx(
|
|
10129
|
+
}) : /* @__PURE__ */ jsx(ExpandIcon, {
|
|
10031
10130
|
size: Math.max(14, 18 * responsiveScale)
|
|
10032
10131
|
})
|
|
10033
10132
|
})
|
|
@@ -10226,9 +10325,9 @@ var StormcloudVideoPlayerComponent = React.memo(function(props) {
|
|
|
10226
10325
|
background: "rgba(0, 0, 0, 0.6)"
|
|
10227
10326
|
},
|
|
10228
10327
|
title: isFullscreen2 ? "Exit Fullscreen" : "Enter Fullscreen",
|
|
10229
|
-
children: isFullscreen2 ? /* @__PURE__ */ jsx(
|
|
10328
|
+
children: isFullscreen2 ? /* @__PURE__ */ jsx(CompressIcon, {
|
|
10230
10329
|
size: Math.max(14, 18 * responsiveScale)
|
|
10231
|
-
}) : /* @__PURE__ */ jsx(
|
|
10330
|
+
}) : /* @__PURE__ */ jsx(ExpandIcon, {
|
|
10232
10331
|
size: Math.max(14, 18 * responsiveScale)
|
|
10233
10332
|
})
|
|
10234
10333
|
})
|