hls.js 1.6.0-beta.1.0.canary.10826 → 1.6.0-beta.2

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/package.json CHANGED
@@ -130,5 +130,5 @@
130
130
  "url-toolkit": "2.2.5",
131
131
  "wrangler": "3.92.0"
132
132
  },
133
- "version": "1.6.0-beta.1.0.canary.10826"
133
+ "version": "1.6.0-beta.2"
134
134
  }
@@ -340,11 +340,8 @@ export default class BufferController extends Logger implements ComponentAPI {
340
340
  : null;
341
341
  const trackCount = trackNames ? trackNames.length : 0;
342
342
  const mediaSourceOpenCallback = () => {
343
- if (this.media) {
344
- const readyState = this.mediaSource?.readyState;
345
- if (readyState === 'open' || readyState === 'ended') {
346
- this._onMediaSourceOpen();
347
- }
343
+ if (this.media && this.mediaSourceOpenOrEnded) {
344
+ this._onMediaSourceOpen();
348
345
  }
349
346
  };
350
347
  if (transferredTracks && trackNames && trackCount) {
@@ -429,6 +426,11 @@ transfer tracks: ${JSON.stringify(transferredTracks, (key, value) => (key === 'i
429
426
  }
430
427
  }
431
428
 
429
+ private get mediaSourceOpenOrEnded(): boolean {
430
+ const readyState = this.mediaSource?.readyState;
431
+ return readyState === 'open' || readyState === 'ended';
432
+ }
433
+
432
434
  private _onEndStreaming = (event) => {
433
435
  if (!this.hls) {
434
436
  return;
@@ -466,18 +468,23 @@ transfer tracks: ${JSON.stringify(transferredTracks, (key, value) => (key === 'i
466
468
  });
467
469
  this.resetQueue();
468
470
  } else {
469
- if (mediaSource.readyState === 'open') {
471
+ if (this.mediaSourceOpenOrEnded) {
472
+ const open = mediaSource.readyState === 'open';
470
473
  try {
471
474
  const sourceBuffers = mediaSource.sourceBuffers;
472
475
  for (let i = sourceBuffers.length; i--; ) {
473
- sourceBuffers[i].abort();
476
+ if (open) {
477
+ sourceBuffers[i].abort();
478
+ }
474
479
  mediaSource.removeSourceBuffer(sourceBuffers[i]);
475
480
  }
476
- // endOfStream could trigger exception if any sourcebuffer is in updating state
477
- // we don't really care about checking sourcebuffer state here,
478
- // as we are anyway detaching the MediaSource
479
- // let's just avoid this exception to propagate
480
- mediaSource.endOfStream();
481
+ if (open) {
482
+ // endOfStream could trigger exception if any sourcebuffer is in updating state
483
+ // we don't really care about checking sourcebuffer state here,
484
+ // as we are anyway detaching the MediaSource
485
+ // let's just avoid this exception to propagate
486
+ mediaSource.endOfStream();
487
+ }
481
488
  } catch (err) {
482
489
  this.warn(
483
490
  `onMediaDetaching: ${err.message} while calling endOfStream`,
@@ -651,7 +658,7 @@ transfer tracks: ${JSON.stringify(transferredTracks, (key, value) => (key === 'i
651
658
  if (this.sourceBufferCount) {
652
659
  return;
653
660
  }
654
- if (this.mediaSource !== null && this.mediaSource.readyState === 'open') {
661
+ if (this.mediaSourceOpenOrEnded) {
655
662
  this.checkPendingTracks();
656
663
  }
657
664
  }
@@ -892,7 +899,7 @@ transfer tracks: ${JSON.stringify(transferredTracks, (key, value) => (key === 'i
892
899
  event.details = ErrorDetails.BUFFER_FULL_ERROR;
893
900
  } else if (
894
901
  (error as DOMException).code === DOMException.INVALID_STATE_ERR &&
895
- this.mediaSource?.readyState === 'open' &&
902
+ this.mediaSourceOpenOrEnded &&
896
903
  !this.media?.error
897
904
  ) {
898
905
  // Allow retry for "Failed to execute 'appendBuffer' on 'SourceBuffer': This SourceBuffer is still processing" errors
@@ -218,7 +218,7 @@ export default class InterstitialsController
218
218
  // @ts-ignore
219
219
  this.assetListLoader = null;
220
220
  // @ts-ignore
221
- this.onPlay = this.onSeeking = this.onTimeupdate = null;
221
+ this.onPlay = this.onPause = this.onSeeking = this.onTimeupdate = null;
222
222
  // @ts-ignore
223
223
  this.onScheduleUpdate = null;
224
224
  }
@@ -232,6 +232,7 @@ export default class InterstitialsController
232
232
 
233
233
  private removeMediaListeners(media: HTMLMediaElement) {
234
234
  media.removeEventListener('play', this.onPlay);
235
+ media.removeEventListener('pause', this.onPause);
235
236
  media.removeEventListener('seeking', this.onSeeking);
236
237
  media.removeEventListener('timeupdate', this.onTimeupdate);
237
238
  }
@@ -245,6 +246,7 @@ export default class InterstitialsController
245
246
  media.addEventListener('seeking', this.onSeeking);
246
247
  media.addEventListener('timeupdate', this.onTimeupdate);
247
248
  media.addEventListener('play', this.onPlay);
249
+ media.addEventListener('pause', this.onPause);
248
250
  }
249
251
 
250
252
  private onMediaAttached(
@@ -763,6 +765,10 @@ MediaSource ${JSON.stringify(attachMediaSourceData)} from ${logFromSource}`,
763
765
  this.shouldPlay = true;
764
766
  };
765
767
 
768
+ private onPause = () => {
769
+ this.shouldPlay = false;
770
+ };
771
+
766
772
  private onSeeking = () => {
767
773
  const currentTime = this.currentTime;
768
774
  if (currentTime === undefined || this.playbackDisabled) {