stormcloud-video-player 0.8.43 → 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.
@@ -2514,6 +2514,34 @@ 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) {
@@ -2527,18 +2555,93 @@ var AdBreakOrchestrator = /*#__PURE__*/ function() {
2527
2555
  var baseline = resumeBaseline;
2528
2556
  var recoveries = 0;
2529
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,8 +2653,9 @@ 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 (t=").concat(currentTime.toFixed(2), "s, buffered=").concat(bufferedAhead.toFixed(2), "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
2661
  var canRecover = wedged && elapsed >= graceMs && Date.now() - lastRecoveryAt >= recoveryCooldownMs && recoveries < maxRecoveries;
@@ -2563,7 +2667,7 @@ var AdBreakOrchestrator = /*#__PURE__*/ function() {
2563
2667
  var liveSyncPos = _this.host.getLiveSyncPosition();
2564
2668
  var reloadPos = liveSyncPos != null && liveSyncPos > currentTime ? liveSyncPos : currentTime;
2565
2669
  if (_this.debug) {
2566
- console.warn("[StormcloudVideoPlayer] Content wedged after ad break (t=".concat(currentTime.toFixed(2), "s, buffered=").concat(bufferedAhead.toFixed(2), "s) — restarting HLS load at ").concat(reloadPos.toFixed(2), "s (recovery ").concat(recoveries, "/").concat(maxRecoveries, ")"));
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()));
2567
2671
  }
2568
2672
  if (liveSyncPos != null && liveSyncPos > currentTime) {
2569
2673
  video.currentTime = liveSyncPos;
@@ -2571,7 +2675,7 @@ var AdBreakOrchestrator = /*#__PURE__*/ function() {
2571
2675
  _this.host.restartHlsLoad(reloadPos);
2572
2676
  } else {
2573
2677
  if (_this.debug) {
2574
- console.warn("[StormcloudVideoPlayer] Content still wedged after ad break (t=".concat(currentTime.toFixed(2), "s, buffered=").concat(bufferedAhead.toFixed(2), "s) — hard-reloading live stream (recovery ").concat(recoveries, "/").concat(maxRecoveries, ")"));
2678
+ console.warn("[StormcloudVideoPlayer] Content still wedged after ad break — hard-reloading live stream (recovery ".concat(recoveries, "/").concat(maxRecoveries, ")").concat(_this.describeVideoState()));
2575
2679
  }
2576
2680
  _this.host.reloadLiveStream();
2577
2681
  }