stormcloud-video-player 0.8.42 → 0.8.44
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 +172 -20
- package/lib/index.cjs.map +1 -1
- package/lib/index.js +172 -20
- package/lib/index.js.map +1 -1
- package/lib/player/AdBreakOrchestrator.cjs +132 -20
- package/lib/player/AdBreakOrchestrator.cjs.map +1 -1
- package/lib/player/AdBreakOrchestrator.d.cts +3 -1
- package/lib/player/AdConfigManager.d.cts +1 -1
- package/lib/player/AdTimingService.d.cts +1 -1
- package/lib/player/HlsEngine.cjs +29 -0
- package/lib/player/HlsEngine.cjs.map +1 -1
- package/lib/player/HlsEngine.d.cts +3 -1
- package/lib/player/PlayerControls.d.cts +1 -1
- package/lib/player/Scte35CueManager.d.cts +1 -1
- package/lib/player/Scte35Parser.d.cts +1 -1
- package/lib/player/StormcloudVideoPlayer.cjs +172 -20
- package/lib/player/StormcloudVideoPlayer.cjs.map +1 -1
- package/lib/player/StormcloudVideoPlayer.d.cts +1 -1
- package/lib/player/playerTypes.d.cts +1 -1
- package/lib/players/HlsPlayer.cjs +172 -20
- package/lib/players/HlsPlayer.cjs.map +1 -1
- package/lib/players/HlsPlayer.d.cts +1 -1
- package/lib/players/index.cjs +172 -20
- package/lib/players/index.cjs.map +1 -1
- package/lib/sdk/hlsAdPlayer.d.cts +1 -1
- package/lib/types-iDjS8f_7.d.cts +133 -0
- package/lib/ui/StormcloudVideoPlayer.cjs +172 -20
- package/lib/ui/StormcloudVideoPlayer.cjs.map +1 -1
- package/lib/ui/StormcloudVideoPlayer.d.cts +1 -1
- package/lib/utils/tracking.d.cts +1 -1
- package/package.json +1 -1
|
@@ -2514,31 +2514,134 @@ var AdBreakOrchestrator = /*#__PURE__*/ function() {
|
|
|
2514
2514
|
return 0;
|
|
2515
2515
|
}
|
|
2516
2516
|
},
|
|
2517
|
+
{
|
|
2518
|
+
key: "describeVideoState",
|
|
2519
|
+
value: function describeVideoState() {
|
|
2520
|
+
var _networkStates_v_networkState, _readyStates_v_readyState;
|
|
2521
|
+
var v = this.host.video;
|
|
2522
|
+
var networkStates = [
|
|
2523
|
+
"EMPTY",
|
|
2524
|
+
"IDLE",
|
|
2525
|
+
"LOADING",
|
|
2526
|
+
"NO_SOURCE"
|
|
2527
|
+
];
|
|
2528
|
+
var readyStates = [
|
|
2529
|
+
"HAVE_NOTHING",
|
|
2530
|
+
"HAVE_METADATA",
|
|
2531
|
+
"HAVE_CURRENT_DATA",
|
|
2532
|
+
"HAVE_FUTURE_DATA",
|
|
2533
|
+
"HAVE_ENOUGH_DATA"
|
|
2534
|
+
];
|
|
2535
|
+
var net = (_networkStates_v_networkState = networkStates[v.networkState]) !== null && _networkStates_v_networkState !== void 0 ? _networkStates_v_networkState : String(v.networkState);
|
|
2536
|
+
var ready = (_readyStates_v_readyState = readyStates[v.readyState]) !== null && _readyStates_v_readyState !== void 0 ? _readyStates_v_readyState : String(v.readyState);
|
|
2537
|
+
var err = v.error ? "code=".concat(v.error.code).concat(v.error.message ? " (".concat(v.error.message, ")") : "") : "none";
|
|
2538
|
+
var ranges = [];
|
|
2539
|
+
for(var i = 0; i < v.buffered.length; i++){
|
|
2540
|
+
ranges.push("[".concat(v.buffered.start(i).toFixed(2), "–").concat(v.buffered.end(i).toFixed(2), "]"));
|
|
2541
|
+
}
|
|
2542
|
+
return "t=".concat(v.currentTime.toFixed(2), "s paused=").concat(v.paused, " ended=").concat(v.ended, " seeking=").concat(v.seeking, " readyState=").concat(ready, " networkState=").concat(net, " error=").concat(err, " buffered=").concat(ranges.length ? ranges.join(",") : "none");
|
|
2543
|
+
}
|
|
2544
|
+
},
|
|
2517
2545
|
{
|
|
2518
2546
|
key: "monitorLiveResumeStall",
|
|
2519
2547
|
value: function monitorLiveResumeStall(resumeBaseline) {
|
|
2520
2548
|
var _this = this;
|
|
2521
2549
|
var pollIntervalMs = 1e3;
|
|
2522
2550
|
var graceMs = 5e3;
|
|
2523
|
-
var
|
|
2524
|
-
var
|
|
2525
|
-
var maxMonitorMs =
|
|
2551
|
+
var recoveryCooldownMs = 5e3;
|
|
2552
|
+
var maxRecoveries = 2;
|
|
2553
|
+
var maxMonitorMs = 3e4;
|
|
2526
2554
|
var startTime = Date.now();
|
|
2527
2555
|
var baseline = resumeBaseline;
|
|
2528
|
-
var
|
|
2529
|
-
var
|
|
2556
|
+
var recoveries = 0;
|
|
2557
|
+
var lastRecoveryAt = 0;
|
|
2558
|
+
var video = this.host.video;
|
|
2559
|
+
var listenersAttached = false;
|
|
2560
|
+
var onMediaEvent;
|
|
2561
|
+
var diagEvents = [
|
|
2562
|
+
"loadstart",
|
|
2563
|
+
"loadedmetadata",
|
|
2564
|
+
"loadeddata",
|
|
2565
|
+
"canplay",
|
|
2566
|
+
"canplaythrough",
|
|
2567
|
+
"play",
|
|
2568
|
+
"playing",
|
|
2569
|
+
"pause",
|
|
2570
|
+
"waiting",
|
|
2571
|
+
"stalled",
|
|
2572
|
+
"suspend",
|
|
2573
|
+
"seeking",
|
|
2574
|
+
"seeked",
|
|
2575
|
+
"emptied",
|
|
2576
|
+
"error",
|
|
2577
|
+
"ended"
|
|
2578
|
+
];
|
|
2579
|
+
if (this.debug) {
|
|
2580
|
+
onMediaEvent = function onMediaEvent(e) {
|
|
2581
|
+
var dt = ((Date.now() - startTime) / 1e3).toFixed(1);
|
|
2582
|
+
console.log("[ResumeDiag] +".concat(dt, "s event=").concat(e.type, " — ").concat(_this.describeVideoState()));
|
|
2583
|
+
};
|
|
2584
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
2585
|
+
try {
|
|
2586
|
+
for(var _iterator = diagEvents[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
2587
|
+
var name = _step.value;
|
|
2588
|
+
video.addEventListener(name, onMediaEvent);
|
|
2589
|
+
}
|
|
2590
|
+
} catch (err) {
|
|
2591
|
+
_didIteratorError = true;
|
|
2592
|
+
_iteratorError = err;
|
|
2593
|
+
} finally{
|
|
2594
|
+
try {
|
|
2595
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
2596
|
+
_iterator.return();
|
|
2597
|
+
}
|
|
2598
|
+
} finally{
|
|
2599
|
+
if (_didIteratorError) {
|
|
2600
|
+
throw _iteratorError;
|
|
2601
|
+
}
|
|
2602
|
+
}
|
|
2603
|
+
}
|
|
2604
|
+
listenersAttached = true;
|
|
2605
|
+
console.log("[ResumeDiag] +0.0s monitor start — ".concat(this.describeVideoState()));
|
|
2606
|
+
}
|
|
2607
|
+
var cleanup = function cleanup() {
|
|
2608
|
+
if (listenersAttached && onMediaEvent) {
|
|
2609
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
2610
|
+
try {
|
|
2611
|
+
for(var _iterator = diagEvents[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
2612
|
+
var name = _step.value;
|
|
2613
|
+
video.removeEventListener(name, onMediaEvent);
|
|
2614
|
+
}
|
|
2615
|
+
} catch (err) {
|
|
2616
|
+
_didIteratorError = true;
|
|
2617
|
+
_iteratorError = err;
|
|
2618
|
+
} finally{
|
|
2619
|
+
try {
|
|
2620
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
2621
|
+
_iterator.return();
|
|
2622
|
+
}
|
|
2623
|
+
} finally{
|
|
2624
|
+
if (_didIteratorError) {
|
|
2625
|
+
throw _iteratorError;
|
|
2626
|
+
}
|
|
2627
|
+
}
|
|
2628
|
+
}
|
|
2629
|
+
listenersAttached = false;
|
|
2630
|
+
}
|
|
2631
|
+
};
|
|
2530
2632
|
var poll = function poll1() {
|
|
2531
2633
|
if (_this.inAdBreak) {
|
|
2634
|
+
cleanup();
|
|
2532
2635
|
return;
|
|
2533
2636
|
}
|
|
2534
|
-
var video = _this.host.video;
|
|
2535
2637
|
var currentTime = video.currentTime;
|
|
2536
2638
|
var advanced = currentTime > baseline + 0.5;
|
|
2537
2639
|
var playing = !video.paused && video.readyState >= 3;
|
|
2538
2640
|
if (advanced && playing) {
|
|
2539
2641
|
if (_this.debug) {
|
|
2540
|
-
console.log("[StormcloudVideoPlayer] Live stream resumed successfully after ad break");
|
|
2642
|
+
console.log("[StormcloudVideoPlayer] Live stream resumed successfully after ad break — ".concat(_this.describeVideoState()));
|
|
2541
2643
|
}
|
|
2644
|
+
cleanup();
|
|
2542
2645
|
return;
|
|
2543
2646
|
}
|
|
2544
2647
|
if (video.paused) {
|
|
@@ -2550,23 +2653,32 @@ var AdBreakOrchestrator = /*#__PURE__*/ function() {
|
|
|
2550
2653
|
var wedged = bufferedAhead < 0.5 && !advanced;
|
|
2551
2654
|
if (elapsed >= maxMonitorMs) {
|
|
2552
2655
|
if (_this.debug && !advanced) {
|
|
2553
|
-
console.warn("[StormcloudVideoPlayer] Live stream failed to resume after ".concat((maxMonitorMs / 1e3).toFixed(0), "s
|
|
2656
|
+
console.warn("[StormcloudVideoPlayer] Live stream failed to resume after ".concat((maxMonitorMs / 1e3).toFixed(0), "s — ").concat(_this.describeVideoState()));
|
|
2554
2657
|
}
|
|
2658
|
+
cleanup();
|
|
2555
2659
|
return;
|
|
2556
2660
|
}
|
|
2557
|
-
var
|
|
2558
|
-
if (
|
|
2559
|
-
|
|
2560
|
-
|
|
2561
|
-
var
|
|
2562
|
-
|
|
2563
|
-
|
|
2564
|
-
|
|
2565
|
-
|
|
2566
|
-
|
|
2567
|
-
|
|
2661
|
+
var canRecover = wedged && elapsed >= graceMs && Date.now() - lastRecoveryAt >= recoveryCooldownMs && recoveries < maxRecoveries;
|
|
2662
|
+
if (canRecover) {
|
|
2663
|
+
recoveries++;
|
|
2664
|
+
lastRecoveryAt = Date.now();
|
|
2665
|
+
var isFinalAttempt = recoveries >= maxRecoveries;
|
|
2666
|
+
if (!isFinalAttempt) {
|
|
2667
|
+
var liveSyncPos = _this.host.getLiveSyncPosition();
|
|
2668
|
+
var reloadPos = liveSyncPos != null && liveSyncPos > currentTime ? liveSyncPos : currentTime;
|
|
2669
|
+
if (_this.debug) {
|
|
2670
|
+
console.warn("[StormcloudVideoPlayer] Content wedged after ad break — restarting HLS load at ".concat(reloadPos.toFixed(2), "s (recovery ").concat(recoveries, "/").concat(maxRecoveries, ") — ").concat(_this.describeVideoState()));
|
|
2671
|
+
}
|
|
2672
|
+
if (liveSyncPos != null && liveSyncPos > currentTime) {
|
|
2673
|
+
video.currentTime = liveSyncPos;
|
|
2674
|
+
}
|
|
2675
|
+
_this.host.restartHlsLoad(reloadPos);
|
|
2676
|
+
} else {
|
|
2677
|
+
if (_this.debug) {
|
|
2678
|
+
console.warn("[StormcloudVideoPlayer] Content still wedged after ad break — hard-reloading live stream (recovery ".concat(recoveries, "/").concat(maxRecoveries, ") — ").concat(_this.describeVideoState()));
|
|
2679
|
+
}
|
|
2680
|
+
_this.host.reloadLiveStream();
|
|
2568
2681
|
}
|
|
2569
|
-
_this.host.restartHlsLoad(reloadPos);
|
|
2570
2682
|
baseline = video.currentTime;
|
|
2571
2683
|
if (video.paused) {
|
|
2572
2684
|
var _video_play1;
|