hls.js 1.5.9 → 1.5.10-0.canary.10320

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 (89) hide show
  1. package/README.md +4 -3
  2. package/dist/hls-demo.js +41 -38
  3. package/dist/hls-demo.js.map +1 -1
  4. package/dist/hls.js +3477 -2194
  5. package/dist/hls.js.d.ts +108 -85
  6. package/dist/hls.js.map +1 -1
  7. package/dist/hls.light.js +2401 -1754
  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 +1989 -1315
  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 +2863 -1557
  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 +35 -35
  20. package/src/config.ts +3 -2
  21. package/src/controller/abr-controller.ts +24 -20
  22. package/src/controller/audio-stream-controller.ts +68 -74
  23. package/src/controller/audio-track-controller.ts +1 -1
  24. package/src/controller/base-playlist-controller.ts +27 -10
  25. package/src/controller/base-stream-controller.ts +160 -38
  26. package/src/controller/buffer-controller.ts +230 -92
  27. package/src/controller/buffer-operation-queue.ts +16 -19
  28. package/src/controller/cap-level-controller.ts +3 -2
  29. package/src/controller/cmcd-controller.ts +51 -14
  30. package/src/controller/content-steering-controller.ts +29 -15
  31. package/src/controller/eme-controller.ts +10 -23
  32. package/src/controller/error-controller.ts +6 -8
  33. package/src/controller/fps-controller.ts +8 -3
  34. package/src/controller/fragment-tracker.ts +15 -11
  35. package/src/controller/gap-controller.ts +43 -16
  36. package/src/controller/id3-track-controller.ts +7 -7
  37. package/src/controller/latency-controller.ts +9 -11
  38. package/src/controller/level-controller.ts +37 -19
  39. package/src/controller/stream-controller.ts +37 -32
  40. package/src/controller/subtitle-stream-controller.ts +28 -40
  41. package/src/controller/subtitle-track-controller.ts +5 -3
  42. package/src/controller/timeline-controller.ts +19 -21
  43. package/src/crypt/aes-crypto.ts +21 -2
  44. package/src/crypt/decrypter-aes-mode.ts +4 -0
  45. package/src/crypt/decrypter.ts +32 -16
  46. package/src/crypt/fast-aes-key.ts +28 -5
  47. package/src/demux/audio/aacdemuxer.ts +2 -2
  48. package/src/demux/audio/ac3-demuxer.ts +4 -3
  49. package/src/demux/audio/adts.ts +9 -4
  50. package/src/demux/audio/base-audio-demuxer.ts +16 -14
  51. package/src/demux/audio/mp3demuxer.ts +4 -3
  52. package/src/demux/audio/mpegaudio.ts +1 -1
  53. package/src/demux/mp4demuxer.ts +7 -7
  54. package/src/demux/sample-aes.ts +2 -0
  55. package/src/demux/transmuxer-interface.ts +4 -12
  56. package/src/demux/transmuxer-worker.ts +4 -4
  57. package/src/demux/transmuxer.ts +16 -3
  58. package/src/demux/tsdemuxer.ts +71 -37
  59. package/src/demux/video/avc-video-parser.ts +208 -119
  60. package/src/demux/video/base-video-parser.ts +147 -18
  61. package/src/demux/video/exp-golomb.ts +0 -208
  62. package/src/demux/video/hevc-video-parser.ts +749 -0
  63. package/src/empty-es.js +5 -0
  64. package/src/events.ts +8 -1
  65. package/src/exports-named.ts +1 -1
  66. package/src/hls.ts +61 -38
  67. package/src/loader/fragment-loader.ts +10 -3
  68. package/src/loader/key-loader.ts +3 -1
  69. package/src/loader/level-key.ts +10 -9
  70. package/src/loader/playlist-loader.ts +4 -5
  71. package/src/remux/mp4-generator.ts +196 -1
  72. package/src/remux/mp4-remuxer.ts +24 -8
  73. package/src/task-loop.ts +5 -2
  74. package/src/types/component-api.ts +3 -1
  75. package/src/types/demuxer.ts +4 -0
  76. package/src/types/events.ts +4 -0
  77. package/src/types/remuxer.ts +1 -1
  78. package/src/utils/buffer-helper.ts +12 -31
  79. package/src/utils/cea-608-parser.ts +1 -3
  80. package/src/utils/codecs.ts +34 -5
  81. package/src/utils/encryption-methods-util.ts +21 -0
  82. package/src/utils/fetch-loader.ts +1 -1
  83. package/src/utils/imsc1-ttml-parser.ts +1 -1
  84. package/src/utils/keysystem-util.ts +1 -6
  85. package/src/utils/logger.ts +58 -23
  86. package/src/utils/mp4-tools.ts +5 -3
  87. package/src/utils/utf8-utils.ts +18 -0
  88. package/src/utils/webvtt-parser.ts +1 -1
  89. package/src/demux/id3.ts +0 -411
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 implements AbrComponentAPI {
9
+ export declare class AbrController extends Logger implements AbrComponentAPI {
10
10
  protected hls: Hls;
11
11
  private lastLevelLoadSec;
12
12
  private lastLoadedFragLevel;
@@ -112,8 +112,8 @@ export declare class AudioStreamController extends BaseStreamController implemen
112
112
  private cachedTrackLoadedData;
113
113
  constructor(hls: Hls, fragmentTracker: FragmentTracker, keyLoader: KeyLoader);
114
114
  protected onHandlerDestroying(): void;
115
- private _registerListeners;
116
- private _unregisterListeners;
115
+ protected registerListeners(): void;
116
+ protected unregisterListeners(): void;
117
117
  onInitPtsFound(event: Events.INIT_PTS_FOUND, { frag, id, initPTS, timescale }: InitPTSFoundData): void;
118
118
  startLoad(startPosition: number): void;
119
119
  doTick(): void;
@@ -121,19 +121,18 @@ export declare class AudioStreamController extends BaseStreamController implemen
121
121
  protected resetLoadingState(): void;
122
122
  protected onTickEnd(): void;
123
123
  private doTickIdle;
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;
124
+ protected onMediaDetaching(): void;
125
+ private onAudioTracksUpdated;
126
+ private onAudioTrackSwitching;
127
+ protected onManifestLoading(): void;
128
+ private onLevelLoaded;
129
+ private onAudioTrackLoaded;
131
130
  _handleFragmentLoadProgress(data: FragLoadedData): void;
132
131
  protected _handleFragmentLoadComplete(fragLoadedData: FragLoadedData): 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;
132
+ private onBufferReset;
133
+ private onBufferCreated;
134
+ private onFragBuffered;
135
+ protected onError(event: Events.ERROR, data: ErrorData): void;
137
136
  private onBufferFlushing;
138
137
  private onBufferFlushed;
139
138
  private _handleTransmuxComplete;
@@ -188,13 +187,11 @@ export declare interface BackBufferData {
188
187
  bufferEnd: number;
189
188
  }
190
189
 
191
- export declare class BasePlaylistController implements NetworkComponentAPI {
190
+ export declare class BasePlaylistController extends Logger implements NetworkComponentAPI {
192
191
  protected hls: Hls;
193
192
  protected timer: number;
194
193
  protected requestScheduled: number;
195
194
  protected canLoad: boolean;
196
- protected log: (msg: any) => void;
197
- protected warn: (msg: any) => void;
198
195
  constructor(hls: Hls, logPrefix: string);
199
196
  destroy(): void;
200
197
  protected clearTimer(): void;
@@ -249,22 +246,25 @@ export declare class BaseStreamController extends TaskLoop implements NetworkCom
249
246
  protected startFragRequested: boolean;
250
247
  protected decrypter: Decrypter;
251
248
  protected initPTS: RationalTimestamp[];
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;
249
+ protected buffering: boolean;
250
+ private loadingParts;
257
251
  constructor(hls: Hls, fragmentTracker: FragmentTracker, keyLoader: KeyLoader, logPrefix: string, playlistType: PlaylistLevelType);
252
+ protected registerListeners(): void;
253
+ protected unregisterListeners(): void;
258
254
  protected doTick(): void;
259
255
  protected onTickEnd(): void;
260
256
  startLoad(startPosition: number): void;
261
257
  stopLoad(): void;
258
+ pauseBuffering(): void;
259
+ resumeBuffering(): void;
262
260
  protected _streamEnded(bufferInfo: BufferInfo, levelDetails: LevelDetails): boolean;
263
261
  protected getLevelDetails(): LevelDetails | undefined;
264
262
  protected onMediaAttached(event: Events.MEDIA_ATTACHED, data: MediaAttachedData): void;
265
263
  protected onMediaDetaching(): void;
266
- protected onMediaSeeking(): void;
267
- protected onMediaEnded(): void;
264
+ protected onManifestLoading(): void;
265
+ protected onError(event: Events.ERROR, data: ErrorData): void;
266
+ protected onMediaSeeking: () => void;
267
+ protected onMediaEnded: () => void;
268
268
  protected onManifestLoaded(event: Events.MANIFEST_LOADED, data: ManifestLoadedData): void;
269
269
  protected onHandlerDestroying(): void;
270
270
  protected onHandlerDestroyed(): void;
@@ -284,6 +284,7 @@ export declare class BaseStreamController extends TaskLoop implements NetworkCom
284
284
  private doFragPartsLoad;
285
285
  private handleFragLoadError;
286
286
  protected _handleTransmuxerFlush(chunkMeta: ChunkMetadata): void;
287
+ private shouldLoadParts;
287
288
  protected getCurrentContext(chunkMeta: ChunkMetadata): {
288
289
  frag: Fragment;
289
290
  part: Part | null;
@@ -353,17 +354,20 @@ export declare interface BufferCodecsData {
353
354
  audio?: Track;
354
355
  }
355
356
 
356
- export declare class BufferController implements ComponentAPI {
357
+ export declare class BufferController extends Logger implements ComponentAPI {
357
358
  private details;
358
359
  private _objectUrl;
359
360
  private operationQueue;
360
361
  private listeners;
361
362
  private hls;
363
+ private fragmentTracker;
362
364
  bufferCodecEventsExpected: number;
363
365
  private _bufferCodecEventsTotal;
364
366
  media: HTMLMediaElement | null;
365
367
  mediaSource: MediaSource | null;
366
368
  private lastMpegAudioChunk;
369
+ private blockedAudioAppend;
370
+ private lastVideoAppendEnd;
367
371
  private appendSource;
368
372
  appendErrors: {
369
373
  audio: number;
@@ -373,10 +377,7 @@ export declare class BufferController implements ComponentAPI {
373
377
  tracks: TrackSet;
374
378
  pendingTracks: TrackSet;
375
379
  sourceBuffer: SourceBuffers;
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);
380
+ constructor(hls: Hls, fragmentTracker: FragmentTracker);
380
381
  hasSourceTypes(): boolean;
381
382
  destroy(): void;
382
383
  protected registerListeners(): void;
@@ -391,8 +392,11 @@ export declare class BufferController implements ComponentAPI {
391
392
  protected onBufferReset(): void;
392
393
  private resetBuffer;
393
394
  protected onBufferCodecs(event: Events.BUFFER_CODECS, data: BufferCodecsData): void;
394
- protected appendChangeType(type: any, mimeType: any): void;
395
+ protected appendChangeType(type: SourceBufferName, mimeType: string): void;
396
+ private blockAudio;
397
+ private unblockAudio;
395
398
  protected onBufferAppending(event: Events.BUFFER_APPENDING, eventData: BufferAppendingData): void;
399
+ private getFlushOp;
396
400
  protected onBufferFlushing(event: Events.BUFFER_FLUSHING, data: BufferFlushingData): void;
397
401
  protected onFragParsed(event: Events.FRAG_PARSED, data: FragParsedData): void;
398
402
  private onFragChanged;
@@ -406,8 +410,8 @@ export declare class BufferController implements ComponentAPI {
406
410
  * 'liveDurationInfinity` is set to `true`
407
411
  * More details: https://github.com/video-dev/hls.js/issues/355
408
412
  */
409
- private updateMediaElementDuration;
410
- updateSeekableRange(levelDetails: any): void;
413
+ private getDurationAndRange;
414
+ private updateMediaSource;
411
415
  protected checkPendingTracks(): void;
412
416
  protected createSourceBuffers(tracks: TrackSet): void;
413
417
  private _onMediaSourceOpen;
@@ -602,6 +606,8 @@ export declare class CMCDController implements ComponentAPI {
602
606
  * Apply CMCD data to a segment request
603
607
  */
604
608
  private applyFragmentData;
609
+ private getNextFrag;
610
+ private getNextPart;
605
611
  /**
606
612
  * The CMCD object type.
607
613
  */
@@ -635,13 +641,12 @@ export declare interface ComponentAPI {
635
641
  destroy(): void;
636
642
  }
637
643
 
638
- export declare class ContentSteeringController implements NetworkComponentAPI {
644
+ export declare class ContentSteeringController extends Logger implements NetworkComponentAPI {
639
645
  private readonly hls;
640
- private log;
641
646
  private loader;
642
647
  private uri;
643
648
  private pathwayId;
644
- private pathwayPriority;
649
+ private _pathwayPriority;
645
650
  private timeToLoad;
646
651
  private reloadTimer;
647
652
  private updated;
@@ -654,6 +659,9 @@ export declare class ContentSteeringController implements NetworkComponentAPI {
654
659
  constructor(hls: Hls);
655
660
  private registerListeners;
656
661
  private unregisterListeners;
662
+ pathways(): string[];
663
+ get pathwayPriority(): string[] | null;
664
+ set pathwayPriority(pathwayPriority: string[]);
657
665
  startLoad(): void;
658
666
  stopLoad(): void;
659
667
  clearTimeout(): void;
@@ -727,6 +735,7 @@ declare class Decrypter {
727
735
  private currentIV;
728
736
  private currentResult;
729
737
  private useSoftware;
738
+ private enableSoftwareAES;
730
739
  constructor(config: HlsConfig, { removePKCS7Padding }?: {
731
740
  removePKCS7Padding?: boolean | undefined;
732
741
  });
@@ -734,14 +743,19 @@ declare class Decrypter {
734
743
  isSync(): boolean;
735
744
  flush(): Uint8Array | null;
736
745
  reset(): void;
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>;
746
+ decrypt(data: Uint8Array | ArrayBuffer, key: ArrayBuffer, iv: ArrayBuffer, aesMode: DecrypterAesMode): Promise<ArrayBuffer>;
747
+ softwareDecrypt(data: Uint8Array, key: ArrayBuffer, iv: ArrayBuffer, aesMode: DecrypterAesMode): ArrayBuffer | null;
748
+ webCryptoDecrypt(data: Uint8Array, key: ArrayBuffer, iv: ArrayBuffer, aesMode: DecrypterAesMode): Promise<ArrayBuffer>;
740
749
  private onWebCryptoError;
741
750
  private getValidChunk;
742
751
  private logOnce;
743
752
  }
744
753
 
754
+ declare const enum DecrypterAesMode {
755
+ cbc = 0,
756
+ ctr = 1
757
+ }
758
+
745
759
  declare type DRMSystemConfiguration = {
746
760
  licenseUrl: string;
747
761
  serverCertificateUrl?: string;
@@ -787,7 +801,7 @@ export declare const enum ElementaryStreamTypes {
787
801
  * @class
788
802
  * @constructor
789
803
  */
790
- export declare class EMEController implements ComponentAPI {
804
+ export declare class EMEController extends Logger implements ComponentAPI {
791
805
  static CDMCleanupPromise: Promise<void> | void;
792
806
  private readonly hls;
793
807
  private readonly config;
@@ -798,12 +812,6 @@ export declare class EMEController implements ComponentAPI {
798
812
  private mediaKeySessions;
799
813
  private keyIdToKeySessionPromise;
800
814
  private setMediaKeysQueue;
801
- private onMediaEncrypted;
802
- private onWaitingForKey;
803
- private debug;
804
- private log;
805
- private warn;
806
- private error;
807
815
  constructor(hls: Hls);
808
816
  destroy(): void;
809
817
  private registerListeners;
@@ -824,8 +832,8 @@ export declare class EMEController implements ComponentAPI {
824
832
  private handleError;
825
833
  private getKeySystemForKeyPromise;
826
834
  private getKeySystemSelectionPromise;
827
- private _onMediaEncrypted;
828
- private _onWaitingForKey;
835
+ private onMediaEncrypted;
836
+ private onWaitingForKey;
829
837
  private attemptSetMediaKeys;
830
838
  private generateRequestWithPreferredKeySession;
831
839
  private onKeyStatusChange;
@@ -859,13 +867,10 @@ export declare const enum ErrorActionFlags {
859
867
  SwitchToSDR = 4
860
868
  }
861
869
 
862
- export declare class ErrorController implements NetworkComponentAPI {
870
+ export declare class ErrorController extends Logger implements NetworkComponentAPI {
863
871
  private readonly hls;
864
872
  private playlistError;
865
873
  private penalizedRenditions;
866
- private log;
867
- private warn;
868
- private error;
869
874
  constructor(hls: Hls);
870
875
  private registerListeners;
871
876
  private unregisterListeners;
@@ -975,6 +980,7 @@ export declare enum Events {
975
980
  MEDIA_ATTACHED = "hlsMediaAttached",
976
981
  MEDIA_DETACHING = "hlsMediaDetaching",
977
982
  MEDIA_DETACHED = "hlsMediaDetached",
983
+ MEDIA_ENDED = "hlsMediaEnded",
978
984
  BUFFER_RESET = "hlsBufferReset",
979
985
  BUFFER_CODECS = "hlsBufferCodecs",
980
986
  BUFFER_CREATED = "hlsBufferCreated",
@@ -1068,6 +1074,7 @@ export declare class FPSController implements ComponentAPI {
1068
1074
  protected unregisterListeners(): void;
1069
1075
  destroy(): void;
1070
1076
  protected onMediaAttaching(event: Events.MEDIA_ATTACHING, data: MediaAttachingData): void;
1077
+ private onMediaDetaching;
1071
1078
  checkFPS(video: HTMLVideoElement, decodedFrames: number, droppedFrames: number): void;
1072
1079
  checkFPSInterval(): void;
1073
1080
  }
@@ -1250,6 +1257,7 @@ declare class FragmentTracker implements ComponentAPI {
1250
1257
  * If not found any Fragment, return null
1251
1258
  */
1252
1259
  getBufferedFrag(position: number, levelType: PlaylistLevelType): Fragment | null;
1260
+ getFragAtPos(position: number, levelType: PlaylistLevelType, buffered?: boolean): Fragment | null;
1253
1261
  /**
1254
1262
  * Partial fragments effected by coded frame eviction will be removed
1255
1263
  * The browser will unload parts of the buffer to free up memory for new buffer data
@@ -1321,9 +1329,12 @@ declare class Hls implements HlsEventEmitter {
1321
1329
  * The configuration object provided on player instantiation.
1322
1330
  */
1323
1331
  readonly userConfig: Partial<HlsConfig>;
1332
+ /**
1333
+ * The logger functions used by this player instance, configured on player instantiation.
1334
+ */
1335
+ readonly logger: ILogger;
1324
1336
  private coreComponents;
1325
1337
  private networkControllers;
1326
- private started;
1327
1338
  private _emitter;
1328
1339
  private _autoLevelCapping;
1329
1340
  private _maxHdcpLevel;
@@ -1410,11 +1421,11 @@ declare class Hls implements HlsEventEmitter {
1410
1421
  */
1411
1422
  stopLoad(): void;
1412
1423
  /**
1413
- * Resumes stream controller segment loading if previously started.
1424
+ * Resumes stream controller segment loading after `pauseBuffering` has been called.
1414
1425
  */
1415
1426
  resumeBuffering(): void;
1416
1427
  /**
1417
- * Stops stream controller segment loading without changing 'started' state like stopLoad().
1428
+ * Prevents stream controller from loading new segments until `resumeBuffering` is called.
1418
1429
  * This allows for media buffering to be paused without interupting playlist loading.
1419
1430
  */
1420
1431
  pauseBuffering(): void;
@@ -1559,6 +1570,7 @@ declare class Hls implements HlsEventEmitter {
1559
1570
  */
1560
1571
  get playingDate(): Date | null;
1561
1572
  get mainForwardBufferInfo(): BufferInfo | null;
1573
+ get maxBufferLength(): number;
1562
1574
  /**
1563
1575
  * Find and select the best matching audio track, making a level switch when a Group change is necessary.
1564
1576
  * Updates `hls.config.audioPreference`. Returns the selected track, or null when no matching track is found.
@@ -1646,6 +1658,11 @@ declare class Hls implements HlsEventEmitter {
1646
1658
  * set to true when startLoad is called before MANIFEST_PARSED event
1647
1659
  */
1648
1660
  get forceStartLoad(): boolean;
1661
+ /**
1662
+ * ContentSteering pathwayPriority getter/setter
1663
+ */
1664
+ get pathwayPriority(): string[] | null;
1665
+ set pathwayPriority(pathwayPriority: string[]);
1649
1666
  }
1650
1667
  export default Hls;
1651
1668
 
@@ -1706,6 +1723,7 @@ export declare interface HlsListeners {
1706
1723
  [Events.MEDIA_ATTACHED]: (event: Events.MEDIA_ATTACHED, data: MediaAttachedData) => void;
1707
1724
  [Events.MEDIA_DETACHING]: (event: Events.MEDIA_DETACHING) => void;
1708
1725
  [Events.MEDIA_DETACHED]: (event: Events.MEDIA_DETACHED) => void;
1726
+ [Events.MEDIA_ENDED]: (event: Events.MEDIA_ENDED, data: MediaEndedData) => void;
1709
1727
  [Events.BUFFER_RESET]: (event: Events.BUFFER_RESET) => void;
1710
1728
  [Events.BUFFER_CODECS]: (event: Events.BUFFER_CODECS, data: BufferCodecsData) => void;
1711
1729
  [Events.BUFFER_CREATED]: (event: Events.BUFFER_CREATED, data: BufferCreatedData) => void;
@@ -2257,6 +2275,16 @@ export declare class LoadStats implements LoaderStats {
2257
2275
  buffering: HlsProgressivePerformanceTiming;
2258
2276
  }
2259
2277
 
2278
+ export declare class Logger implements ILogger {
2279
+ trace: ILogFunction;
2280
+ debug: ILogFunction;
2281
+ log: ILogFunction;
2282
+ warn: ILogFunction;
2283
+ info: ILogFunction;
2284
+ error: ILogFunction;
2285
+ constructor(label: string, logger: ILogger);
2286
+ }
2287
+
2260
2288
  export declare type MainPlaylistType = AudioPlaylistType | 'VIDEO';
2261
2289
 
2262
2290
  export declare interface ManifestLoadedData {
@@ -2332,6 +2360,10 @@ export declare type MediaDecodingInfo = {
2332
2360
  error?: Error;
2333
2361
  };
2334
2362
 
2363
+ export declare interface MediaEndedData {
2364
+ stalled: boolean;
2365
+ }
2366
+
2335
2367
  export declare type MediaKeyFunc = (keySystem: KeySystems, supportedConfigurations: MediaKeySystemConfiguration[]) => Promise<MediaKeySystemAccess>;
2336
2368
 
2337
2369
  export declare interface MediaKeySessionContext {
@@ -2401,6 +2433,8 @@ export declare type MP4RemuxerConfig = {
2401
2433
  export declare interface NetworkComponentAPI extends ComponentAPI {
2402
2434
  startLoad(startPosition: number): void;
2403
2435
  stopLoad(): void;
2436
+ pauseBuffering?(): void;
2437
+ resumeBuffering?(): void;
2404
2438
  }
2405
2439
 
2406
2440
  export declare const enum NetworkErrorAction {
@@ -2640,16 +2674,14 @@ declare class StreamController extends BaseStreamController implements NetworkCo
2640
2674
  private altAudio;
2641
2675
  private audioOnly;
2642
2676
  private fragPlaying;
2643
- private onvplaying;
2644
- private onvseeked;
2645
2677
  private fragLastKbps;
2646
2678
  private couldBacktrack;
2647
2679
  private backtrackFragment;
2648
2680
  private audioCodecSwitch;
2649
2681
  private videoBuffer;
2650
2682
  constructor(hls: Hls, fragmentTracker: FragmentTracker, keyLoader: KeyLoader);
2651
- private _registerListeners;
2652
- protected _unregisterListeners(): void;
2683
+ protected registerListeners(): void;
2684
+ protected unregisterListeners(): void;
2653
2685
  protected onHandlerDestroying(): void;
2654
2686
  startLoad(startPosition: number): void;
2655
2687
  stopLoad(): void;
@@ -2673,7 +2705,7 @@ declare class StreamController extends BaseStreamController implements NetworkCo
2673
2705
  protected onMediaDetaching(): void;
2674
2706
  private onMediaPlaying;
2675
2707
  private onMediaSeeked;
2676
- private onManifestLoading;
2708
+ protected onManifestLoading(): void;
2677
2709
  private onManifestParsed;
2678
2710
  private onLevelLoading;
2679
2711
  private onLevelLoaded;
@@ -2682,7 +2714,7 @@ declare class StreamController extends BaseStreamController implements NetworkCo
2682
2714
  private onAudioTrackSwitched;
2683
2715
  private onBufferCreated;
2684
2716
  private onFragBuffered;
2685
- private onError;
2717
+ protected onError(event: Events.ERROR, data: ErrorData): void;
2686
2718
  private checkBuffer;
2687
2719
  private onFragLoadEmergencyAborted;
2688
2720
  private onBufferFlushed;
@@ -2697,6 +2729,7 @@ declare class StreamController extends BaseStreamController implements NetworkCo
2697
2729
  private _handleTransmuxComplete;
2698
2730
  private _bufferInitSegment;
2699
2731
  getMainFwdBufferInfo(): BufferInfo | null;
2732
+ get maxBufferLength(): number;
2700
2733
  private backtrack;
2701
2734
  private checkFragmentChanged;
2702
2735
  get nextLevel(): number;
@@ -2739,11 +2772,6 @@ declare class StyledUnicodeChar {
2739
2772
  isEmpty(): boolean;
2740
2773
  }
2741
2774
 
2742
- declare interface SubtitleFragProcessed {
2743
- success: boolean;
2744
- frag: Fragment;
2745
- }
2746
-
2747
2775
  export declare interface SubtitleFragProcessedData {
2748
2776
  success: boolean;
2749
2777
  frag: Fragment;
@@ -2768,22 +2796,21 @@ export declare class SubtitleStreamController extends BaseStreamController imple
2768
2796
  private mainDetails;
2769
2797
  constructor(hls: Hls, fragmentTracker: FragmentTracker, keyLoader: KeyLoader);
2770
2798
  protected onHandlerDestroying(): void;
2771
- private _registerListeners;
2772
- private _unregisterListeners;
2799
+ protected registerListeners(): void;
2800
+ protected unregisterListeners(): void;
2773
2801
  startLoad(startPosition: number): void;
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;
2802
+ protected onManifestLoading(): void;
2803
+ protected onMediaDetaching(): void;
2804
+ private onLevelLoaded;
2805
+ private onSubtitleFragProcessed;
2806
+ private onBufferFlushing;
2807
+ private onFragBuffered;
2808
+ protected onError(event: Events.ERROR, data: ErrorData): void;
2809
+ private onSubtitleTracksUpdated;
2810
+ private onSubtitleTrackSwitch;
2811
+ private onSubtitleTrackLoaded;
2784
2812
  _handleFragmentLoadComplete(fragLoadedData: FragLoadedData): void;
2785
2813
  doTick(): void;
2786
- protected getMaxBufferLength(mainBufferLength?: number): number;
2787
2814
  protected loadFragment(frag: Fragment, level: Level, targetBufferTime: number): void;
2788
2815
  get mediaBufferTimeRanges(): Bufferable;
2789
2816
  }
@@ -2797,10 +2824,10 @@ export declare class SubtitleTrackController extends BasePlaylistController {
2797
2824
  private currentTrack;
2798
2825
  private selectDefaultTrack;
2799
2826
  private queuedDefaultTrack;
2800
- private asyncPollTrackChange;
2801
2827
  private useTextTrackPolling;
2802
2828
  private subtitlePollingInterval;
2803
2829
  private _subtitleDisplay;
2830
+ private asyncPollTrackChange;
2804
2831
  constructor(hls: Hls);
2805
2832
  destroy(): void;
2806
2833
  get subtitleDisplay(): boolean;
@@ -2885,12 +2912,12 @@ export declare interface SubtitleTrackSwitchData {
2885
2912
  * we are limiting the task execution per call stack to exactly one, but scheduling/post-poning further
2886
2913
  * task processing on the next main loop iteration (also known as "next tick" in the Node/JS runtime lingo).
2887
2914
  */
2888
- declare class TaskLoop {
2915
+ declare class TaskLoop extends Logger {
2889
2916
  private readonly _boundTick;
2890
2917
  private _tickTimer;
2891
2918
  private _tickInterval;
2892
2919
  private _tickCallCount;
2893
- constructor();
2920
+ constructor(label: string, logger: ILogger);
2894
2921
  destroy(): void;
2895
2922
  protected onHandlerDestroying(): void;
2896
2923
  protected onHandlerDestroyed(): void;
@@ -3021,10 +3048,6 @@ export declare interface TrackSet {
3021
3048
  audiovideo?: Track;
3022
3049
  }
3023
3050
 
3024
- declare interface TrackSwitchedData {
3025
- id: number;
3026
- }
3027
-
3028
3051
  declare class TransmuxerInterface {
3029
3052
  error: Error | null;
3030
3053
  private hls;