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.
@@ -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 = State.IDLE;
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.state = State.STOPPED;
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(event: Events.AUDIO_TRACK_LOADED, data: TrackLoadedData) {
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(event: Events.BUFFER_CREATED, data: BufferCreatedData) {
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 = State.IDLE;
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(event: Events.BUFFER_FLUSHING, data: BufferFlushingData) {
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
  ) {