hls.js 1.5.7-0.canary.10021 → 1.5.7-0.canary.10022
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.js +18 -15
- package/dist/hls.js.d.ts +19 -28
- package/dist/hls.js.map +1 -1
- package/dist/hls.light.js +5 -3
- 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 +5 -3
- 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 +18 -15
- package/dist/hls.mjs.map +1 -1
- package/dist/hls.worker.js +1 -1
- package/package.json +1 -1
- package/src/controller/audio-stream-controller.ts +27 -20
- package/src/controller/base-stream-controller.ts +3 -1
- package/src/controller/subtitle-stream-controller.ts +14 -11
@@ -255,7 +255,9 @@ class AudioStreamController
|
|
255
255
|
this.fragmentTracker.removeFragment(waitingData.frag);
|
256
256
|
this.waitingData = null;
|
257
257
|
this.waitingVideoCC = -1;
|
258
|
-
this.state
|
258
|
+
if (this.state !== State.STOPPED) {
|
259
|
+
this.state = State.IDLE;
|
260
|
+
}
|
259
261
|
}
|
260
262
|
}
|
261
263
|
|
@@ -417,13 +419,13 @@ class AudioStreamController
|
|
417
419
|
this.loadFragment(frag, levelInfo, targetBufferTime);
|
418
420
|
}
|
419
421
|
|
420
|
-
onMediaDetaching() {
|
422
|
+
protected onMediaDetaching() {
|
421
423
|
this.videoBuffer = null;
|
422
424
|
this.bufferFlushed = this.flushing = false;
|
423
425
|
super.onMediaDetaching();
|
424
426
|
}
|
425
427
|
|
426
|
-
onAudioTracksUpdated(
|
428
|
+
private onAudioTracksUpdated(
|
427
429
|
event: Events.AUDIO_TRACKS_UPDATED,
|
428
430
|
{ audioTracks }: AudioTracksUpdatedData,
|
429
431
|
) {
|
@@ -432,7 +434,7 @@ class AudioStreamController
|
|
432
434
|
this.levels = audioTracks.map((mediaPlaylist) => new Level(mediaPlaylist));
|
433
435
|
}
|
434
436
|
|
435
|
-
onAudioTrackSwitching(
|
437
|
+
private onAudioTrackSwitching(
|
436
438
|
event: Events.AUDIO_TRACK_SWITCHING,
|
437
439
|
data: AudioTrackSwitchingData,
|
438
440
|
) {
|
@@ -446,29 +448,28 @@ class AudioStreamController
|
|
446
448
|
this.removeUnbufferedFrags(fragCurrent.start);
|
447
449
|
}
|
448
450
|
this.resetLoadingState();
|
449
|
-
// destroy useless transmuxer when switching audio to main
|
450
|
-
if (!altAudio) {
|
451
|
-
this.resetTransmuxer();
|
452
|
-
} else {
|
453
|
-
// switching to audio track, start timer if not already started
|
454
|
-
this.setInterval(TICK_INTERVAL);
|
455
|
-
}
|
456
451
|
|
457
452
|
// should we switch tracks ?
|
458
453
|
if (altAudio) {
|
459
454
|
this.switchingTrack = data;
|
460
455
|
// main audio track are handled by stream-controller, just do something if switching to alt audio track
|
461
|
-
this.state = State.IDLE;
|
462
456
|
this.flushAudioIfNeeded(data);
|
457
|
+
if (this.state !== State.STOPPED) {
|
458
|
+
// switching to audio track, start timer if not already started
|
459
|
+
this.setInterval(TICK_INTERVAL);
|
460
|
+
this.state = State.IDLE;
|
461
|
+
this.tick();
|
462
|
+
}
|
463
463
|
} else {
|
464
|
+
// destroy useless transmuxer when switching audio to main
|
465
|
+
this.resetTransmuxer();
|
464
466
|
this.switchingTrack = null;
|
465
467
|
this.bufferedTrack = data;
|
466
|
-
this.
|
468
|
+
this.clearInterval();
|
467
469
|
}
|
468
|
-
this.tick();
|
469
470
|
}
|
470
471
|
|
471
|
-
onManifestLoading() {
|
472
|
+
protected onManifestLoading() {
|
472
473
|
this.fragmentTracker.removeAllFragments();
|
473
474
|
this.startPosition = this.lastCurrentTime = 0;
|
474
475
|
this.bufferFlushed = this.flushing = false;
|
@@ -483,7 +484,7 @@ class AudioStreamController
|
|
483
484
|
this.trackId = this.videoTrackCC = this.waitingVideoCC = -1;
|
484
485
|
}
|
485
486
|
|
486
|
-
onLevelLoaded(event: Events.LEVEL_LOADED, data: LevelLoadedData) {
|
487
|
+
private onLevelLoaded(event: Events.LEVEL_LOADED, data: LevelLoadedData) {
|
487
488
|
this.mainDetails = data.details;
|
488
489
|
if (this.cachedTrackLoadedData !== null) {
|
489
490
|
this.hls.trigger(Events.AUDIO_TRACK_LOADED, this.cachedTrackLoadedData);
|
@@ -491,7 +492,10 @@ class AudioStreamController
|
|
491
492
|
}
|
492
493
|
}
|
493
494
|
|
494
|
-
onAudioTrackLoaded(
|
495
|
+
private onAudioTrackLoaded(
|
496
|
+
event: Events.AUDIO_TRACK_LOADED,
|
497
|
+
data: TrackLoadedData,
|
498
|
+
) {
|
495
499
|
if (this.mainDetails == null) {
|
496
500
|
this.cachedTrackLoadedData = data;
|
497
501
|
return;
|
@@ -644,13 +648,16 @@ class AudioStreamController
|
|
644
648
|
super._handleFragmentLoadComplete(fragLoadedData);
|
645
649
|
}
|
646
650
|
|
647
|
-
onBufferReset(/* event: Events.BUFFER_RESET */) {
|
651
|
+
private onBufferReset(/* event: Events.BUFFER_RESET */) {
|
648
652
|
// reset reference to sourcebuffers
|
649
653
|
this.mediaBuffer = this.videoBuffer = null;
|
650
654
|
this.loadedmetadata = false;
|
651
655
|
}
|
652
656
|
|
653
|
-
onBufferCreated(
|
657
|
+
private onBufferCreated(
|
658
|
+
event: Events.BUFFER_CREATED,
|
659
|
+
data: BufferCreatedData,
|
660
|
+
) {
|
654
661
|
const audioTrack = data.tracks.audio;
|
655
662
|
if (audioTrack) {
|
656
663
|
this.mediaBuffer = audioTrack.buffer || null;
|
@@ -660,7 +667,7 @@ class AudioStreamController
|
|
660
667
|
}
|
661
668
|
}
|
662
669
|
|
663
|
-
onFragBuffered(event: Events.FRAG_BUFFERED, data: FragBufferedData) {
|
670
|
+
private onFragBuffered(event: Events.FRAG_BUFFERED, data: FragBufferedData) {
|
664
671
|
const { frag, part } = data;
|
665
672
|
if (frag.type !== PlaylistLevelType.AUDIO) {
|
666
673
|
if (!this.loadedmetadata && frag.type === PlaylistLevelType.MAIN) {
|
@@ -1758,7 +1758,9 @@ export default class BaseStreamController
|
|
1758
1758
|
this.log('Reset loading state');
|
1759
1759
|
this.fragCurrent = null;
|
1760
1760
|
this.fragPrevious = null;
|
1761
|
-
this.state
|
1761
|
+
if (this.state !== State.STOPPED) {
|
1762
|
+
this.state = State.IDLE;
|
1763
|
+
}
|
1762
1764
|
}
|
1763
1765
|
|
1764
1766
|
protected resetStartWhenNotLoaded(level: Level | null): void {
|
@@ -105,21 +105,21 @@ export class SubtitleStreamController
|
|
105
105
|
this.tick();
|
106
106
|
}
|
107
107
|
|
108
|
-
onManifestLoading() {
|
108
|
+
protected onManifestLoading() {
|
109
109
|
this.mainDetails = null;
|
110
110
|
this.fragmentTracker.removeAllFragments();
|
111
111
|
}
|
112
112
|
|
113
|
-
onMediaDetaching(): void {
|
113
|
+
protected onMediaDetaching(): void {
|
114
114
|
this.tracksBuffered = [];
|
115
115
|
super.onMediaDetaching();
|
116
116
|
}
|
117
117
|
|
118
|
-
onLevelLoaded(event: Events.LEVEL_LOADED, data: LevelLoadedData) {
|
118
|
+
private onLevelLoaded(event: Events.LEVEL_LOADED, data: LevelLoadedData) {
|
119
119
|
this.mainDetails = data.details;
|
120
120
|
}
|
121
121
|
|
122
|
-
onSubtitleFragProcessed(
|
122
|
+
private onSubtitleFragProcessed(
|
123
123
|
event: Events.SUBTITLE_FRAG_PROCESSED,
|
124
124
|
data: SubtitleFragProcessed,
|
125
125
|
) {
|
@@ -160,7 +160,10 @@ export class SubtitleStreamController
|
|
160
160
|
this.fragBufferedComplete(frag, null);
|
161
161
|
}
|
162
162
|
|
163
|
-
onBufferFlushing(
|
163
|
+
private onBufferFlushing(
|
164
|
+
event: Events.BUFFER_FLUSHING,
|
165
|
+
data: BufferFlushingData,
|
166
|
+
) {
|
164
167
|
const { startOffset, endOffset } = data;
|
165
168
|
if (startOffset === 0 && endOffset !== Number.POSITIVE_INFINITY) {
|
166
169
|
const endOffsetSubtitles = endOffset - 1;
|
@@ -189,7 +192,7 @@ export class SubtitleStreamController
|
|
189
192
|
}
|
190
193
|
}
|
191
194
|
|
192
|
-
onFragBuffered(event: Events.FRAG_BUFFERED, data: FragBufferedData) {
|
195
|
+
private onFragBuffered(event: Events.FRAG_BUFFERED, data: FragBufferedData) {
|
193
196
|
if (!this.loadedmetadata && data.frag.type === PlaylistLevelType.MAIN) {
|
194
197
|
if (this.media?.buffered.length) {
|
195
198
|
this.loadedmetadata = true;
|
@@ -198,7 +201,7 @@ export class SubtitleStreamController
|
|
198
201
|
}
|
199
202
|
|
200
203
|
// If something goes wrong, proceed to next frag, if we were processing one.
|
201
|
-
onError(event: Events.ERROR, data: ErrorData) {
|
204
|
+
protected onError(event: Events.ERROR, data: ErrorData) {
|
202
205
|
const frag = data.frag;
|
203
206
|
|
204
207
|
if (frag?.type === PlaylistLevelType.SUBTITLE) {
|
@@ -212,7 +215,7 @@ export class SubtitleStreamController
|
|
212
215
|
}
|
213
216
|
|
214
217
|
// Got all new subtitle levels.
|
215
|
-
onSubtitleTracksUpdated(
|
218
|
+
private onSubtitleTracksUpdated(
|
216
219
|
event: Events.SUBTITLE_TRACKS_UPDATED,
|
217
220
|
{ subtitleTracks }: SubtitleTracksUpdatedData,
|
218
221
|
) {
|
@@ -237,7 +240,7 @@ export class SubtitleStreamController
|
|
237
240
|
this.mediaBuffer = null;
|
238
241
|
}
|
239
242
|
|
240
|
-
onSubtitleTrackSwitch(
|
243
|
+
private onSubtitleTrackSwitch(
|
241
244
|
event: Events.SUBTITLE_TRACK_SWITCH,
|
242
245
|
data: TrackSwitchedData,
|
243
246
|
) {
|
@@ -255,13 +258,13 @@ export class SubtitleStreamController
|
|
255
258
|
} else {
|
256
259
|
this.mediaBuffer = null;
|
257
260
|
}
|
258
|
-
if (currentTrack) {
|
261
|
+
if (currentTrack && this.state !== State.STOPPED) {
|
259
262
|
this.setInterval(TICK_INTERVAL);
|
260
263
|
}
|
261
264
|
}
|
262
265
|
|
263
266
|
// Got a new set of subtitle fragments.
|
264
|
-
onSubtitleTrackLoaded(
|
267
|
+
private onSubtitleTrackLoaded(
|
265
268
|
event: Events.SUBTITLE_TRACK_LOADED,
|
266
269
|
data: TrackLoadedData,
|
267
270
|
) {
|