hls.js 1.5.6-0.canary.9999 → 1.5.6

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 (69) hide show
  1. package/README.md +0 -1
  2. package/dist/hls-demo.js +0 -10
  3. package/dist/hls-demo.js.map +1 -1
  4. package/dist/hls.js +1169 -2069
  5. package/dist/hls.js.d.ts +51 -65
  6. package/dist/hls.js.map +1 -1
  7. package/dist/hls.light.js +875 -1158
  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 +709 -993
  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 +869 -1756
  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 +20 -20
  20. package/src/config.ts +2 -3
  21. package/src/controller/abr-controller.ts +40 -31
  22. package/src/controller/audio-stream-controller.ts +16 -15
  23. package/src/controller/audio-track-controller.ts +1 -1
  24. package/src/controller/base-playlist-controller.ts +8 -20
  25. package/src/controller/base-stream-controller.ts +33 -149
  26. package/src/controller/buffer-controller.ts +11 -11
  27. package/src/controller/cap-level-controller.ts +2 -1
  28. package/src/controller/cmcd-controller.ts +6 -27
  29. package/src/controller/content-steering-controller.ts +6 -8
  30. package/src/controller/eme-controller.ts +22 -9
  31. package/src/controller/error-controller.ts +8 -6
  32. package/src/controller/fps-controller.ts +3 -2
  33. package/src/controller/gap-controller.ts +16 -43
  34. package/src/controller/latency-controller.ts +11 -9
  35. package/src/controller/level-controller.ts +18 -12
  36. package/src/controller/stream-controller.ts +34 -27
  37. package/src/controller/subtitle-stream-controller.ts +14 -13
  38. package/src/controller/subtitle-track-controller.ts +3 -5
  39. package/src/controller/timeline-controller.ts +30 -23
  40. package/src/crypt/aes-crypto.ts +2 -21
  41. package/src/crypt/decrypter.ts +18 -32
  42. package/src/crypt/fast-aes-key.ts +5 -24
  43. package/src/demux/audio/adts.ts +4 -9
  44. package/src/demux/sample-aes.ts +0 -2
  45. package/src/demux/transmuxer-interface.ts +12 -4
  46. package/src/demux/transmuxer-worker.ts +4 -4
  47. package/src/demux/transmuxer.ts +3 -16
  48. package/src/demux/tsdemuxer.ts +37 -71
  49. package/src/demux/video/avc-video-parser.ts +119 -208
  50. package/src/demux/video/base-video-parser.ts +2 -134
  51. package/src/demux/video/exp-golomb.ts +208 -0
  52. package/src/events.ts +0 -7
  53. package/src/hls.ts +34 -42
  54. package/src/loader/fragment-loader.ts +2 -9
  55. package/src/loader/key-loader.ts +0 -2
  56. package/src/loader/level-key.ts +9 -10
  57. package/src/loader/playlist-loader.ts +5 -4
  58. package/src/remux/mp4-generator.ts +1 -196
  59. package/src/remux/mp4-remuxer.ts +7 -23
  60. package/src/task-loop.ts +2 -5
  61. package/src/types/component-api.ts +0 -2
  62. package/src/types/demuxer.ts +0 -3
  63. package/src/types/events.ts +0 -4
  64. package/src/utils/codecs.ts +4 -33
  65. package/src/utils/logger.ts +24 -54
  66. package/src/utils/mp4-tools.ts +6 -4
  67. package/src/crypt/decrypter-aes-mode.ts +0 -4
  68. package/src/demux/video/hevc-video-parser.ts +0 -746
  69. package/src/utils/encryption-methods-util.ts +0 -21
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;
@@ -44,6 +44,7 @@ export declare class AbrController extends Logger implements AbrComponentAPI {
44
44
  get nextAutoLevel(): number;
45
45
  private getAutoLevelKey;
46
46
  private getNextABRAutoLevel;
47
+ private getStarvationDelay;
47
48
  private getBwEstimate;
48
49
  private findBestLevel;
49
50
  set nextAutoLevel(nextLevel: number);
@@ -111,8 +112,8 @@ export declare class AudioStreamController extends BaseStreamController implemen
111
112
  private cachedTrackLoadedData;
112
113
  constructor(hls: Hls, fragmentTracker: FragmentTracker, keyLoader: KeyLoader);
113
114
  protected onHandlerDestroying(): void;
114
- protected registerListeners(): void;
115
- protected unregisterListeners(): void;
115
+ private _registerListeners;
116
+ private _unregisterListeners;
116
117
  onInitPtsFound(event: Events.INIT_PTS_FOUND, { frag, id, initPTS, timescale }: InitPTSFoundData): void;
117
118
  startLoad(startPosition: number): void;
118
119
  doTick(): void;
@@ -132,7 +133,7 @@ export declare class AudioStreamController extends BaseStreamController implemen
132
133
  onBufferReset(): void;
133
134
  onBufferCreated(event: Events.BUFFER_CREATED, data: BufferCreatedData): void;
134
135
  onFragBuffered(event: Events.FRAG_BUFFERED, data: FragBufferedData): void;
135
- protected onError(event: Events.ERROR, data: ErrorData): void;
136
+ private onError;
136
137
  private onBufferFlushing;
137
138
  private onBufferFlushed;
138
139
  private _handleTransmuxComplete;
@@ -187,11 +188,13 @@ export declare interface BackBufferData {
187
188
  bufferEnd: number;
188
189
  }
189
190
 
190
- export declare class BasePlaylistController extends Logger implements NetworkComponentAPI {
191
+ export declare class BasePlaylistController implements NetworkComponentAPI {
191
192
  protected hls: Hls;
192
193
  protected timer: number;
193
194
  protected requestScheduled: number;
194
195
  protected canLoad: boolean;
196
+ protected log: (msg: any) => void;
197
+ protected warn: (msg: any) => void;
195
198
  constructor(hls: Hls, logPrefix: string);
196
199
  destroy(): void;
197
200
  protected clearTimer(): void;
@@ -246,25 +249,22 @@ export declare class BaseStreamController extends TaskLoop implements NetworkCom
246
249
  protected startFragRequested: boolean;
247
250
  protected decrypter: Decrypter;
248
251
  protected initPTS: RationalTimestamp[];
249
- protected buffering: boolean;
250
- private loadingParts;
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;
251
257
  constructor(hls: Hls, fragmentTracker: FragmentTracker, keyLoader: KeyLoader, logPrefix: string, playlistType: PlaylistLevelType);
252
- protected registerListeners(): void;
253
- protected unregisterListeners(): void;
254
258
  protected doTick(): void;
255
259
  protected onTickEnd(): void;
256
260
  startLoad(startPosition: number): void;
257
261
  stopLoad(): void;
258
- pauseBuffering(): void;
259
- resumeBuffering(): void;
260
262
  protected _streamEnded(bufferInfo: BufferInfo, levelDetails: LevelDetails): boolean;
261
263
  protected getLevelDetails(): LevelDetails | undefined;
262
264
  protected onMediaAttached(event: Events.MEDIA_ATTACHED, data: MediaAttachedData): void;
263
265
  protected onMediaDetaching(): void;
264
- protected onManifestLoading(): void;
265
- protected onError(event: Events.ERROR, data: ErrorData): void;
266
- protected onMediaSeeking: () => void;
267
- protected onMediaEnded: () => 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,7 +284,6 @@ 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;
288
287
  protected getCurrentContext(chunkMeta: ChunkMetadata): {
289
288
  frag: Fragment;
290
289
  part: Part | null;
@@ -354,7 +353,7 @@ export declare interface BufferCodecsData {
354
353
  audio?: Track;
355
354
  }
356
355
 
357
- export declare class BufferController extends Logger implements ComponentAPI {
356
+ export declare class BufferController implements ComponentAPI {
358
357
  private details;
359
358
  private _objectUrl;
360
359
  private operationQueue;
@@ -374,6 +373,9 @@ export declare class BufferController extends Logger implements ComponentAPI {
374
373
  tracks: TrackSet;
375
374
  pendingTracks: TrackSet;
376
375
  sourceBuffer: SourceBuffers;
376
+ protected log: (msg: any) => void;
377
+ protected warn: (msg: any, obj?: any) => void;
378
+ protected error: (msg: any, obj?: any) => void;
377
379
  constructor(hls: Hls);
378
380
  hasSourceTypes(): boolean;
379
381
  destroy(): void;
@@ -600,7 +602,6 @@ export declare class CMCDController implements ComponentAPI {
600
602
  * Apply CMCD data to a segment request
601
603
  */
602
604
  private applyFragmentData;
603
- private getNextFrag;
604
605
  /**
605
606
  * The CMCD object type.
606
607
  */
@@ -634,8 +635,9 @@ export declare interface ComponentAPI {
634
635
  destroy(): void;
635
636
  }
636
637
 
637
- export declare class ContentSteeringController extends Logger implements NetworkComponentAPI {
638
+ export declare class ContentSteeringController implements NetworkComponentAPI {
638
639
  private readonly hls;
640
+ private log;
639
641
  private loader;
640
642
  private uri;
641
643
  private pathwayId;
@@ -725,7 +727,6 @@ declare class Decrypter {
725
727
  private currentIV;
726
728
  private currentResult;
727
729
  private useSoftware;
728
- private enableSoftwareAES;
729
730
  constructor(config: HlsConfig, { removePKCS7Padding }?: {
730
731
  removePKCS7Padding?: boolean | undefined;
731
732
  });
@@ -733,19 +734,14 @@ declare class Decrypter {
733
734
  isSync(): boolean;
734
735
  flush(): Uint8Array | null;
735
736
  reset(): void;
736
- decrypt(data: Uint8Array | ArrayBuffer, key: ArrayBuffer, iv: ArrayBuffer, aesMode: DecrypterAesMode): Promise<ArrayBuffer>;
737
- softwareDecrypt(data: Uint8Array, key: ArrayBuffer, iv: ArrayBuffer, aesMode: DecrypterAesMode): ArrayBuffer | null;
738
- 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>;
739
740
  private onWebCryptoError;
740
741
  private getValidChunk;
741
742
  private logOnce;
742
743
  }
743
744
 
744
- declare const enum DecrypterAesMode {
745
- cbc = 0,
746
- ctr = 1
747
- }
748
-
749
745
  declare type DRMSystemConfiguration = {
750
746
  licenseUrl: string;
751
747
  serverCertificateUrl?: string;
@@ -791,7 +787,7 @@ export declare const enum ElementaryStreamTypes {
791
787
  * @class
792
788
  * @constructor
793
789
  */
794
- export declare class EMEController extends Logger implements ComponentAPI {
790
+ export declare class EMEController implements ComponentAPI {
795
791
  static CDMCleanupPromise: Promise<void> | void;
796
792
  private readonly hls;
797
793
  private readonly config;
@@ -802,6 +798,12 @@ export declare class EMEController extends Logger implements ComponentAPI {
802
798
  private mediaKeySessions;
803
799
  private keyIdToKeySessionPromise;
804
800
  private setMediaKeysQueue;
801
+ private onMediaEncrypted;
802
+ private onWaitingForKey;
803
+ private debug;
804
+ private log;
805
+ private warn;
806
+ private error;
805
807
  constructor(hls: Hls);
806
808
  destroy(): void;
807
809
  private registerListeners;
@@ -822,8 +824,8 @@ export declare class EMEController extends Logger implements ComponentAPI {
822
824
  private handleError;
823
825
  private getKeySystemForKeyPromise;
824
826
  private getKeySystemSelectionPromise;
825
- private onMediaEncrypted;
826
- private onWaitingForKey;
827
+ private _onMediaEncrypted;
828
+ private _onWaitingForKey;
827
829
  private attemptSetMediaKeys;
828
830
  private generateRequestWithPreferredKeySession;
829
831
  private onKeyStatusChange;
@@ -857,10 +859,13 @@ export declare const enum ErrorActionFlags {
857
859
  SwitchToSDR = 4
858
860
  }
859
861
 
860
- export declare class ErrorController extends Logger implements NetworkComponentAPI {
862
+ export declare class ErrorController implements NetworkComponentAPI {
861
863
  private readonly hls;
862
864
  private playlistError;
863
865
  private penalizedRenditions;
866
+ private log;
867
+ private warn;
868
+ private error;
864
869
  constructor(hls: Hls);
865
870
  private registerListeners;
866
871
  private unregisterListeners;
@@ -970,7 +975,6 @@ export declare enum Events {
970
975
  MEDIA_ATTACHED = "hlsMediaAttached",
971
976
  MEDIA_DETACHING = "hlsMediaDetaching",
972
977
  MEDIA_DETACHED = "hlsMediaDetached",
973
- MEDIA_ENDED = "hlsMediaEnded",
974
978
  BUFFER_RESET = "hlsBufferReset",
975
979
  BUFFER_CODECS = "hlsBufferCodecs",
976
980
  BUFFER_CREATED = "hlsBufferCreated",
@@ -1317,12 +1321,9 @@ declare class Hls implements HlsEventEmitter {
1317
1321
  * The configuration object provided on player instantiation.
1318
1322
  */
1319
1323
  readonly userConfig: Partial<HlsConfig>;
1320
- /**
1321
- * The logger functions used by this player instance, configured on player instantiation.
1322
- */
1323
- readonly logger: ILogger;
1324
1324
  private coreComponents;
1325
1325
  private networkControllers;
1326
+ private started;
1326
1327
  private _emitter;
1327
1328
  private _autoLevelCapping;
1328
1329
  private _maxHdcpLevel;
@@ -1409,11 +1410,11 @@ declare class Hls implements HlsEventEmitter {
1409
1410
  */
1410
1411
  stopLoad(): void;
1411
1412
  /**
1412
- * Resumes stream controller segment loading after `pauseBuffering` has been called.
1413
+ * Resumes stream controller segment loading if previously started.
1413
1414
  */
1414
1415
  resumeBuffering(): void;
1415
1416
  /**
1416
- * Prevents stream controller from loading new segments until `resumeBuffering` is called.
1417
+ * Stops stream controller segment loading without changing 'started' state like stopLoad().
1417
1418
  * This allows for media buffering to be paused without interupting playlist loading.
1418
1419
  */
1419
1420
  pauseBuffering(): void;
@@ -1705,7 +1706,6 @@ export declare interface HlsListeners {
1705
1706
  [Events.MEDIA_ATTACHED]: (event: Events.MEDIA_ATTACHED, data: MediaAttachedData) => void;
1706
1707
  [Events.MEDIA_DETACHING]: (event: Events.MEDIA_DETACHING) => void;
1707
1708
  [Events.MEDIA_DETACHED]: (event: Events.MEDIA_DETACHED) => void;
1708
- [Events.MEDIA_ENDED]: (event: Events.MEDIA_ENDED, data: MediaEndedData) => void;
1709
1709
  [Events.BUFFER_RESET]: (event: Events.BUFFER_RESET) => void;
1710
1710
  [Events.BUFFER_CODECS]: (event: Events.BUFFER_CODECS, data: BufferCodecsData) => void;
1711
1711
  [Events.BUFFER_CREATED]: (event: Events.BUFFER_CREATED, data: BufferCreatedData) => void;
@@ -2257,16 +2257,6 @@ export declare class LoadStats implements LoaderStats {
2257
2257
  buffering: HlsProgressivePerformanceTiming;
2258
2258
  }
2259
2259
 
2260
- export declare class Logger implements ILogger {
2261
- trace: ILogFunction;
2262
- debug: ILogFunction;
2263
- log: ILogFunction;
2264
- warn: ILogFunction;
2265
- info: ILogFunction;
2266
- error: ILogFunction;
2267
- constructor(label: string, logger: ILogger);
2268
- }
2269
-
2270
2260
  export declare type MainPlaylistType = AudioPlaylistType | 'VIDEO';
2271
2261
 
2272
2262
  export declare interface ManifestLoadedData {
@@ -2342,10 +2332,6 @@ export declare type MediaDecodingInfo = {
2342
2332
  error?: Error;
2343
2333
  };
2344
2334
 
2345
- export declare interface MediaEndedData {
2346
- stalled: boolean;
2347
- }
2348
-
2349
2335
  export declare type MediaKeyFunc = (keySystem: KeySystems, supportedConfigurations: MediaKeySystemConfiguration[]) => Promise<MediaKeySystemAccess>;
2350
2336
 
2351
2337
  export declare interface MediaKeySessionContext {
@@ -2415,8 +2401,6 @@ export declare type MP4RemuxerConfig = {
2415
2401
  export declare interface NetworkComponentAPI extends ComponentAPI {
2416
2402
  startLoad(startPosition: number): void;
2417
2403
  stopLoad(): void;
2418
- pauseBuffering?(): void;
2419
- resumeBuffering?(): void;
2420
2404
  }
2421
2405
 
2422
2406
  export declare const enum NetworkErrorAction {
@@ -2656,14 +2640,16 @@ declare class StreamController extends BaseStreamController implements NetworkCo
2656
2640
  private altAudio;
2657
2641
  private audioOnly;
2658
2642
  private fragPlaying;
2643
+ private onvplaying;
2644
+ private onvseeked;
2659
2645
  private fragLastKbps;
2660
2646
  private couldBacktrack;
2661
2647
  private backtrackFragment;
2662
2648
  private audioCodecSwitch;
2663
2649
  private videoBuffer;
2664
2650
  constructor(hls: Hls, fragmentTracker: FragmentTracker, keyLoader: KeyLoader);
2665
- protected registerListeners(): void;
2666
- protected unregisterListeners(): void;
2651
+ private _registerListeners;
2652
+ protected _unregisterListeners(): void;
2667
2653
  protected onHandlerDestroying(): void;
2668
2654
  startLoad(startPosition: number): void;
2669
2655
  stopLoad(): void;
@@ -2687,7 +2673,7 @@ declare class StreamController extends BaseStreamController implements NetworkCo
2687
2673
  protected onMediaDetaching(): void;
2688
2674
  private onMediaPlaying;
2689
2675
  private onMediaSeeked;
2690
- protected onManifestLoading(): void;
2676
+ private onManifestLoading;
2691
2677
  private onManifestParsed;
2692
2678
  private onLevelLoading;
2693
2679
  private onLevelLoaded;
@@ -2696,7 +2682,7 @@ declare class StreamController extends BaseStreamController implements NetworkCo
2696
2682
  private onAudioTrackSwitched;
2697
2683
  private onBufferCreated;
2698
2684
  private onFragBuffered;
2699
- protected onError(event: Events.ERROR, data: ErrorData): void;
2685
+ private onError;
2700
2686
  private checkBuffer;
2701
2687
  private onFragLoadEmergencyAborted;
2702
2688
  private onBufferFlushed;
@@ -2782,8 +2768,8 @@ export declare class SubtitleStreamController extends BaseStreamController imple
2782
2768
  private mainDetails;
2783
2769
  constructor(hls: Hls, fragmentTracker: FragmentTracker, keyLoader: KeyLoader);
2784
2770
  protected onHandlerDestroying(): void;
2785
- protected registerListeners(): void;
2786
- protected unregisterListeners(): void;
2771
+ private _registerListeners;
2772
+ private _unregisterListeners;
2787
2773
  startLoad(startPosition: number): void;
2788
2774
  onManifestLoading(): void;
2789
2775
  onMediaDetaching(): void;
@@ -2811,10 +2797,10 @@ export declare class SubtitleTrackController extends BasePlaylistController {
2811
2797
  private currentTrack;
2812
2798
  private selectDefaultTrack;
2813
2799
  private queuedDefaultTrack;
2800
+ private asyncPollTrackChange;
2814
2801
  private useTextTrackPolling;
2815
2802
  private subtitlePollingInterval;
2816
2803
  private _subtitleDisplay;
2817
- private asyncPollTrackChange;
2818
2804
  constructor(hls: Hls);
2819
2805
  destroy(): void;
2820
2806
  get subtitleDisplay(): boolean;
@@ -2899,12 +2885,12 @@ export declare interface SubtitleTrackSwitchData {
2899
2885
  * we are limiting the task execution per call stack to exactly one, but scheduling/post-poning further
2900
2886
  * task processing on the next main loop iteration (also known as "next tick" in the Node/JS runtime lingo).
2901
2887
  */
2902
- declare class TaskLoop extends Logger {
2888
+ declare class TaskLoop {
2903
2889
  private readonly _boundTick;
2904
2890
  private _tickTimer;
2905
2891
  private _tickInterval;
2906
2892
  private _tickCallCount;
2907
- constructor(label: string, logger: ILogger);
2893
+ constructor();
2908
2894
  destroy(): void;
2909
2895
  protected onHandlerDestroying(): void;
2910
2896
  protected onHandlerDestroyed(): void;