hls.js 1.5.12-0.canary.10398 → 1.5.12

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 +2678 -4226
  5. package/dist/hls.js.d.ts +109 -174
  6. package/dist/hls.js.map +1 -1
  7. package/dist/hls.light.js +1964 -2900
  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 +3409 -4360
  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 +4451 -6014
  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 +137 -141
  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 +97 -223
  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 +43 -73
  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 +16 -36
  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
- private loadingParts;
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,9 +284,8 @@ 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;
@@ -302,7 +294,7 @@ export declare class BaseStreamController extends TaskLoop implements NetworkCom
302
294
  protected getFwdBufferInfo(bufferable: Bufferable | null, type: PlaylistLevelType): BufferInfo | null;
303
295
  protected getFwdBufferInfoAtPos(bufferable: Bufferable | null, pos: number, type: PlaylistLevelType): BufferInfo | null;
304
296
  protected getMaxBufferLength(levelBitrate?: number): number;
305
- protected reduceMaxBufferLength(threshold: number): boolean;
297
+ protected reduceMaxBufferLength(threshold: number, fragDuration: number): boolean;
306
298
  protected getAppendedFrag(position: number, playlistType?: PlaylistLevelType): Fragment | null;
307
299
  protected getNextFragment(pos: number, levelDetails: LevelDetails): Fragment | null;
308
300
  protected isLoopLoading(frag: Fragment, targetBufferTime: number): boolean;
