hls.js 1.5.13-0.canary.10411 → 1.5.13

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.
Files changed (103) hide show
  1. package/README.md +3 -4
  2. package/dist/hls-demo.js +38 -41
  3. package/dist/hls-demo.js.map +1 -1
  4. package/dist/hls.js +2702 -4247
  5. package/dist/hls.js.d.ts +110 -179
  6. package/dist/hls.js.map +1 -1
  7. package/dist/hls.light.js +1994 -2914
  8. package/dist/hls.light.js.map +1 -1
  9. package/dist/hls.light.min.js +1 -1
  10. package/dist/hls.light.min.js.map +1 -1
  11. package/dist/hls.light.mjs +3458 -4388
  12. package/dist/hls.light.mjs.map +1 -1
  13. package/dist/hls.min.js +1 -1
  14. package/dist/hls.min.js.map +1 -1
  15. package/dist/hls.mjs +4504 -6059
  16. package/dist/hls.mjs.map +1 -1
  17. package/dist/hls.worker.js +1 -1
  18. package/dist/hls.worker.js.map +1 -1
  19. package/package.json +38 -38
  20. package/src/config.ts +2 -5
  21. package/src/controller/abr-controller.ts +25 -39
  22. package/src/controller/audio-stream-controller.ts +136 -156
  23. package/src/controller/audio-track-controller.ts +1 -1
  24. package/src/controller/base-playlist-controller.ts +10 -27
  25. package/src/controller/base-stream-controller.ts +91 -235
  26. package/src/controller/buffer-controller.ts +97 -250
  27. package/src/controller/buffer-operation-queue.ts +19 -16
  28. package/src/controller/cap-level-controller.ts +2 -3
  29. package/src/controller/cmcd-controller.ts +14 -51
  30. package/src/controller/content-steering-controller.ts +15 -29
  31. package/src/controller/eme-controller.ts +23 -10
  32. package/src/controller/error-controller.ts +22 -28
  33. package/src/controller/fps-controller.ts +3 -8
  34. package/src/controller/fragment-finders.ts +16 -44
  35. package/src/controller/fragment-tracker.ts +25 -58
  36. package/src/controller/gap-controller.ts +16 -43
  37. package/src/controller/id3-track-controller.ts +35 -45
  38. package/src/controller/latency-controller.ts +13 -18
  39. package/src/controller/level-controller.ts +19 -37
  40. package/src/controller/stream-controller.ts +83 -100
  41. package/src/controller/subtitle-stream-controller.ts +47 -35
  42. package/src/controller/subtitle-track-controller.ts +3 -5
  43. package/src/controller/timeline-controller.ts +22 -20
  44. package/src/crypt/aes-crypto.ts +2 -21
  45. package/src/crypt/decrypter.ts +16 -32
  46. package/src/crypt/fast-aes-key.ts +5 -28
  47. package/src/demux/audio/aacdemuxer.ts +2 -2
  48. package/src/demux/audio/ac3-demuxer.ts +3 -4
  49. package/src/demux/audio/adts.ts +4 -9
  50. package/src/demux/audio/base-audio-demuxer.ts +14 -16
  51. package/src/demux/audio/mp3demuxer.ts +3 -4
  52. package/src/demux/audio/mpegaudio.ts +1 -1
  53. package/src/demux/id3.ts +411 -0
  54. package/src/demux/mp4demuxer.ts +7 -7
  55. package/src/demux/sample-aes.ts +0 -2
  56. package/src/demux/transmuxer-interface.ts +16 -8
  57. package/src/demux/transmuxer-worker.ts +4 -4
  58. package/src/demux/transmuxer.ts +3 -16
  59. package/src/demux/tsdemuxer.ts +38 -75
  60. package/src/demux/video/avc-video-parser.ts +121 -210
  61. package/src/demux/video/base-video-parser.ts +2 -135
  62. package/src/demux/video/exp-golomb.ts +208 -0
  63. package/src/events.ts +1 -8
  64. package/src/exports-named.ts +1 -1
  65. package/src/hls.ts +47 -84
  66. package/src/loader/date-range.ts +5 -71
  67. package/src/loader/fragment-loader.ts +21 -23
  68. package/src/loader/fragment.ts +4 -8
  69. package/src/loader/key-loader.ts +1 -3
  70. package/src/loader/level-details.ts +6 -6
  71. package/src/loader/level-key.ts +9 -10
  72. package/src/loader/m3u8-parser.ts +144 -138
  73. package/src/loader/playlist-loader.ts +7 -5
  74. package/src/remux/mp4-generator.ts +1 -196
  75. package/src/remux/mp4-remuxer.ts +62 -32
  76. package/src/remux/passthrough-remuxer.ts +1 -1
  77. package/src/task-loop.ts +2 -5
  78. package/src/types/component-api.ts +1 -3
  79. package/src/types/demuxer.ts +0 -3
  80. package/src/types/events.ts +6 -19
  81. package/src/types/fragment-tracker.ts +2 -2
  82. package/src/types/general.ts +6 -0
  83. package/src/types/media-playlist.ts +1 -9
  84. package/src/types/remuxer.ts +1 -1
  85. package/src/utils/attr-list.ts +9 -96
  86. package/src/utils/buffer-helper.ts +31 -12
  87. package/src/utils/cea-608-parser.ts +3 -1
  88. package/src/utils/codecs.ts +5 -34
  89. package/src/utils/fetch-loader.ts +1 -1
  90. package/src/utils/hdr.ts +7 -4
  91. package/src/utils/imsc1-ttml-parser.ts +1 -1
  92. package/src/utils/keysystem-util.ts +6 -1
  93. package/src/utils/level-helper.ts +44 -71
  94. package/src/utils/logger.ts +23 -58
  95. package/src/utils/mp4-tools.ts +3 -5
  96. package/src/utils/rendition-helper.ts +74 -100
  97. package/src/utils/variable-substitution.ts +19 -0
  98. package/src/utils/webvtt-parser.ts +12 -2
  99. package/src/crypt/decrypter-aes-mode.ts +0 -4
  100. package/src/demux/video/hevc-video-parser.ts +0 -749
  101. package/src/utils/encryption-methods-util.ts +0 -21
  102. package/src/utils/hash.ts +0 -10
  103. package/src/utils/utf8-utils.ts +0 -18
