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