@@ -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;
@@ -1444,11 +1410,11 @@ declare class Hls implements HlsEventEmitter {
1444
1410
  */
1445
1411
  stopLoad(): void;
1446
1412
  /**
1447
- * Resumes stream controller segment loading after `pauseBuffering` has been called.
1413
+ * Resumes stream controller segment loading if previously started.
1448
1414
  */
1449
1415
  resumeBuffering(): void;
1450
1416
  /**
1451
- * Prevents stream controller from loading new segments until `resumeBuffering` is called.
1417
+ * Stops stream controller segment loading without changing 'started' state like stopLoad().
1452
1418
  * This allows for media buffering to be paused without interupting playlist loading.
1453
1419
  */
1454
1420
  pauseBuffering(): void;
@@ -1593,7 +1559,6 @@ declare class Hls implements HlsEventEmitter {
1593
1559
  */
1594
1560
  get playingDate(): Date | null;
1595
1561
  get mainForwardBufferInfo(): BufferInfo | null;
1596
- get maxBufferLength(): number;
1597
1562
  /**
1598
1563
  * Find and select the best matching audio track, making a level switch when a Group change is necessary.
1599
1564
  * Updates `hls.config.audioPreference`. Returns the selected track, or null when no matching track is found.
@@ -1673,7 +1638,6 @@ declare class Hls implements HlsEventEmitter {
1673
1638
  * target distance from the edge as calculated by the latency controller
1674
1639
  */
1675
1640
  get targetLatency(): number | null;
1676
- set targetLatency(latency: number);
1677
1641
  /**
1678
1642
  * the rate at which the edge of the current live playlist is advancing or 1 if there is none
1679
1643
  */
@@ -1682,11 +1646,6 @@ declare class Hls implements HlsEventEmitter {
1682
1646
  * set to true when startLoad is called before MANIFEST_PARSED event
1683
1647
  */
1684
1648
  get forceStartLoad(): boolean;
1685
- /**
1686
- * ContentSteering pathwayPriority getter/setter
1687
- */
1688
- get pathwayPriority(): string[] | null;
1689
- set pathwayPriority(pathwayPriority: string[]);
1690
1649
  }
1691
1650
  export default Hls;
1692
1651
 
@@ -1747,7 +1706,6 @@ export declare interface HlsListeners {
1747
1706
  [Events.MEDIA_ATTACHED]: (event: Events.MEDIA_ATTACHED, data: MediaAttachedData) => void;
1748
1707
  [Events.MEDIA_DETACHING]: (event: Events.MEDIA_DETACHING) => void;
1749
1708
  [Events.MEDIA_DETACHED]: (event: Events.MEDIA_DETACHED) => void;
1750
- [Events.MEDIA_ENDED]: (event: Events.MEDIA_ENDED, data: MediaEndedData) => void;
1751
1709
  [Events.BUFFER_RESET]: (event: Events.BUFFER_RESET) => void;
1752
1710
  [Events.BUFFER_CODECS]: (event: Events.BUFFER_CODECS, data: BufferCodecsData) => void;
1753
1711
  [Events.BUFFER_CREATED]: (event: Events.BUFFER_CREATED, data: BufferCreatedData) => void;
@@ -1858,8 +1816,8 @@ export declare interface ILogger {
1858
1816
  }
1859
1817
 
1860
1818
  export declare interface InitPTSFoundData {
1861
- id: PlaylistLevelType;
1862
- frag: MediaFragment;
1819
+ id: string;
1820
+ frag: Fragment;
1863
1821
  initPTS: number;
1864
1822
  timescale: number;
1865
1823
  }
@@ -1938,7 +1896,6 @@ export declare type LatencyControllerConfig = {
1938
1896
  liveSyncDuration?: number;
1939
1897
  liveMaxLatencyDuration?: number;
1940
1898
  maxLiveSyncPlaybackRate: number;
1941
- liveSyncOnStallIncrease: number;
1942
1899
  };
1943
1900
 
1944
1901
  export declare class Level {
@@ -2022,11 +1979,10 @@ export declare class LevelDetails {
2022
1979
  averagetargetduration?: number;
2023
1980
  endCC: number;
2024
1981
  endSN: number;
2025
- fragments: MediaFragment[];
2026
- fragmentHint?: MediaFragment;
1982
+ fragments: Fragment[];
1983
+ fragmentHint?: Fragment;
2027
1984
  partList: Part[] | null;
2028
1985
  dateRanges: Record<string, DateRange>;
2029
- dateRangeTagCount: number;
2030
1986
  live: boolean;
2031
1987
  ageHeader: number;
2032
1988
  advancedDateTime?: number;
@@ -2301,16 +2257,6 @@ export declare class LoadStats implements LoaderStats {
2301
2257
  buffering: HlsProgressivePerformanceTiming;
2302
2258
  }
2303
2259
 
2304
- export declare class Logger implements ILogger {
2305
- trace: ILogFunction;
2306
- debug: ILogFunction;
2307
- log: ILogFunction;
2308
- warn: ILogFunction;
2309
- info: ILogFunction;
2310
- error: ILogFunction;
2311
- constructor(label: string, logger: ILogger);
2312
- }
2313
-
2314
2260
  export declare type MainPlaylistType = AudioPlaylistType | 'VIDEO';
2315
2261
 
2316
2262
  export declare interface ManifestLoadedData {
@@ -2386,14 +2332,6 @@ export declare type MediaDecodingInfo = {
2386
2332
  error?: Error;
2387
2333
  };
2388
2334
 
2389
- export declare interface MediaEndedData {
2390
- stalled: boolean;
2391
- }
2392
-
2393
- export declare interface MediaFragment extends Fragment {
2394
- sn: number;
2395
- }
2396
-
2397
2335
  export declare type MediaKeyFunc = (keySystem: KeySystems, supportedConfigurations: MediaKeySystemConfiguration[]) => Promise<MediaKeySystemAccess>;
2398
2336
 
2399
2337
  export declare interface MediaKeySessionContext {
@@ -2463,8 +2401,6 @@ export declare type MP4RemuxerConfig = {
2463
2401
  export declare interface NetworkComponentAPI extends ComponentAPI {
2464
2402
  startLoad(startPosition: number): void;
2465
2403
  stopLoad(): void;
2466
- pauseBuffering?(): void;
2467
- resumeBuffering?(): void;
2468
2404
  }
2469
2405
 
2470
2406
  export declare const enum NetworkErrorAction {
@@ -2497,17 +2433,6 @@ declare interface PACData {
2497
2433
  italics: boolean;
2498
2434
  }
2499
2435
 
2500
- export declare type ParsedMultivariantPlaylist = {
2501
- contentSteering: ContentSteeringOptions | null;
2502
- levels: LevelParsed[];
2503
- playlistParsingError: Error | null;
2504
- sessionData: Record<string, AttrList> | null;
2505
- sessionKeys: LevelKey[] | null;
2506
- startTimeOffset: number | null;
2507
- variableList: VariableMap | null;
2508
- hasVariableRefs: boolean;
2509
- };
2510
-
2511
2436
  /**
2512
2437
  * Object representing parsed data from an HLS Partial Segment. Found in {@link hls.js#LevelDetails.partList}.
2513
2438
  */
@@ -2517,10 +2442,10 @@ export declare class Part extends BaseSegment {
2517
2442
  readonly gap: boolean;
2518
2443
  readonly independent: boolean;
2519
2444
  readonly relurl: string;
2520
- readonly fragment: MediaFragment;
2445
+ readonly fragment: Fragment;
2521
2446
  readonly index: number;
2522
2447
  stats: LoadStats;
2523
- constructor(partAttrs: AttrList, frag: MediaFragment, baseurl: string, index: number, previous?: Part);
2448
+ constructor(partAttrs: AttrList, frag: Fragment, baseurl: string, index: number, previous?: Part);
2524
2449
  get start(): number;
2525
2450
  get end(): number;
2526
2451
  get loaded(): boolean;
@@ -2715,14 +2640,16 @@ declare class StreamController extends BaseStreamController implements NetworkCo
2715
2640
  private altAudio;
2716
2641
  private audioOnly;
2717
2642
  private fragPlaying;
2643
+ private onvplaying;
2644
+ private onvseeked;
2718
2645
  private fragLastKbps;
2719
2646
  private couldBacktrack;
2720
2647
  private backtrackFragment;
2721
2648
  private audioCodecSwitch;
2722
2649
  private videoBuffer;
2723
2650
  constructor(hls: Hls, fragmentTracker: FragmentTracker, keyLoader: KeyLoader);
2724
- protected registerListeners(): void;
2725
- protected unregisterListeners(): void;
2651
+ private _registerListeners;
2652
+ protected _unregisterListeners(): void;
2726
2653
  protected onHandlerDestroying(): void;
2727
2654
  startLoad(startPosition: number): void;
2728
2655
  stopLoad(): void;
@@ -2746,7 +2673,7 @@ declare class StreamController extends BaseStreamController implements NetworkCo
2746
2673
  protected onMediaDetaching(): void;
2747
2674
  private onMediaPlaying;
2748
2675
  private onMediaSeeked;
2749
- protected onManifestLoading(): void;
2676
+ private onManifestLoading;
2750
2677
  private onManifestParsed;
2751
2678
  private onLevelLoading;
2752
2679
  private onLevelLoaded;
@@ -2755,7 +2682,7 @@ declare class StreamController extends BaseStreamController implements NetworkCo
2755
2682
  private onAudioTrackSwitched;
2756
2683
  private onBufferCreated;
2757
2684
  private onFragBuffered;
2758
- protected onError(event: Events.ERROR, data: ErrorData): void;
2685
+ private onError;
2759
2686
  private checkBuffer;
2760
2687
  private onFragLoadEmergencyAborted;
2761
2688
  private onBufferFlushed;
@@ -2770,14 +2697,13 @@ declare class StreamController extends BaseStreamController implements NetworkCo
2770
2697
  private _handleTransmuxComplete;
2771
2698
  private _bufferInitSegment;
2772
2699
  getMainFwdBufferInfo(): BufferInfo | null;
2773
- get maxBufferLength(): number;
2774
2700
  private backtrack;
2775
2701
  private checkFragmentChanged;
2776
2702
  get nextLevel(): number;
2777
2703
  get currentFrag(): Fragment | null;
2778
2704
  get currentProgramDateTime(): Date | null;
2779
2705
  get currentLevel(): number;
2780
- get nextBufferedFrag(): MediaFragment | null;
2706
+ get nextBufferedFrag(): Fragment | null;
2781
2707
  get forceStartLoad(): boolean;
2782
2708
  }
2783
2709
 
@@ -2813,6 +2739,11 @@ declare class StyledUnicodeChar {
2813
2739
  isEmpty(): boolean;
2814
2740
  }
2815
2741
 
2742
+ declare interface SubtitleFragProcessed {
2743
+ success: boolean;
2744
+ frag: Fragment;
2745
+ }
2746
+
2816
2747
  export declare interface SubtitleFragProcessedData {
2817
2748
  success: boolean;
2818
2749
  frag: Fragment;
@@ -2837,21 +2768,22 @@ export declare class SubtitleStreamController extends BaseStreamController imple
2837
2768
  private mainDetails;
2838
2769
  constructor(hls: Hls, fragmentTracker: FragmentTracker, keyLoader: KeyLoader);
2839
2770
  protected onHandlerDestroying(): void;
2840
- protected registerListeners(): void;
2841
- protected unregisterListeners(): void;
2771
+ private _registerListeners;
2772
+ private _unregisterListeners;
2842
2773
  startLoad(startPosition: number): void;
2843
- protected onManifestLoading(): void;
2844
- protected onMediaDetaching(): void;
2845
- private onLevelLoaded;
2846
- private onSubtitleFragProcessed;
2847
- private onBufferFlushing;
2848
- private onFragBuffered;
2849
- protected onError(event: Events.ERROR, data: ErrorData): void;
2850
- private onSubtitleTracksUpdated;
2851
- private onSubtitleTrackSwitch;
2852
- 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;
2853
2784
  _handleFragmentLoadComplete(fragLoadedData: FragLoadedData): void;
2854
2785
  doTick(): void;
2786
+ protected getMaxBufferLength(mainBufferLength?: number): number;
2855
2787
  protected loadFragment(frag: Fragment, level: Level, targetBufferTime: number): void;
2856
2788
  get mediaBufferTimeRanges(): Bufferable;
2857
2789
  }
@@ -2865,10 +2797,10 @@ export declare class SubtitleTrackController extends BasePlaylistController {
2865
2797
  private currentTrack;
2866
2798
  private selectDefaultTrack;
2867
2799
  private queuedDefaultTrack;
2800
+ private asyncPollTrackChange;
2868
2801
  private useTextTrackPolling;
2869
2802
  private subtitlePollingInterval;
2870
2803
  private _subtitleDisplay;
2871
- private asyncPollTrackChange;
2872
2804
  constructor(hls: Hls);
2873
2805
  destroy(): void;
2874
2806
  get subtitleDisplay(): boolean;
@@ -2953,12 +2885,12 @@ export declare interface SubtitleTrackSwitchData {
2953
2885
  * we are limiting the task execution per call stack to exactly one, but scheduling/post-poning further
2954
2886
  * task processing on the next main loop iteration (also known as "next tick" in the Node/JS runtime lingo).
2955
2887
  */
2956
- declare class TaskLoop extends Logger {
2888
+ declare class TaskLoop {
2957
2889
  private readonly _boundTick;
2958
2890
  private _tickTimer;
2959
2891
  private _tickInterval;
2960
2892
  private _tickCallCount;
2961
- constructor(label: string, logger: ILogger);
2893
+ constructor();
2962
2894
  destroy(): void;
2963
2895
  protected onHandlerDestroying(): void;
2964
2896
  protected onHandlerDestroyed(): void;
@@ -3089,6 +3021,10 @@ export declare interface TrackSet {
3089
3021
  audiovideo?: Track;
3090
3022
  }
3091
3023
 
3024
+ declare interface TrackSwitchedData {
3025
+ id: number;
3026
+ }
3027
+
3092
3028
  declare class TransmuxerInterface {
3093
3029
  error: Error | null;
3094
3030
  private hls;
@@ -3105,7 +3041,7 @@ declare class TransmuxerInterface {
3105
3041
  constructor(hls: Hls, id: PlaylistLevelType, onTransmuxComplete: (transmuxResult: TransmuxerResult) => void, onFlush: (chunkMeta: ChunkMetadata) => void);
3106
3042
  resetWorker(): void;
3107
3043
  destroy(): void;
3108
- 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;
3109
3045
  flush(chunkMeta: ChunkMetadata): void;
3110
3046
  private transmuxerError;
3111
3047
  private handleFlushResult;
@@ -3164,7 +3100,6 @@ declare const VideoRangeValues: readonly ["SDR", "PQ", "HLG"];
3164
3100
  export declare type VideoSelectionOption = {
3165
3101
  preferHDR?: boolean;
3166
3102
  allowedVideoRanges?: Array<VideoRange>;
3167
- videoCodec?: string;
3168
3103
  };
3169
3104
 
3170
3105
  export { }