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/dist/hls.d.mts +2 -0
- package/dist/hls.d.ts +2 -0
- package/dist/hls.js +32 -19
- package/dist/hls.js.d.ts +2 -0
- package/dist/hls.js.map +1 -1
- package/dist/hls.light.js +26 -18
- package/dist/hls.light.js.map +1 -1
- package/dist/hls.light.min.js +1 -1
- package/dist/hls.light.min.js.map +1 -1
- package/dist/hls.light.mjs +28 -22
- package/dist/hls.light.mjs.map +1 -1
- package/dist/hls.min.js +1 -1
- package/dist/hls.min.js.map +1 -1
- package/dist/hls.mjs +34 -23
- package/dist/hls.mjs.map +1 -1
- package/dist/hls.worker.js +1 -1
- package/dist/hls.worker.js.map +1 -1
- package/package.json +1 -1
- package/src/controller/buffer-controller.ts +21 -14
- package/src/controller/interstitials-controller.ts +7 -1
package/package.json
CHANGED
@@ -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
|
-
|
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 (
|
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
|
-
|
476
|
+
if (open) {
|
477
|
+
sourceBuffers[i].abort();
|
478
|
+
}
|
474
479
|
mediaSource.removeSourceBuffer(sourceBuffers[i]);
|
475
480
|
}
|
476
|
-
|
477
|
-
|
478
|
-
|
479
|
-
|
480
|
-
|
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.
|
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.
|
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) {
|