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.
package/lib/index.cjs CHANGED
@@ -8328,6 +8328,34 @@ var AdBreakOrchestrator = /*#__PURE__*/ function() {
8328
8328
  return 0;
8329
8329
  }
8330
8330
  },
8331
+ {
8332
+ key: "describeVideoState",
8333
+ value: function describeVideoState() {
8334
+ var _networkStates_v_networkState, _readyStates_v_readyState;
8335
+ var v = this.host.video;
8336
+ var networkStates = [
8337
+ "EMPTY",
8338
+ "IDLE",
8339
+ "LOADING",
8340
+ "NO_SOURCE"
8341
+ ];
8342
+ var readyStates = [
8343
+ "HAVE_NOTHING",
8344
+ "HAVE_METADATA",
8345
+ "HAVE_CURRENT_DATA",
8346
+ "HAVE_FUTURE_DATA",
8347
+ "HAVE_ENOUGH_DATA"
8348
+ ];
8349
+ var net = (_networkStates_v_networkState = networkStates[v.networkState]) !== null && _networkStates_v_networkState !== void 0 ? _networkStates_v_networkState : String(v.networkState);
8350
+ var ready = (_readyStates_v_readyState = readyStates[v.readyState]) !== null && _readyStates_v_readyState !== void 0 ? _readyStates_v_readyState : String(v.readyState);
8351
+ var err = v.error ? "code=".concat(v.error.code).concat(v.error.message ? " (".concat(v.error.message, ")") : "") : "none";
8352
+ var ranges = [];
8353
+ for(var i = 0; i < v.buffered.length; i++){
8354
+ ranges.push("[".concat(v.buffered.start(i).toFixed(2), "–").concat(v.buffered.end(i).toFixed(2), "]"));
8355
+ }
8356
+ 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");
8357
+ }
8358
+ },
8331
8359
  {
8332
8360
  key: "monitorLiveResumeStall",
8333
8361
  value: function monitorLiveResumeStall(resumeBaseline) {
@@ -8341,18 +8369,93 @@ var AdBreakOrchestrator = /*#__PURE__*/ function() {
8341
8369
  var baseline = resumeBaseline;
8342
8370
  var recoveries = 0;
8343
8371
  var lastRecoveryAt = 0;
8372
+ var video = this.host.video;
8373
+ var listenersAttached = false;
8374
+ var onMediaEvent;
8375
+ var diagEvents = [
8376
+ "loadstart",
8377
+ "loadedmetadata",
8378
+ "loadeddata",
8379
+ "canplay",
8380
+ "canplaythrough",
8381
+ "play",
8382
+ "playing",
8383
+ "pause",
8384
+ "waiting",
8385
+ "stalled",
8386
+ "suspend",
8387
+ "seeking",
8388
+ "seeked",
8389
+ "emptied",
8390
+ "error",
8391
+ "ended"
8392
+ ];
8393
+ if (this.debug) {
8394
+ onMediaEvent = function onMediaEvent(e) {
8395
+ var dt = ((Date.now() - startTime) / 1e3).toFixed(1);
8396
+ console.log("[ResumeDiag] +".concat(dt, "s event=").concat(e.type, " — ").concat(_this.describeVideoState()));
8397
+ };
8398
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
8399
+ try {
8400
+ for(var _iterator = diagEvents[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
8401
+ var name = _step.value;
8402
+ video.addEventListener(name, onMediaEvent);
8403
+ }
8404
+ } catch (err) {
8405
+ _didIteratorError = true;
8406
+ _iteratorError = err;
8407
+ } finally{
8408
+ try {
8409
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
8410
+ _iterator.return();
8411
+ }
8412
+ } finally{
8413
+ if (_didIteratorError) {
8414
+ throw _iteratorError;
8415
+ }
8416
+ }
8417
+ }
8418
+ listenersAttached = true;
8419
+ console.log("[ResumeDiag] +0.0s monitor start — ".concat(this.describeVideoState()));
8420
+ }
8421
+ var cleanup = function cleanup() {
8422
+ if (listenersAttached && onMediaEvent) {
8423
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
8424
+ try {
8425
+ for(var _iterator = diagEvents[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
8426
+ var name = _step.value;
8427
+ video.removeEventListener(name, onMediaEvent);
8428
+ }
8429
+ } catch (err) {
8430
+ _didIteratorError = true;
8431
+ _iteratorError = err;
8432
+ } finally{
8433
+ try {
8434
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
8435
+ _iterator.return();
8436
+ }
8437
+ } finally{
8438
+ if (_didIteratorError) {
8439
+ throw _iteratorError;
8440
+ }
8441
+ }
8442
+ }
8443
+ listenersAttached = false;
8444
+ }
8445
+ };
8344
8446
  var poll = function poll1() {
8345
8447
  if (_this.inAdBreak) {
8448
+ cleanup();
8346
8449
  return;
8347
8450
  }
8348
- var video = _this.host.video;
8349
8451
  var currentTime = video.currentTime;
8350
8452
  var advanced = currentTime > baseline + 0.5;
8351
8453
  var playing = !video.paused && video.readyState >= 3;
8352
8454
  if (advanced && playing) {
8353
8455
  if (_this.debug) {
8354
- console.log("[StormcloudVideoPlayer] Live stream resumed successfully after ad break");
8456
+ console.log("[StormcloudVideoPlayer] Live stream resumed successfully after ad break".concat(_this.describeVideoState()));
8355
8457
  }
8458
+ cleanup();
8356
8459
  return;
8357
8460
  }
8358
8461
  if (video.paused) {
@@ -8364,8 +8467,9 @@ var AdBreakOrchestrator = /*#__PURE__*/ function() {
8364
8467
  var wedged = bufferedAhead < 0.5 && !advanced;
8365
8468
  if (elapsed >= maxMonitorMs) {
8366
8469
  if (_this.debug && !advanced) {
8367
- 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)"));
8470
+ console.warn("[StormcloudVideoPlayer] Live stream failed to resume after ".concat((maxMonitorMs / 1e3).toFixed(0), "s ").concat(_this.describeVideoState()));
8368
8471
  }
8472
+ cleanup();
8369
8473
  return;
8370
8474
  }
8371
8475
  var canRecover = wedged && elapsed >= graceMs && Date.now() - lastRecoveryAt >= recoveryCooldownMs && recoveries < maxRecoveries;
@@ -8377,7 +8481,7 @@ var AdBreakOrchestrator = /*#__PURE__*/ function() {
8377
8481
  var liveSyncPos = _this.host.getLiveSyncPosition();
8378
8482
  var reloadPos = liveSyncPos != null && liveSyncPos > currentTime ? liveSyncPos : currentTime;
8379
8483
  if (_this.debug) {
8380
- 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, ")"));
8484
+ 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()));
8381
8485
  }
8382
8486
  if (liveSyncPos != null && liveSyncPos > currentTime) {
8383
8487
  video.currentTime = liveSyncPos;
@@ -8385,7 +8489,7 @@ var AdBreakOrchestrator = /*#__PURE__*/ function() {
8385
8489
  _this.host.restartHlsLoad(reloadPos);
8386
8490
  } else {
8387
8491
  if (_this.debug) {
8388
- 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, ")"));
8492
+ console.warn("[StormcloudVideoPlayer] Content still wedged after ad break — hard-reloading live stream (recovery ".concat(recoveries, "/").concat(maxRecoveries, ")").concat(_this.describeVideoState()));
8389
8493
  }
8390
8494
  _this.host.reloadLiveStream();
8391
8495
  }