package/dist/hls.js.d.ts CHANGED
@@ -6,7 +6,7 @@ export declare interface AbrComponentAPI extends ComponentAPI {
6
6
  resetEstimator(abrEwmaDefaultEstimate: number): any;
7
7
  }
8
8
 
9
- export declare class AbrController extends Logger implements AbrComponentAPI {
9
+ export declare class AbrController implements AbrComponentAPI {
10
10
  protected hls: Hls;
11
11
  private lastLevelLoadSec;
12
12
  private lastLoadedFragLevel;
@@ -69,7 +69,7 @@ export declare type ABRControllerConfig = {
69
69
 
70
70
  export declare class AttrList {
71
71
  [key: string]: any;
72
- constructor(attrs: string | Record<string, any>, parsed?: Pick<ParsedMultivariantPlaylist | LevelDetails, 'variableList' | 'hasVariableRefs' | 'playlistParsingError'>);
72
+ constructor(attrs: string | Record<string, any>);
73
73
  get clientAttrs(): string[];
74
74
  decimalInteger(attrName: string): number;
75
75
  hexadecimalInteger(attrName: string): Uint8Array | null;
@@ -77,17 +77,12 @@ export declare class AttrList {
77
77
  decimalFloatingPoint(attrName: string): number;
78
78
  optionalFloat(attrName: string, defaultValue: number): number;
79
79
  enumeratedString(attrName: string): string | undefined;
80
- enumeratedStringList<T extends {
81
- [key: string]: boolean;
82
- }>(attrName: string, dict: T): {
83
- [key in keyof T]: boolean;
84
- };
85
80
  bool(attrName: string): boolean;
86
81
  decimalResolution(attrName: string): {
87
82
  width: number;
88
83
  height: number;
89
84
  } | undefined;
90
- static parseAttrList(input: string, parsed?: Pick<ParsedMultivariantPlaylist | LevelDetails, 'variableList' | 'hasVariableRefs' | 'playlistParsingError'>): Record<string, string>;
85
+ static parseAttrList(input: string): Record<string, any>;
91
86
  }
92
87
 
93
88
  export declare type AudioPlaylistType = 'AUDIO';
@@ -104,8 +99,9 @@ export declare type AudioSelectionOption = {
104
99
  };
105
100
 
106
101
  export declare class AudioStreamController extends BaseStreamController implements NetworkComponentAPI {
107
- private videoAnchor;
108
- private mainFragLoading;
102
+ private videoBuffer;
103
+ private videoTrackCC;
104
+ private waitingVideoCC;
109
105
  private bufferedTrack;
110
106
  private switchingTrack;
111
107
  private trackId;
@@ -116,29 +112,28 @@ export declare class AudioStreamController extends BaseStreamController implemen
116
112
  private cachedTrackLoadedData;
117
113
  constructor(hls: Hls, fragmentTracker: FragmentTracker, keyLoader: KeyLoader);
118
114
  protected onHandlerDestroying(): void;
119
- protected registerListeners(): void;
120
- protected unregisterListeners(): void;
115
+ private _registerListeners;
116
+ private _unregisterListeners;
121
117
  onInitPtsFound(event: Events.INIT_PTS_FOUND, { frag, id, initPTS, timescale }: InitPTSFoundData): void;
122
- private findSyncFrag;
123
118
  startLoad(startPosition: number): void;
124
119
  doTick(): void;
125
120
  clearWaitingFragment(): void;
126
121
  protected resetLoadingState(): void;
127
122
  protected onTickEnd(): void;
128
123
  private doTickIdle;
129
- protected onMediaDetaching(): void;
130
- private onAudioTracksUpdated;
131
- private onAudioTrackSwitching;
132
- protected onManifestLoading(): void;
133
- private onLevelLoaded;
134
- private onAudioTrackLoaded;
124
+ protected getMaxBufferLength(mainBufferLength?: number): number;
125
+ onMediaDetaching(): void;
126
+ onAudioTracksUpdated(event: Events.AUDIO_TRACKS_UPDATED, { audioTracks }: AudioTracksUpdatedData): void;
127
+ onAudioTrackSwitching(event: Events.AUDIO_TRACK_SWITCHING, data: AudioTrackSwitchingData): void;
128
+ onManifestLoading(): void;
129
+ onLevelLoaded(event: Events.LEVEL_LOADED, data: LevelLoadedData): void;
130
+ onAudioTrackLoaded(event: Events.AUDIO_TRACK_LOADED, data: TrackLoadedData): void;
135
131
  _handleFragmentLoadProgress(data: FragLoadedData): void;
136
132
  protected _handleFragmentLoadComplete(fragLoadedData: FragLoadedData): void;
137
- private onBufferReset;
138
- private onBufferCreated;
139
- private onFragLoading;
140
- private onFragBuffered;
141
- protected onError(event: Events.ERROR, data: ErrorData): void;
133
+ onBufferReset(): void;
134
+ onBufferCreated(event: Events.BUFFER_CREATED, data: BufferCreatedData): void;
135
+ onFragBuffered(event: Events.FRAG_BUFFERED, data: FragBufferedData): void;
136
+ private onError;
142
137
  private onBufferFlushing;
143
138
  private onBufferFlushed;
144
139
  private _handleTransmuxComplete;
@@ -193,11 +188,13 @@ export declare interface BackBufferData {
193
188
  bufferEnd: number;
194
189
  }
195
190
 
196
- export declare class BasePlaylistController extends Logger implements NetworkComponentAPI {
191
+ export declare class BasePlaylistController implements NetworkComponentAPI {
197
192
  protected hls: Hls;
198
193
  protected timer: number;
199
194
  protected requestScheduled: number;
200
195
  protected canLoad: boolean;
196
+ protected log: (msg: any) => void;
197
+ protected warn: (msg: any) => void;
201
198
  constructor(hls: Hls, logPrefix: string);
202
199
  destroy(): void;
203
200
  protected clearTimer(): void;
@@ -229,7 +226,7 @@ export declare class BaseSegment {
229
226
 
230
227
  export declare class BaseStreamController extends TaskLoop implements NetworkComponentAPI {
231
228
  protected hls: Hls;
232
- protected fragPrevious: MediaFragment | null;
229
+ protected fragPrevious: Fragment | null;
233
230
  protected fragCurrent: Fragment | null;
234
231
  protected fragmentTracker: FragmentTracker;
235
232
  protected transmuxer: TransmuxerInterface | null;
@@ -252,26 +249,22 @@ export declare class BaseStreamController extends TaskLoop implements NetworkCom
252
249
  protected startFragRequested: boolean;
253
250
  protected decrypter: Decrypter;
254
251
  protected initPTS: RationalTimestamp[];
255
- protected buffering: boolean;
256
- protected loadingParts: boolean;
257
- private loopSn?;
252
+ protected onvseeking: EventListener | null;
253
+ protected onvended: EventListener | null;
254
+ private readonly logPrefix;
255
+ protected log: (msg: any) => void;
256
+ protected warn: (msg: any) => void;
258
257
  constructor(hls: Hls, fragmentTracker: FragmentTracker, keyLoader: KeyLoader, logPrefix: string, playlistType: PlaylistLevelType);
259
- protected registerListeners(): void;
260
- protected unregisterListeners(): void;
261
258
  protected doTick(): void;
262
259
  protected onTickEnd(): void;
263
260
  startLoad(startPosition: number): void;
264
261
  stopLoad(): void;
265
- pauseBuffering(): void;
266
- resumeBuffering(): void;
267
262
  protected _streamEnded(bufferInfo: BufferInfo, levelDetails: LevelDetails): boolean;
268
263
  protected getLevelDetails(): LevelDetails | undefined;
269
264
  protected onMediaAttached(event: Events.MEDIA_ATTACHED, data: MediaAttachedData): void;
270
265
  protected onMediaDetaching(): void;
271
- protected onManifestLoading(): void;
272
- protected onError(event: Events.ERROR, data: ErrorData): void;
273
- protected onMediaSeeking: () => void;
274
- protected onMediaEnded: () => void;
266
+ protected onMediaSeeking(): void;
267
+ protected onMediaEnded(): void;
275
268
  protected onManifestLoaded(event: Events.MANIFEST_LOADED, data: ManifestLoadedData): void;
276
269
  protected onHandlerDestroying(): void;
277
270
  protected onHandlerDestroyed(): void;
@@ -291,16 +284,15 @@ export declare class BaseStreamController extends TaskLoop implements NetworkCom
291
284
  private doFragPartsLoad;
292
285
  private handleFragLoadError;
293
286
  protected _handleTransmuxerFlush(chunkMeta: ChunkMetadata): void;
294
- private shouldLoadParts;
295
287
  protected getCurrentContext(chunkMeta: ChunkMetadata): {
296
- frag: MediaFragment;
288
+ frag: Fragment;
297
289
  part: Part | null;
298
290
  level: Level;
299
291
  } | null;
300
292
  protected bufferFragmentData(data: RemuxedTrack, frag: Fragment, part: Part | null, chunkMeta: ChunkMetadata, noBacktracking?: boolean): void;
301
293
  protected flushBufferGap(frag: Fragment): void;
302
294
  protected getFwdBufferInfo(bufferable: Bufferable | null, type: PlaylistLevelType): BufferInfo | null;
303
- private getFwdBufferInfoAtPos;
295
+ protected getFwdBufferInfoAtPos(bufferable: Bufferable | null, pos: number, type: PlaylistLevelType): BufferInfo | null;
304
296
  protected getMaxBufferLength(levelBitrate?: number): number;
305
297
  protected reduceMaxBufferLength(threshold: number, fragDuration: number): boolean;
306
298
  protected getAppendedFrag(position: number, playlistType?: PlaylistLevelType): Fragment | null;
@@ -310,8 +302,8 @@ export declare class BaseStreamController extends TaskLoop implements NetworkCom
310
302
  mapToInitFragWhenRequired(frag: Fragment | null): typeof frag;
311
303
  getNextPart(partList: Part[], frag: Fragment, targetBufferTime: number): number;
312
304
  private loadedEndOfParts;
313
- protected getInitialLiveFragment(levelDetails: LevelDetails, fragments: MediaFragment[]): MediaFragment | null;
314
- protected getFragmentAtPosition(bufferEnd: number, end: number, levelDetails: LevelDetails): MediaFragment | null;
305
+ protected getInitialLiveFragment(levelDetails: LevelDetails, fragments: Array<Fragment>): Fragment | null;
306
+ protected getFragmentAtPosition(bufferEnd: number, end: number, levelDetails: LevelDetails): Fragment | null;
315
307
  protected synchronizeToLiveEdge(levelDetails: LevelDetails): void;
316
308
  protected alignPlaylists(details: LevelDetails, previousDetails: LevelDetails | undefined, switchDetails: LevelDetails | undefined): number;
317
309
  protected waitForCdnTuneIn(details: LevelDetails): boolean | 0;
@@ -361,20 +353,17 @@ export declare interface BufferCodecsData {
361
353
  audio?: Track;
362
354
  }
363
355
 
364
- export declare class BufferController extends Logger implements ComponentAPI {
356
+ export declare class BufferController implements ComponentAPI {
365
357
  private details;
366
358
  private _objectUrl;
367
359
  private operationQueue;
368
360
  private listeners;
369
361
  private hls;
370
- private fragmentTracker;
371
362
  bufferCodecEventsExpected: number;
372
363
  private _bufferCodecEventsTotal;
373
364
  media: HTMLMediaElement | null;
374
365
  mediaSource: MediaSource | null;
375
366
  private lastMpegAudioChunk;
376
- private blockedAudioAppend;
377
- private lastVideoAppendEnd;
378
367
  private appendSource;
379
368
  appendErrors: {
380
369
  audio: number;
@@ -384,7 +373,10 @@ export declare class BufferController extends Logger implements ComponentAPI {
384
373
  tracks: TrackSet;
385
374
  pendingTracks: TrackSet;
386
375
  sourceBuffer: SourceBuffers;
387
- constructor(hls: Hls, fragmentTracker: FragmentTracker);
376
+ protected log: (msg: any) => void;
377
+ protected warn: (msg: any, obj?: any) => void;
378
+ protected error: (msg: any, obj?: any) => void;
379
+ constructor(hls: Hls);
388
380
  hasSourceTypes(): boolean;
389
381
  destroy(): void;
390
382
  protected registerListeners(): void;
@@ -399,18 +391,13 @@ export declare class BufferController extends Logger implements ComponentAPI {
399
391
  protected onBufferReset(): void;
400
392
  private resetBuffer;
401
393
  protected onBufferCodecs(event: Events.BUFFER_CODECS, data: BufferCodecsData): void;
402
- protected appendChangeType(type: SourceBufferName, mimeType: string): void;
403
- private blockAudio;
404
- private unblockAudio;
394
+ protected appendChangeType(type: any, mimeType: any): void;
405
395
  protected onBufferAppending(event: Events.BUFFER_APPENDING, eventData: BufferAppendingData): void;
406
- private getFlushOp;
407
396
  protected onBufferFlushing(event: Events.BUFFER_FLUSHING, data: BufferFlushingData): void;
408
397
  protected onFragParsed(event: Events.FRAG_PARSED, data: FragParsedData): void;
409
398
  private onFragChanged;
410
399
  protected onBufferEos(event: Events.BUFFER_EOS, data: BufferEOSData): void;
411
400
  protected onLevelUpdated(event: Events.LEVEL_UPDATED, { details }: LevelUpdatedData): void;
412
- private onError;
413
- private resetAppendErrors;
414
401
  trimBuffers(): void;
415
402
  flushBackBuffer(currentTime: number, targetDuration: number, targetBackBufferPosition: number): void;
416
403
  flushFrontBuffer(currentTime: number, targetDuration: number, targetFrontBufferPosition: number): void;
@@ -419,8 +406,8 @@ export declare class BufferController extends Logger implements ComponentAPI {
419
406
  * 'liveDurationInfinity` is set to `true`
420
407
  * More details: https://github.com/video-dev/hls.js/issues/355
421
408
  */
422
- private getDurationAndRange;
423
- private updateMediaSource;
409
+ private updateMediaElementDuration;
410
+ updateSeekableRange(levelDetails: any): void;
424
411
  protected checkPendingTracks(): void;
425
412
  protected createSourceBuffers(tracks: TrackSet): void;
426
413
  private _onMediaSourceOpen;
@@ -615,8 +602,6 @@ export declare class CMCDController implements ComponentAPI {
615
602
  * Apply CMCD data to a segment request
616
603
  */
617
604
  private applyFragmentData;
618
- private getNextFrag;
619
- private getNextPart;
620
605
  /**
621
606
  * The CMCD object type.
622
607
  */
@@ -650,12 +635,13 @@ export declare interface ComponentAPI {
650
635
  destroy(): void;
651
636
  }
652
637
 
653
- export declare class ContentSteeringController extends Logger implements NetworkComponentAPI {
638
+ export declare class ContentSteeringController implements NetworkComponentAPI {
654
639
  private readonly hls;
640
+ private log;
655
641
  private loader;
656
642
  private uri;
657
643
  private pathwayId;
658
- private _pathwayPriority;
644
+ private pathwayPriority;
659
645
  private timeToLoad;
660
646
  private reloadTimer;
661
647
  private updated;
@@ -668,9 +654,6 @@ export declare class ContentSteeringController extends Logger implements Network
668
654
  constructor(hls: Hls);
669
655
  private registerListeners;
670
656
  private unregisterListeners;
671
- pathways(): string[];
672
- get pathwayPriority(): string[] | null;
673
- set pathwayPriority(pathwayPriority: string[]);
674
657
  startLoad(): void;
675
658
  stopLoad(): void;
676
659
  clearTimeout(): void;
@@ -706,32 +689,20 @@ export declare interface CuesParsedData {
706
689
 
707
690
  export declare class DateRange {
708
691
  attr: AttrList;
709
- tagAnchor: Fragment | null;
710
- tagOrder: number;
711
692
  private _startDate;
712
693
  private _endDate?;
713
- private _cue?;
714
694
  private _badValueForSameId?;
715
- constructor(dateRangeAttr: AttrList, dateRangeWithSameId?: DateRange | undefined, tagCount?: number);
695
+ constructor(dateRangeAttr: AttrList, dateRangeWithSameId?: DateRange);
716
696
  get id(): string;
717
697
  get class(): string;
718
- get cue(): DateRangeCue;
719
- get startTime(): number;
720
698
  get startDate(): Date;
721
699
  get endDate(): Date | null;
722
700
  get duration(): number | null;
723
701
  get plannedDuration(): number | null;
724
702
  get endOnNext(): boolean;
725
- get isInterstitial(): boolean;
726
703
  get isValid(): boolean;
727
704
  }
728
705
 
729
- export declare type DateRangeCue = {
730
- pre: boolean;
731
- post: boolean;
732
- once: boolean;
733
- };
734
-
735
706
  declare interface DecryptData {
736
707
  uri: string;
737
708
  method: string;
@@ -756,7 +727,6 @@ declare class Decrypter {
756
727
  private currentIV;
757
728
  private currentResult;
758
729
  private useSoftware;
759
- private enableSoftwareAES;
760
730
  constructor(config: HlsConfig, { removePKCS7Padding }?: {
761
731
  removePKCS7Padding?: boolean | undefined;
762
732
  });
@@ -764,19 +734,14 @@ declare class Decrypter {
764
734
  isSync(): boolean;
765
735
  flush(): Uint8Array | null;
766
736
  reset(): void;
767
- decrypt(data: Uint8Array | ArrayBuffer, key: ArrayBuffer, iv: ArrayBuffer, aesMode: DecrypterAesMode): Promise<ArrayBuffer>;
768
- softwareDecrypt(data: Uint8Array, key: ArrayBuffer, iv: ArrayBuffer, aesMode: DecrypterAesMode): ArrayBuffer | null;
769
- webCryptoDecrypt(data: Uint8Array, key: ArrayBuffer, iv: ArrayBuffer, aesMode: DecrypterAesMode): Promise<ArrayBuffer>;
737
+ decrypt(data: Uint8Array | ArrayBuffer, key: ArrayBuffer, iv: ArrayBuffer): Promise<ArrayBuffer>;
738
+ softwareDecrypt(data: Uint8Array, key: ArrayBuffer, iv: ArrayBuffer): ArrayBuffer | null;
739
+ webCryptoDecrypt(data: Uint8Array, key: ArrayBuffer, iv: ArrayBuffer): Promise<ArrayBuffer>;
770
740
  private onWebCryptoError;
771
741
  private getValidChunk;
772
742
  private logOnce;
773
743
  }
774
744
 
775
- declare const enum DecrypterAesMode {
776
- cbc = 0,
777
- ctr = 1
778
- }
779
-
780
745
  declare type DRMSystemConfiguration = {
781
746
  licenseUrl: string;
782
747
  serverCertificateUrl?: string;
@@ -822,7 +787,7 @@ export declare const enum ElementaryStreamTypes {
822
787
  * @class
823
788
  * @constructor
824
789
  */
825
- export declare class EMEController extends Logger implements ComponentAPI {
790
+ export declare class EMEController implements ComponentAPI {
826
791
  static CDMCleanupPromise: Promise<void> | void;
827
792
  private readonly hls;
828
793
  private readonly config;
@@ -833,6 +798,12 @@ export declare class EMEController extends Logger implements ComponentAPI {
833
798
  private mediaKeySessions;
834
799
  private keyIdToKeySessionPromise;
835
800
  private setMediaKeysQueue;
801
+ private onMediaEncrypted;
802
+ private onWaitingForKey;
803
+ private debug;
804
+ private log;
805
+ private warn;
806
+ private error;
836
807
  constructor(hls: Hls);
837
808
  destroy(): void;
838
809
  private registerListeners;
@@ -853,8 +824,8 @@ export declare class EMEController extends Logger implements ComponentAPI {
853
824
  private handleError;
854
825
  private getKeySystemForKeyPromise;
855
826
  private getKeySystemSelectionPromise;
856
- private onMediaEncrypted;
857
- private onWaitingForKey;
827
+ private _onMediaEncrypted;
828
+ private _onWaitingForKey;
858
829
  private attemptSetMediaKeys;
859
830
  private generateRequestWithPreferredKeySession;
860
831
  private onKeyStatusChange;
@@ -888,10 +859,13 @@ export declare const enum ErrorActionFlags {
888
859
  SwitchToSDR = 4
889
860
  }
890
861
 
891
- export declare class ErrorController extends Logger implements NetworkComponentAPI {
862
+ export declare class ErrorController implements NetworkComponentAPI {
892
863
  private readonly hls;
893
864
  private playlistError;
894
865
  private penalizedRenditions;
866
+ private log;
867
+ private warn;
868
+ private error;
895
869
  constructor(hls: Hls);
896
870
  private registerListeners;
897
871
  private unregisterListeners;
@@ -1001,7 +975,6 @@ export declare enum Events {
1001
975
  MEDIA_ATTACHED = "hlsMediaAttached",
1002
976
  MEDIA_DETACHING = "hlsMediaDetaching",
1003
977
  MEDIA_DETACHED = "hlsMediaDetached",
1004
- MEDIA_ENDED = "hlsMediaEnded",
1005
978
  BUFFER_RESET = "hlsBufferReset",
1006
979
  BUFFER_CODECS = "hlsBufferCodecs",
1007
980
  BUFFER_CREATED = "hlsBufferCreated",
@@ -1095,7 +1068,6 @@ export declare class FPSController implements ComponentAPI {
1095
1068
  protected unregisterListeners(): void;
1096
1069
  destroy(): void;
1097
1070
  protected onMediaAttaching(event: Events.MEDIA_ATTACHING, data: MediaAttachingData): void;
1098
- private onMediaDetaching;
1099
1071
  checkFPS(video: HTMLVideoElement, decodedFrames: number, droppedFrames: number): void;
1100
1072
  checkFPSInterval(): void;
1101
1073
  }
@@ -1188,8 +1160,8 @@ export declare class Fragment extends BaseSegment {
1188
1160
  cc: number;
1189
1161
  startPTS?: number;
1190
1162
  endPTS?: number;
1191
- startDTS?: number;
1192
- endDTS?: number;
1163
+ startDTS: number;
1164
+ endDTS: number;
1193
1165
  start: number;
1194
1166
  deltaPTS?: number;
1195
1167
  maxStartPTS?: number;
@@ -1277,21 +1249,20 @@ declare class FragmentTracker implements ComponentAPI {
1277
1249
  * A buffered Fragment is one whose loading, parsing and appending is done (completed or "partial" meaning aborted).
1278
1250
  * If not found any Fragment, return null
1279
1251
  */
1280
- getBufferedFrag(position: number, levelType: PlaylistLevelType): MediaFragment | null;
1281
- getFragAtPos(position: number, levelType: PlaylistLevelType, buffered?: boolean): MediaFragment | null;
1252
+ getBufferedFrag(position: number, levelType: PlaylistLevelType): Fragment | null;
1282
1253
  /**
1283
1254
  * Partial fragments effected by coded frame eviction will be removed
1284
1255
  * The browser will unload parts of the buffer to free up memory for new buffer data
1285
1256
  * Fragments will need to be reloaded when the buffer is freed up, removing partial fragments will allow them to reload(since there might be parts that are still playable)
1286
1257
  */
1287
- detectEvictedFragments(elementaryStream: SourceBufferName, timeRange: TimeRanges, playlistType: PlaylistLevelType, appendedPart?: Part | null, removeAppending?: boolean): void;
1258
+ detectEvictedFragments(elementaryStream: SourceBufferName, timeRange: TimeRanges, playlistType: PlaylistLevelType, appendedPart?: Part | null): void;
1288
1259
  /**
1289
1260
  * Checks if the fragment passed in is loaded in the buffer properly
1290
1261
  * Partially loaded fragments will be registered as a partial fragment
1291
1262
  */
1292
1263
  detectPartialFragments(data: FragBufferedData): void;
1293
1264
  private removeParts;
1294
- fragBuffered(frag: MediaFragment, force?: true): void;
1265
+ fragBuffered(frag: Fragment, force?: true): void;
1295
1266
  private getBufferedTimes;
1296
1267
  /**
1297
1268
  * Gets the partial fragment for a certain time
@@ -1300,12 +1271,10 @@ declare class FragmentTracker implements ComponentAPI {
1300
1271
  isEndListAppended(type: PlaylistLevelType): boolean;
1301
1272
  getState(fragment: Fragment): FragmentState;
1302
1273
  private isTimeBuffered;
1303
- private onManifestLoading;
1304
1274
  private onFragLoaded;
1305
1275
  private onBufferAppended;
1306
1276
  private onFragBuffered;
1307
1277
  private hasFragment;
1308
- hasFragments(type?: PlaylistLevelType): boolean;
1309
1278
  hasParts(type: PlaylistLevelType): boolean;
1310
1279
  removeFragmentsInRange(start: number, end: number, playlistType: PlaylistLevelType, withGapOnly?: boolean, unbufferedOnly?: boolean): void;
1311
1280
  removeFragment(fragment: Fragment): void;
@@ -1352,12 +1321,9 @@ declare class Hls implements HlsEventEmitter {
1352
1321
  * The configuration object provided on player instantiation.
1353
1322
  */
1354
1323
  readonly userConfig: Partial<HlsConfig>;
1355
- /**
1356
- * The logger functions used by this player instance, configured on player instantiation.
1357
- */
1358
- readonly logger: ILogger;
1359
1324
  private coreComponents;
1360
1325
  private networkControllers;
1326
+ private started;
1361
1327
  private _emitter;
1362
1328
  private _autoLevelCapping;
1363
1329
  private _maxHdcpLevel;
@@ -1372,7 +1338,7 @@ declare class Hls implements HlsEventEmitter {
1372
1338
  private emeController;
1373
1339
  private cmcdController;
1374
1340
  private _media;
1375
- private _url;
1341
+ private url;
1376
1342
  private triggeringException?;
1377
1343
  /**
1378
1344
  * Get the video-dev/hls.js package version.
@@ -1431,10 +1397,6 @@ declare class Hls implements HlsEventEmitter {
1431
1397
  * Set the source URL. Can be relative or absolute.
1432
1398
  */
1433
1399
  loadSource(url: string): void;
1434
- /**
1435
- * Gets the currently loaded URL
1436
- */
1437
- get url(): string | null;
1438
1400
  /**
1439
1401
  * Start loading data from the stream source.
1440
1402
  * Depending on default config, client starts loading automatically when a source is set.
@@ -1448,11 +1410,11 @@ declare class Hls implements HlsEventEmitter {
1448
1410
  */
1449
1411
  stopLoad(): void;
1450
1412
  /**
1451
- * Resumes stream controller segment loading after `pauseBuffering` has been called.
1413
+ * Resumes stream controller segment loading if previously started.
1452
1414
  */
1453
1415
  resumeBuffering(): void;
1454
1416
  /**
1455
- * Prevents stream controller from loading new segments until `resumeBuffering` is called.
1417
+ * Stops stream controller segment loading without changing 'started' state like stopLoad().
1456
1418
  * This allows for media buffering to be paused without interupting playlist loading.
1457
1419
  */
1458
1420
  pauseBuffering(): void;
@@ -1597,7 +1559,6 @@ declare class Hls implements HlsEventEmitter {
1597
1559
  */
1598
1560
  get playingDate(): Date | null;
1599
1561
  get mainForwardBufferInfo(): BufferInfo | null;
1600
- get maxBufferLength(): number;
1601
1562
  /**
1602
1563
  * Find and select the best matching audio track, making a level switch when a Group change is necessary.
1603
1564
  * Updates `hls.config.audioPreference`. Returns the selected track, or null when no matching track is found.
@@ -1677,7 +1638,6 @@ declare class Hls implements HlsEventEmitter {
1677
1638
  * target distance from the edge as calculated by the latency controller
1678
1639
  */
1679
1640
  get targetLatency(): number | null;
1680
- set targetLatency(latency: number);
1681
1641
  /**
1682
1642
  * the rate at which the edge of the current live playlist is advancing or 1 if there is none
1683
1643
  */
@@ -1686,11 +1646,6 @@ declare class Hls implements HlsEventEmitter {
1686
1646
  * set to true when startLoad is called before MANIFEST_PARSED event
1687
1647
  */
1688
1648
  get forceStartLoad(): boolean;
1689
- /**
1690
- * ContentSteering pathwayPriority getter/setter
1691
- */
1692
- get pathwayPriority(): string[] | null;
1693
- set pathwayPriority(pathwayPriority: string[]);
1694
1649
  }
1695
1650
  export default Hls;
1696
1651
 
@@ -1751,7 +1706,6 @@ export declare interface HlsListeners {
1751
1706
  [Events.MEDIA_ATTACHED]: (event: Events.MEDIA_ATTACHED, data: MediaAttachedData) => void;
1752
1707
  [Events.MEDIA_DETACHING]: (event: Events.MEDIA_DETACHING) => void;
1753
1708
  [Events.MEDIA_DETACHED]: (event: Events.MEDIA_DETACHED) => void;
1754
- [Events.MEDIA_ENDED]: (event: Events.MEDIA_ENDED, data: MediaEndedData) => void;
1755
1709
  [Events.BUFFER_RESET]: (event: Events.BUFFER_RESET) => void;
1756
1710
  [Events.BUFFER_CODECS]: (event: Events.BUFFER_CODECS, data: BufferCodecsData) => void;
1757
1711
  [Events.BUFFER_CREATED]: (event: Events.BUFFER_CREATED, data: BufferCreatedData) => void;
@@ -1862,8 +1816,8 @@ export declare interface ILogger {
1862
1816
  }
1863
1817
 
1864
1818
  export declare interface InitPTSFoundData {
1865
- id: PlaylistLevelType;
1866
- frag: MediaFragment;
1819
+ id: string;
1820
+ frag: Fragment;
1867
1821
  initPTS: number;
1868
1822
  timescale: number;
1869
1823
  }
@@ -1942,7 +1896,6 @@ export declare type LatencyControllerConfig = {
1942
1896
  liveSyncDuration?: number;
1943
1897
  liveMaxLatencyDuration?: number;
1944
1898
  maxLiveSyncPlaybackRate: number;
1945
- liveSyncOnStallIncrease: number;
1946
1899
  };
1947
1900
 
1948
1901
  export declare class Level {
@@ -2026,11 +1979,10 @@ export declare class LevelDetails {
2026
1979
  averagetargetduration?: number;
2027
1980
  endCC: number;
2028
1981
  endSN: number;
2029
- fragments: MediaFragment[];
2030
- fragmentHint?: MediaFragment;
1982
+ fragments: Fragment[];
1983
+ fragmentHint?: Fragment;
2031
1984
  partList: Part[] | null;
2032
1985
  dateRanges: Record<string, DateRange>;
2033
- dateRangeTagCount: number;
2034
1986
  live: boolean;
2035
1987
  ageHeader: number;
2036
1988
  advancedDateTime?: number;
@@ -2305,16 +2257,6 @@ export declare class LoadStats implements LoaderStats {
2305
2257
  buffering: HlsProgressivePerformanceTiming;
2306
2258
  }
2307
2259
 
2308
- export declare class Logger implements ILogger {
2309
- trace: ILogFunction;
2310
- debug: ILogFunction;
2311
- log: ILogFunction;
2312
- warn: ILogFunction;
2313
- info: ILogFunction;
2314
- error: ILogFunction;
2315
- constructor(label: string, logger: ILogger);
2316
- }
2317
-
2318
2260
  export declare type MainPlaylistType = AudioPlaylistType | 'VIDEO';
2319
2261
 
2320
2262
  export declare interface ManifestLoadedData {
@@ -2390,14 +2332,6 @@ export declare type MediaDecodingInfo = {
2390
2332
  error?: Error;
2391
2333
  };
2392
2334
 
2393
- export declare interface MediaEndedData {
2394
- stalled: boolean;
2395
- }
2396
-
2397
- export declare interface MediaFragment extends Fragment {
2398
- sn: number;
2399
- }
2400
-
2401
2335
  export declare type MediaKeyFunc = (keySystem: KeySystems, supportedConfigurations: MediaKeySystemConfiguration[]) => Promise<MediaKeySystemAccess>;
2402
2336
 
2403
2337
  export declare interface MediaKeySessionContext {
@@ -2467,8 +2401,6 @@ export declare type MP4RemuxerConfig = {
2467
2401
  export declare interface NetworkComponentAPI extends ComponentAPI {
2468
2402
  startLoad(startPosition: number): void;
2469
2403
  stopLoad(): void;
2470
- pauseBuffering?(): void;
2471
- resumeBuffering?(): void;
2472
2404
  }
2473
2405
 
2474
2406
  export declare const enum NetworkErrorAction {
@@ -2501,17 +2433,6 @@ declare interface PACData {
2501
2433
  italics: boolean;
2502
2434
  }
2503
2435
 
2504
- export declare type ParsedMultivariantPlaylist = {
2505
- contentSteering: ContentSteeringOptions | null;
2506
- levels: LevelParsed[];
2507
- playlistParsingError: Error | null;
2508
- sessionData: Record<string, AttrList> | null;
2509
- sessionKeys: LevelKey[] | null;
2510
- startTimeOffset: number | null;
2511
- variableList: VariableMap | null;
2512
- hasVariableRefs: boolean;
2513
- };
2514
-
2515
2436
  /**
2516
2437
  * Object representing parsed data from an HLS Partial Segment. Found in {@link hls.js#LevelDetails.partList}.
2517
2438
  */
@@ -2521,10 +2442,10 @@ export declare class Part extends BaseSegment {
2521
2442
  readonly gap: boolean;
2522
2443
  readonly independent: boolean;
2523
2444
  readonly relurl: string;
2524
- readonly fragment: MediaFragment;
2445
+ readonly fragment: Fragment;
2525
2446
  readonly index: number;
2526
2447
  stats: LoadStats;
2527
- constructor(partAttrs: AttrList, frag: MediaFragment, baseurl: string, index: number, previous?: Part);
2448
+ constructor(partAttrs: AttrList, frag: Fragment, baseurl: string, index: number, previous?: Part);
2528
2449
  get start(): number;
2529
2450
  get end(): number;
2530
2451
  get loaded(): boolean;
@@ -2719,14 +2640,16 @@ declare class StreamController extends BaseStreamController implements NetworkCo
2719
2640
  private altAudio;
2720
2641
  private audioOnly;
2721
2642
  private fragPlaying;
2643
+ private onvplaying;
2644
+ private onvseeked;
2722
2645
  private fragLastKbps;
2723
2646
  private couldBacktrack;
2724
2647
  private backtrackFragment;
2725
2648
  private audioCodecSwitch;
2726
2649
  private videoBuffer;
2727
2650
  constructor(hls: Hls, fragmentTracker: FragmentTracker, keyLoader: KeyLoader);
2728
- protected registerListeners(): void;
2729
- protected unregisterListeners(): void;
2651
+ private _registerListeners;
2652
+ protected _unregisterListeners(): void;
2730
2653
  protected onHandlerDestroying(): void;
2731
2654
  startLoad(startPosition: number): void;
2732
2655
  stopLoad(): void;
@@ -2750,7 +2673,7 @@ declare class StreamController extends BaseStreamController implements NetworkCo
2750
2673
  protected onMediaDetaching(): void;
2751
2674
  private onMediaPlaying;
2752
2675
  private onMediaSeeked;
2753
- protected onManifestLoading(): void;
2676
+ private onManifestLoading;
2754
2677
  private onManifestParsed;
2755
2678
  private onLevelLoading;
2756
2679
  private onLevelLoaded;
@@ -2759,7 +2682,7 @@ declare class StreamController extends BaseStreamController implements NetworkCo
2759
2682
  private onAudioTrackSwitched;
2760
2683
  private onBufferCreated;
2761
2684
  private onFragBuffered;
2762
- protected onError(event: Events.ERROR, data: ErrorData): void;
2685
+ private onError;
2763
2686
  private checkBuffer;
2764
2687
  private onFragLoadEmergencyAborted;
2765
2688
  private onBufferFlushed;
@@ -2774,14 +2697,13 @@ declare class StreamController extends BaseStreamController implements NetworkCo
2774
2697
  private _handleTransmuxComplete;
2775
2698
  private _bufferInitSegment;
2776
2699
  getMainFwdBufferInfo(): BufferInfo | null;
2777
- get maxBufferLength(): number;
2778
2700
  private backtrack;
2779
2701
  private checkFragmentChanged;
2780
2702
  get nextLevel(): number;
2781
2703
  get currentFrag(): Fragment | null;
2782
2704
  get currentProgramDateTime(): Date | null;
2783
2705
  get currentLevel(): number;
2784
- get nextBufferedFrag(): MediaFragment | null;
2706
+ get nextBufferedFrag(): Fragment | null;
2785
2707
  get forceStartLoad(): boolean;
2786
2708
  }
2787
2709
 
@@ -2817,6 +2739,11 @@ declare class StyledUnicodeChar {
2817
2739
  isEmpty(): boolean;
2818
2740
  }
2819
2741
 
2742
+ declare interface SubtitleFragProcessed {
2743
+ success: boolean;
2744
+ frag: Fragment;
2745
+ }
2746
+
2820
2747
  export declare interface SubtitleFragProcessedData {
2821
2748
  success: boolean;
2822
2749
  frag: Fragment;
@@ -2841,21 +2768,22 @@ export declare class SubtitleStreamController extends BaseStreamController imple
2841
2768
  private mainDetails;
2842
2769
  constructor(hls: Hls, fragmentTracker: FragmentTracker, keyLoader: KeyLoader);
2843
2770
  protected onHandlerDestroying(): void;
2844
- protected registerListeners(): void;
2845
- protected unregisterListeners(): void;
2771
+ private _registerListeners;
2772
+ private _unregisterListeners;
2846
2773
  startLoad(startPosition: number): void;
2847
- protected onManifestLoading(): void;
2848
- protected onMediaDetaching(): void;
2849
- private onLevelLoaded;
2850
- private onSubtitleFragProcessed;
2851
- private onBufferFlushing;
2852
- private onFragBuffered;
2853
- protected onError(event: Events.ERROR, data: ErrorData): void;
2854
- private onSubtitleTracksUpdated;
2855
- private onSubtitleTrackSwitch;
2856
- private onSubtitleTrackLoaded;
2774
+ onManifestLoading(): void;
2775
+ onMediaDetaching(): void;
2776
+ onLevelLoaded(event: Events.LEVEL_LOADED, data: LevelLoadedData): void;
2777
+ onSubtitleFragProcessed(event: Events.SUBTITLE_FRAG_PROCESSED, data: SubtitleFragProcessed): void;
2778
+ onBufferFlushing(event: Events.BUFFER_FLUSHING, data: BufferFlushingData): void;
2779
+ onFragBuffered(event: Events.FRAG_BUFFERED, data: FragBufferedData): void;
2780
+ onError(event: Events.ERROR, data: ErrorData): void;
2781
+ onSubtitleTracksUpdated(event: Events.SUBTITLE_TRACKS_UPDATED, { subtitleTracks }: SubtitleTracksUpdatedData): void;
2782
+ onSubtitleTrackSwitch(event: Events.SUBTITLE_TRACK_SWITCH, data: TrackSwitchedData): void;
2783
+ onSubtitleTrackLoaded(event: Events.SUBTITLE_TRACK_LOADED, data: TrackLoadedData): void;
2857
2784
  _handleFragmentLoadComplete(fragLoadedData: FragLoadedData): void;
2858
2785
  doTick(): void;
2786
+ protected getMaxBufferLength(mainBufferLength?: number): number;
2859
2787
  protected loadFragment(frag: Fragment, level: Level, targetBufferTime: number): void;
2860
2788
  get mediaBufferTimeRanges(): Bufferable;
2861
2789
  }
@@ -2869,10 +2797,10 @@ export declare class SubtitleTrackController extends BasePlaylistController {
2869
2797
  private currentTrack;
2870
2798
  private selectDefaultTrack;
2871
2799
  private queuedDefaultTrack;
2800
+ private asyncPollTrackChange;
2872
2801
  private useTextTrackPolling;
2873
2802
  private subtitlePollingInterval;
2874
2803
  private _subtitleDisplay;
2875
- private asyncPollTrackChange;
2876
2804
  constructor(hls: Hls);
2877
2805
  destroy(): void;
2878
2806
  get subtitleDisplay(): boolean;
@@ -2957,12 +2885,12 @@ export declare interface SubtitleTrackSwitchData {
2957
2885
  * we are limiting the task execution per call stack to exactly one, but scheduling/post-poning further
2958
2886
  * task processing on the next main loop iteration (also known as "next tick" in the Node/JS runtime lingo).
2959
2887
  */
2960
- declare class TaskLoop extends Logger {
2888
+ declare class TaskLoop {
2961
2889
  private readonly _boundTick;
2962
2890
  private _tickTimer;
2963
2891
  private _tickInterval;
2964
2892
  private _tickCallCount;
2965
- constructor(label: string, logger: ILogger);
2893
+ constructor();
2966
2894
  destroy(): void;
2967
2895
  protected onHandlerDestroying(): void;
2968
2896
  protected onHandlerDestroyed(): void;
@@ -3093,6 +3021,10 @@ export declare interface TrackSet {
3093
3021
  audiovideo?: Track;
3094
3022
  }
3095
3023
 
3024
+ declare interface TrackSwitchedData {
3025
+ id: number;
3026
+ }
3027
+
3096
3028
  declare class TransmuxerInterface {
3097
3029
  error: Error | null;
3098
3030
  private hls;
@@ -3109,7 +3041,7 @@ declare class TransmuxerInterface {
3109
3041
  constructor(hls: Hls, id: PlaylistLevelType, onTransmuxComplete: (transmuxResult: TransmuxerResult) => void, onFlush: (chunkMeta: ChunkMetadata) => void);
3110
3042
  resetWorker(): void;
3111
3043
  destroy(): void;
3112
- push(data: ArrayBuffer, initSegmentData: Uint8Array | undefined, audioCodec: string | undefined, videoCodec: string | undefined, frag: MediaFragment, part: Part | null, duration: number, accurateTimeOffset: boolean, chunkMeta: ChunkMetadata, defaultInitPTS?: RationalTimestamp): void;
3044
+ push(data: ArrayBuffer, initSegmentData: Uint8Array | undefined, audioCodec: string | undefined, videoCodec: string | undefined, frag: Fragment, part: Part | null, duration: number, accurateTimeOffset: boolean, chunkMeta: ChunkMetadata, defaultInitPTS?: RationalTimestamp): void;
3113
3045
  flush(chunkMeta: ChunkMetadata): void;
3114
3046
  private transmuxerError;
3115
3047
  private handleFlushResult;
@@ -3168,7 +3100,6 @@ declare const VideoRangeValues: readonly ["SDR", "PQ", "HLG"];
3168
3100
  export declare type VideoSelectionOption = {
3169
3101
  preferHDR?: boolean;
3170
3102
  allowedVideoRanges?: Array<VideoRange>;
3171
- videoCodec?: string;
3172
3103
  };
3173
3104
 
3174
3105
  export { }