@scarlett-player/embed 0.4.0 → 0.5.0

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.
@@ -144,6 +144,9 @@ function setupVideoEventHandlers(video, api) {
144
144
  video.addEventListener(event, handler);
145
145
  handlers.push({ event, handler });
146
146
  };
147
+ addHandler("play", () => {
148
+ api.setState("paused", false);
149
+ });
147
150
  addHandler("playing", () => {
148
151
  api.setState("playing", true);
149
152
  api.setState("paused", false);
@@ -394,7 +397,9 @@ function createHLSPlugin(config) {
394
397
  const getRetryDelay = (retryCount) => {
395
398
  const baseDelay = mergedConfig.retryDelayMs ?? 1e3;
396
399
  const backoffFactor = mergedConfig.retryBackoffFactor ?? 2;
397
- return baseDelay * Math.pow(backoffFactor, retryCount);
400
+ const delay = baseDelay * Math.pow(backoffFactor, retryCount);
401
+ const jitter = delay * (0.7 + Math.random() * 0.3);
402
+ return jitter;
398
403
  };
399
404
  const emitFatalError = (error, retriesExhausted) => {
400
405
  const message = retriesExhausted ? `HLS error: ${error.details} (max retries exceeded)` : `HLS error: ${error.details}`;
@@ -608,6 +613,20 @@ function createHLSPlugin(config) {
608
613
  if (!isNaN(levelIndex) && levelIndex >= 0 && levelIndex < hls.levels.length) {
609
614
  hls.nextLevel = levelIndex;
610
615
  api?.logger.debug(`Quality: queued switch to level ${levelIndex}`);
616
+ const targetLevel = hls.levels[levelIndex];
617
+ if (targetLevel) {
618
+ const label = formatLevel(targetLevel);
619
+ api?.setState("currentQuality", {
620
+ id: `level-${levelIndex}`,
621
+ label: `${label}...`,
622
+ // Ellipsis indicates switching in progress
623
+ width: targetLevel.width,
624
+ height: targetLevel.height,
625
+ bitrate: targetLevel.bitrate,
626
+ active: false
627
+ // Not yet active
628
+ });
629
+ }
611
630
  }
612
631
  }
613
632
  });
@@ -2225,6 +2244,8 @@ const DEFAULT_STATE = {
2225
2244
  airplayActive: false,
2226
2245
  chromecastAvailable: false,
2227
2246
  chromecastActive: false,
2247
+ // Thumbnail Preview
2248
+ thumbnails: null,
2228
2249
  // UI State
2229
2250
  interacting: false,
2230
2251
  hovering: false,