@zenvor/hls.js 1.0.0

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 (159) hide show
  1. package/LICENSE +28 -0
  2. package/README.md +472 -0
  3. package/dist/hls-demo.js +26995 -0
  4. package/dist/hls-demo.js.map +1 -0
  5. package/dist/hls.d.mts +4204 -0
  6. package/dist/hls.d.ts +4204 -0
  7. package/dist/hls.js +40050 -0
  8. package/dist/hls.js.d.ts +4204 -0
  9. package/dist/hls.js.map +1 -0
  10. package/dist/hls.light.js +27145 -0
  11. package/dist/hls.light.js.map +1 -0
  12. package/dist/hls.light.min.js +2 -0
  13. package/dist/hls.light.min.js.map +1 -0
  14. package/dist/hls.light.mjs +26392 -0
  15. package/dist/hls.light.mjs.map +1 -0
  16. package/dist/hls.min.js +2 -0
  17. package/dist/hls.min.js.map +1 -0
  18. package/dist/hls.mjs +38956 -0
  19. package/dist/hls.mjs.map +1 -0
  20. package/dist/hls.worker.js +2 -0
  21. package/dist/hls.worker.js.map +1 -0
  22. package/package.json +143 -0
  23. package/src/config.ts +794 -0
  24. package/src/controller/abr-controller.ts +1019 -0
  25. package/src/controller/algo-data-controller.ts +794 -0
  26. package/src/controller/audio-stream-controller.ts +1099 -0
  27. package/src/controller/audio-track-controller.ts +454 -0
  28. package/src/controller/base-playlist-controller.ts +438 -0
  29. package/src/controller/base-stream-controller.ts +2526 -0
  30. package/src/controller/buffer-controller.ts +2015 -0
  31. package/src/controller/buffer-operation-queue.ts +159 -0
  32. package/src/controller/cap-level-controller.ts +367 -0
  33. package/src/controller/cmcd-controller.ts +422 -0
  34. package/src/controller/content-steering-controller.ts +622 -0
  35. package/src/controller/eme-controller.ts +1617 -0
  36. package/src/controller/error-controller.ts +627 -0
  37. package/src/controller/fps-controller.ts +146 -0
  38. package/src/controller/fragment-finders.ts +256 -0
  39. package/src/controller/fragment-tracker.ts +567 -0
  40. package/src/controller/gap-controller.ts +719 -0
  41. package/src/controller/id3-track-controller.ts +488 -0
  42. package/src/controller/interstitial-player.ts +302 -0
  43. package/src/controller/interstitials-controller.ts +2895 -0
  44. package/src/controller/interstitials-schedule.ts +698 -0
  45. package/src/controller/latency-controller.ts +294 -0
  46. package/src/controller/level-controller.ts +776 -0
  47. package/src/controller/stream-controller.ts +1597 -0
  48. package/src/controller/subtitle-stream-controller.ts +508 -0
  49. package/src/controller/subtitle-track-controller.ts +617 -0
  50. package/src/controller/timeline-controller.ts +677 -0
  51. package/src/crypt/aes-crypto.ts +36 -0
  52. package/src/crypt/aes-decryptor.ts +339 -0
  53. package/src/crypt/decrypter-aes-mode.ts +4 -0
  54. package/src/crypt/decrypter.ts +225 -0
  55. package/src/crypt/fast-aes-key.ts +39 -0
  56. package/src/define-plugin.d.ts +17 -0
  57. package/src/demux/audio/aacdemuxer.ts +126 -0
  58. package/src/demux/audio/ac3-demuxer.ts +170 -0
  59. package/src/demux/audio/adts.ts +249 -0
  60. package/src/demux/audio/base-audio-demuxer.ts +205 -0
  61. package/src/demux/audio/dolby.ts +21 -0
  62. package/src/demux/audio/mp3demuxer.ts +85 -0
  63. package/src/demux/audio/mpegaudio.ts +177 -0
  64. package/src/demux/chunk-cache.ts +42 -0
  65. package/src/demux/dummy-demuxed-track.ts +13 -0
  66. package/src/demux/inject-worker.ts +75 -0
  67. package/src/demux/mp4demuxer.ts +234 -0
  68. package/src/demux/sample-aes.ts +198 -0
  69. package/src/demux/transmuxer-interface.ts +449 -0
  70. package/src/demux/transmuxer-worker.ts +221 -0
  71. package/src/demux/transmuxer.ts +560 -0
  72. package/src/demux/tsdemuxer.ts +1256 -0
  73. package/src/demux/video/avc-video-parser.ts +401 -0
  74. package/src/demux/video/base-video-parser.ts +198 -0
  75. package/src/demux/video/exp-golomb.ts +153 -0
  76. package/src/demux/video/hevc-video-parser.ts +736 -0
  77. package/src/empty-es.js +5 -0
  78. package/src/empty.js +3 -0
  79. package/src/errors.ts +107 -0
  80. package/src/events.ts +548 -0
  81. package/src/exports-default.ts +3 -0
  82. package/src/exports-named.ts +81 -0
  83. package/src/hls.ts +1613 -0
  84. package/src/is-supported.ts +54 -0
  85. package/src/loader/date-range.ts +207 -0
  86. package/src/loader/fragment-loader.ts +403 -0
  87. package/src/loader/fragment.ts +487 -0
  88. package/src/loader/interstitial-asset-list.ts +162 -0
  89. package/src/loader/interstitial-event.ts +337 -0
  90. package/src/loader/key-loader.ts +439 -0
  91. package/src/loader/level-details.ts +203 -0
  92. package/src/loader/level-key.ts +259 -0
  93. package/src/loader/load-stats.ts +17 -0
  94. package/src/loader/m3u8-parser.ts +1072 -0
  95. package/src/loader/playlist-loader.ts +839 -0
  96. package/src/polyfills/number.ts +15 -0
  97. package/src/remux/aac-helper.ts +81 -0
  98. package/src/remux/mp4-generator.ts +1380 -0
  99. package/src/remux/mp4-remuxer.ts +1261 -0
  100. package/src/remux/passthrough-remuxer.ts +434 -0
  101. package/src/task-loop.ts +130 -0
  102. package/src/types/algo.ts +44 -0
  103. package/src/types/buffer.ts +105 -0
  104. package/src/types/component-api.ts +20 -0
  105. package/src/types/demuxer.ts +208 -0
  106. package/src/types/events.ts +574 -0
  107. package/src/types/fragment-tracker.ts +23 -0
  108. package/src/types/level.ts +268 -0
  109. package/src/types/loader.ts +198 -0
  110. package/src/types/media-playlist.ts +92 -0
  111. package/src/types/network-details.ts +3 -0
  112. package/src/types/remuxer.ts +104 -0
  113. package/src/types/track.ts +12 -0
  114. package/src/types/transmuxer.ts +46 -0
  115. package/src/types/tuples.ts +6 -0
  116. package/src/types/vtt.ts +11 -0
  117. package/src/utils/arrays.ts +22 -0
  118. package/src/utils/attr-list.ts +192 -0
  119. package/src/utils/binary-search.ts +46 -0
  120. package/src/utils/buffer-helper.ts +173 -0
  121. package/src/utils/cea-608-parser.ts +1413 -0
  122. package/src/utils/chunker.ts +41 -0
  123. package/src/utils/codecs.ts +314 -0
  124. package/src/utils/cues.ts +96 -0
  125. package/src/utils/discontinuities.ts +174 -0
  126. package/src/utils/encryption-methods-util.ts +21 -0
  127. package/src/utils/error-helper.ts +95 -0
  128. package/src/utils/event-listener-helper.ts +16 -0
  129. package/src/utils/ewma-bandwidth-estimator.ts +97 -0
  130. package/src/utils/ewma.ts +43 -0
  131. package/src/utils/fetch-loader.ts +331 -0
  132. package/src/utils/global.ts +2 -0
  133. package/src/utils/hash.ts +10 -0
  134. package/src/utils/hdr.ts +67 -0
  135. package/src/utils/hex.ts +32 -0
  136. package/src/utils/imsc1-ttml-parser.ts +261 -0
  137. package/src/utils/keysystem-util.ts +45 -0
  138. package/src/utils/level-helper.ts +629 -0
  139. package/src/utils/logger.ts +120 -0
  140. package/src/utils/media-option-attributes.ts +49 -0
  141. package/src/utils/mediacapabilities-helper.ts +301 -0
  142. package/src/utils/mediakeys-helper.ts +210 -0
  143. package/src/utils/mediasource-helper.ts +37 -0
  144. package/src/utils/mp4-tools.ts +1473 -0
  145. package/src/utils/number.ts +3 -0
  146. package/src/utils/numeric-encoding-utils.ts +26 -0
  147. package/src/utils/output-filter.ts +46 -0
  148. package/src/utils/rendition-helper.ts +505 -0
  149. package/src/utils/safe-json-stringify.ts +22 -0
  150. package/src/utils/texttrack-utils.ts +164 -0
  151. package/src/utils/time-ranges.ts +17 -0
  152. package/src/utils/timescale-conversion.ts +46 -0
  153. package/src/utils/utf8-utils.ts +18 -0
  154. package/src/utils/variable-substitution.ts +105 -0
  155. package/src/utils/vttcue.ts +384 -0
  156. package/src/utils/vttparser.ts +497 -0
  157. package/src/utils/webvtt-parser.ts +166 -0
  158. package/src/utils/xhr-loader.ts +337 -0
  159. package/src/version.ts +1 -0
@@ -0,0 +1,4204 @@
1
+ export declare interface AbrComponentAPI extends ComponentAPI {
2
+ firstAutoLevel: number;
3
+ forcedAutoLevel: number;
4
+ nextAutoLevel: number;
5
+ readonly bwEstimator?: EwmaBandWidthEstimator;
6
+ resetEstimator(abrEwmaDefaultEstimate: number): any;
7
+ }
8
+
9
+ export declare class AbrController extends Logger implements AbrComponentAPI {
10
+ protected hls: Hls;
11
+ private lastLevelLoadSec;
12
+ private lastLoadedFragLevel;
13
+ private firstSelection;
14
+ private _nextAutoLevel;
15
+ private nextAutoLevelKey;
16
+ private audioTracksByGroup;
17
+ private codecTiers;
18
+ private timer;
19
+ private fragCurrent;
20
+ private partCurrent;
21
+ private bitrateTestDelay;
22
+ private rebufferNotice;
23
+ private supportedCache;
24
+ bwEstimator: EwmaBandWidthEstimator;
25
+ constructor(hls: Hls);
26
+ resetEstimator(abrEwmaDefaultEstimate?: number): void;
27
+ private initEstimator;
28
+ protected registerListeners(): void;
29
+ protected unregisterListeners(): void;
30
+ destroy(): void;
31
+ protected onManifestLoading(event: Events.MANIFEST_LOADING, data: ManifestLoadingData): void;
32
+ private onLevelsUpdated;
33
+ private onMaxAutoLevelUpdated;
34
+ protected onFragLoading(event: Events.FRAG_LOADING, data: FragLoadingData): void;
35
+ protected onLevelSwitching(event: Events.LEVEL_SWITCHING, data: LevelSwitchingData): void;
36
+ protected onError(event: Events.ERROR, data: ErrorData): void;
37
+ private getTimeToLoadFrag;
38
+ protected onLevelLoaded(event: Events.LEVEL_LOADED, data: LevelLoadedData): void;
39
+ private _abandonRulesCheck;
40
+ protected onFragLoaded(event: Events.FRAG_LOADED, { frag, part }: FragLoadedData): void;
41
+ protected onFragBuffered(event: Events.FRAG_BUFFERED, data: FragBufferedData): void;
42
+ private ignoreFragment;
43
+ clearTimer(): void;
44
+ get firstAutoLevel(): number;
45
+ get forcedAutoLevel(): number;
46
+ get nextAutoLevel(): number;
47
+ private getAutoLevelKey;
48
+ private getNextABRAutoLevel;
49
+ private getStarvationDelay;
50
+ private getBwEstimate;
51
+ private findBestLevel;
52
+ set nextAutoLevel(nextLevel: number);
53
+ protected deriveNextAutoLevel(nextLevel: number): number;
54
+ }
55
+
56
+ export declare type ABRControllerConfig = {
57
+ abrEwmaFastLive: number;
58
+ abrEwmaSlowLive: number;
59
+ abrEwmaFastVoD: number;
60
+ abrEwmaSlowVoD: number;
61
+ /**
62
+ * Default bandwidth estimate in bits/s prior to collecting fragment bandwidth samples
63
+ */
64
+ abrEwmaDefaultEstimate: number;
65
+ abrEwmaDefaultEstimateMax: number;
66
+ abrBandWidthFactor: number;
67
+ abrBandWidthUpFactor: number;
68
+ abrMaxWithRealBitrate: boolean;
69
+ abrSwitchInterval: number;
70
+ maxStarvationDelay: number;
71
+ maxLoadingDelay: number;
72
+ };
73
+
74
+ declare type AlgoChunk = {
75
+ fragSn: number;
76
+ algoUrl: string;
77
+ chunkIndex: number;
78
+ frameSize: number;
79
+ frameRate: number;
80
+ startFrameIndex: number;
81
+ frames: FrameItem[];
82
+ };
83
+
84
+ declare interface AlgoDataErrorData {
85
+ frag: Fragment;
86
+ url: string;
87
+ error: Error;
88
+ reason: string;
89
+ networkDetails?: NullableNetworkDetails;
90
+ stats?: LoaderStats;
91
+ }
92
+
93
+ declare interface AlgoDataLoadedData {
94
+ frag: Fragment;
95
+ url: string;
96
+ chunk: AlgoChunk;
97
+ networkDetails: NullableNetworkDetails;
98
+ stats: LoaderStats;
99
+ }
100
+
101
+ declare interface AlgoDataLoadingData {
102
+ frag: Fragment;
103
+ url: string;
104
+ }
105
+
106
+ export declare type AssetListJSON = {
107
+ ASSETS: Array<{
108
+ URI: string;
109
+ DURATION: string;
110
+ }>;
111
+ };
112
+
113
+ export declare interface AssetListLoadedData {
114
+ event: InterstitialEventWithAssetList;
115
+ assetListResponse: AssetListJSON;
116
+ networkDetails: NullableNetworkDetails;
117
+ }
118
+
119
+ export declare interface AssetListLoadingData {
120
+ event: InterstitialEventWithAssetList;
121
+ }
122
+
123
+ export declare type AttachMediaSourceData = {
124
+ media: HTMLMediaElement;
125
+ mediaSource: MediaSource | null;
126
+ tracks: SourceBufferTrackSet;
127
+ };
128
+
129
+ export declare class AttrList {
130
+ [key: string]: any;
131
+ constructor(attrs: string | Record<string, any>, parsed?: Pick<ParsedMultivariantPlaylist | LevelDetails, 'variableList' | 'hasVariableRefs' | 'playlistParsingError'>);
132
+ get clientAttrs(): string[];
133
+ decimalInteger(attrName: string): number;
134
+ hexadecimalInteger(attrName: string): Uint8Array<ArrayBuffer> | null;
135
+ hexadecimalIntegerAsNumber(attrName: string): number;
136
+ decimalFloatingPoint(attrName: string): number;
137
+ optionalFloat(attrName: string, defaultValue: number): number;
138
+ enumeratedString(attrName: string): string | undefined;
139
+ enumeratedStringList<T extends {
140
+ [key: string]: boolean;
141
+ }>(attrName: string, dict: T): {
142
+ [key in keyof T]: boolean;
143
+ };
144
+ bool(attrName: string): boolean;
145
+ decimalResolution(attrName: string): {
146
+ width: number;
147
+ height: number;
148
+ } | undefined;
149
+ static parseAttrList(input: string, parsed?: Pick<ParsedMultivariantPlaylist | LevelDetails, 'variableList' | 'hasVariableRefs' | 'playlistParsingError'>): Record<string, string>;
150
+ }
151
+
152
+ export declare type AudioPlaylistType = 'AUDIO';
153
+
154
+ export declare type AudioSelectionOption = {
155
+ lang?: string;
156
+ assocLang?: string;
157
+ characteristics?: string;
158
+ channels?: string;
159
+ name?: string;
160
+ audioCodec?: string;
161
+ groupId?: string;
162
+ default?: boolean;
163
+ };
164
+
165
+ export declare class AudioStreamController extends BaseStreamController implements NetworkComponentAPI {
166
+ private mainAnchor;
167
+ private mainFragLoading;
168
+ private audioOnly;
169
+ private bufferedTrack;
170
+ private switchingTrack;
171
+ private trackId;
172
+ private nextTrackId;
173
+ private waitingData;
174
+ private mainDetails;
175
+ private flushing;
176
+ private bufferFlushed;
177
+ private cachedTrackLoadedData;
178
+ constructor(hls: Hls, fragmentTracker: FragmentTracker, keyLoader: KeyLoader);
179
+ protected onHandlerDestroying(): void;
180
+ private resetItem;
181
+ protected registerListeners(): void;
182
+ protected unregisterListeners(): void;
183
+ onInitPtsFound(event: Events.INIT_PTS_FOUND, { frag, id, initPTS, timescale, trackId }: InitPTSFoundData): void;
184
+ protected getLoadPosition(): number;
185
+ private syncWithAnchor;
186
+ startLoad(startPosition: number, skipSeekToStartPosition?: boolean): void;
187
+ doTick(): void;
188
+ protected resetLoadingState(): void;
189
+ protected onTickEnd(): void;
190
+ private doTickIdle;
191
+ protected onMediaDetaching(event: Events.MEDIA_DETACHING, data: MediaDetachingData): void;
192
+ private onAudioTracksUpdated;
193
+ private onAudioTrackSwitching;
194
+ protected onManifestLoading(): void;
195
+ private onLevelLoaded;
196
+ private onAudioTrackLoaded;
197
+ _handleFragmentLoadProgress(data: FragLoadedData): void;
198
+ protected _handleFragmentLoadComplete(fragLoadedData: FragLoadedData): void;
199
+ private onBufferReset;
200
+ private onBufferCreated;
201
+ private onFragLoading;
202
+ private onFragBuffered;
203
+ protected getBufferOutput(): Bufferable | null;
204
+ protected checkFragmentChanged(): boolean;
205
+ protected onError(event: Events.ERROR, data: ErrorData): void;
206
+ private onBufferFlushing;
207
+ private onBufferFlushed;
208
+ private _handleTransmuxComplete;
209
+ private _bufferInitSegment;
210
+ protected loadFragment(frag: Fragment, track: Level, targetBufferTime: number): void;
211
+ private flushAudioIfNeeded;
212
+ private completeAudioSwitch;
213
+ /**
214
+ * Index of next audio track loaded as scheduled by audio stream controller.
215
+ */
216
+ get nextAudioTrack(): number;
217
+ }
218
+
219
+ export declare class AudioTrackController extends BasePlaylistController {
220
+ private tracks;
221
+ private groupIds;
222
+ private tracksInGroup;
223
+ private trackId;
224
+ private currentTrack;
225
+ private selectDefaultTrack;
226
+ constructor(hls: Hls);
227
+ private registerListeners;
228
+ private unregisterListeners;
229
+ destroy(): void;
230
+ protected onManifestLoading(): void;
231
+ protected onManifestParsed(event: Events.MANIFEST_PARSED, data: ManifestParsedData): void;
232
+ protected onAudioTrackLoaded(event: Events.AUDIO_TRACK_LOADED, data: AudioTrackLoadedData): void;
233
+ protected onLevelLoading(event: Events.LEVEL_LOADING, data: LevelLoadingData): void;
234
+ protected onLevelSwitching(event: Events.LEVEL_SWITCHING, data: LevelSwitchingData): void;
235
+ private switchLevel;
236
+ protected onError(event: Events.ERROR, data: ErrorData): void;
237
+ get allAudioTracks(): MediaPlaylist[];
238
+ get audioTracks(): MediaPlaylist[];
239
+ get audioTrack(): number;
240
+ set audioTrack(newId: number);
241
+ get nextAudioTrack(): number;
242
+ set nextAudioTrack(newId: number);
243
+ setAudioOption(audioOption: MediaPlaylist | AudioSelectionOption | undefined): MediaPlaylist | null;
244
+ private setAudioTrack;
245
+ private findTrackId;
246
+ protected loadPlaylist(hlsUrlParameters?: HlsUrlParameters): void;
247
+ protected loadingPlaylist(audioTrack: MediaPlaylist, hlsUrlParameters: HlsUrlParameters | undefined): void;
248
+ }
249
+
250
+ export declare interface AudioTrackLoadedData extends TrackLoadedData {
251
+ }
252
+
253
+ export declare interface AudioTracksUpdatedData {
254
+ audioTracks: MediaPlaylist[];
255
+ }
256
+
257
+ export declare interface AudioTrackSwitchedData extends MediaPlaylist {
258
+ }
259
+
260
+ export declare interface AudioTrackSwitchingData extends MediaPlaylist {
261
+ flushImmediate?: boolean;
262
+ }
263
+
264
+ export declare interface AudioTrackUpdatedData {
265
+ details: LevelDetails;
266
+ id: number;
267
+ groupId: string;
268
+ }
269
+
270
+ declare type AutoCameraItem = {
271
+ x: number;
272
+ y: number;
273
+ focus: number;
274
+ reserved: [number, number, number, number];
275
+ };
276
+
277
+ export declare interface BackBufferData {
278
+ bufferEnd: number;
279
+ }
280
+
281
+ declare type Base = {
282
+ url: string;
283
+ };
284
+
285
+ export declare type BaseData = {
286
+ url: string;
287
+ };
288
+
289
+ export declare class BasePlaylistController extends Logger implements NetworkComponentAPI {
290
+ protected hls: Hls;
291
+ protected canLoad: boolean;
292
+ private timer;
293
+ constructor(hls: Hls, logPrefix: string);
294
+ destroy(): void;
295
+ private clearTimer;
296
+ startLoad(): void;
297
+ stopLoad(): void;
298
+ protected switchParams(playlistUri: string, previous: LevelDetails | undefined, current: LevelDetails | undefined): HlsUrlParameters | undefined;
299
+ protected loadPlaylist(hlsUrlParameters?: HlsUrlParameters): void;
300
+ protected loadingPlaylist(playlist: Level | MediaPlaylist, hlsUrlParameters?: HlsUrlParameters): void;
301
+ protected shouldLoadPlaylist(playlist: Level | MediaPlaylist | null | undefined): playlist is Level | MediaPlaylist;
302
+ protected getUrlWithDirectives(uri: string, hlsUrlParameters: HlsUrlParameters | undefined): string;
303
+ protected playlistLoaded(index: number, data: LevelLoadedData | AudioTrackLoadedData | TrackLoadedData, previousDetails?: LevelDetails): void;
304
+ protected scheduleLoading(levelOrTrack: Level | MediaPlaylist, deliveryDirectives?: HlsUrlParameters, updatedDetails?: LevelDetails): void;
305
+ private getDeliveryDirectives;
306
+ protected checkRetry(errorEvent: ErrorData): boolean;
307
+ }
308
+
309
+ export declare class BaseSegment {
310
+ private _byteRange;
311
+ private _url;
312
+ private _stats;
313
+ private _streams;
314
+ readonly base: Base;
315
+ relurl?: string;
316
+ algoRelurl?: string;
317
+ constructor(base: Base | string);
318
+ setByteRange(value: string, previous?: BaseSegment): void;
319
+ get baseurl(): string;
320
+ get byteRange(): [number, number] | [];
321
+ get byteRangeStartOffset(): number | undefined;
322
+ get byteRangeEndOffset(): number | undefined;
323
+ get elementaryStreams(): ElementaryStreams;
324
+ set elementaryStreams(value: ElementaryStreams);
325
+ get hasStats(): boolean;
326
+ get hasStreams(): boolean;
327
+ get stats(): LoadStats;
328
+ set stats(value: LoadStats);
329
+ get url(): string;
330
+ set url(value: string);
331
+ clearElementaryStreamInfo(): void;
332
+ }
333
+
334
+ export declare class BaseStreamController extends TaskLoop implements NetworkComponentAPI {
335
+ protected hls: Hls;
336
+ protected fragPrevious: MediaFragment | null;
337
+ protected fragCurrent: Fragment | null;
338
+ protected fragPlaying: Fragment | null;
339
+ protected fragmentTracker: FragmentTracker;
340
+ protected transmuxer: TransmuxerInterface | null;
341
+ protected _state: (typeof State)[keyof typeof State];
342
+ protected playlistType: PlaylistLevelType;
343
+ protected media: HTMLMediaElement | null;
344
+ protected mediaBuffer: Bufferable | null;
345
+ protected config: HlsConfig;
346
+ protected bitrateTest: boolean;
347
+ protected lastCurrentTime: number;
348
+ protected nextLoadPosition: number;
349
+ protected startPosition: number;
350
+ protected startTimeOffset: number | null;
351
+ protected retryDate: number;
352
+ protected levels: Array<Level> | null;
353
+ protected fragmentLoader: FragmentLoader;
354
+ protected keyLoader: KeyLoader;
355
+ protected levelLastLoaded: Level | null;
356
+ protected startFragRequested: boolean;
357
+ protected decrypter: Decrypter;
358
+ protected initPTS: TimestampOffset[];
359
+ protected buffering: boolean;
360
+ protected loadingParts: boolean;
361
+ private loopSn?;
362
+ constructor(hls: Hls, fragmentTracker: FragmentTracker, keyLoader: KeyLoader, logPrefix: string, playlistType: PlaylistLevelType);
363
+ protected registerListeners(): void;
364
+ protected unregisterListeners(): void;
365
+ protected doTick(): void;
366
+ protected onTickEnd(): void;
367
+ startLoad(startPosition: number): void;
368
+ stopLoad(): void;
369
+ get startPositionValue(): number;
370
+ get bufferingEnabled(): boolean;
371
+ /**
372
+ * Get backtrack fragment. Returns null in base class.
373
+ * Override in stream-controller to return actual backtrack fragment.
374
+ */
375
+ protected get backtrackFragment(): Fragment | undefined;
376
+ /**
377
+ * Set backtrack fragment. No-op in base class.
378
+ * Override in stream-controller to set actual backtrack fragment.
379
+ */
380
+ protected set backtrackFragment(_value: Fragment | undefined);
381
+ /**
382
+ * Get could backtrack flag. Returns false in base class.
383
+ * Override in stream-controller to return actual value.
384
+ */
385
+ protected get couldBacktrack(): boolean;
386
+ /**
387
+ * Set could backtrack flag. No-op in base class.
388
+ * Override in stream-controller to set actual value.
389
+ */
390
+ protected set couldBacktrack(_value: boolean);
391
+ pauseBuffering(): void;
392
+ resumeBuffering(): void;
393
+ get inFlightFrag(): InFlightData;
394
+ protected _streamEnded(bufferInfo: BufferInfo, levelDetails: LevelDetails): boolean;
395
+ getLevelDetails(): LevelDetails | undefined;
396
+ protected get timelineOffset(): number;
397
+ protected onMediaAttached(event: Events.MEDIA_ATTACHED, data: MediaAttachedData): void;
398
+ protected onMediaDetaching(event: Events.MEDIA_DETACHING, data: MediaDetachingData): void;
399
+ protected onManifestLoading(): void;
400
+ protected onError(event: Events.ERROR, data: ErrorData): void;
401
+ protected onMediaSeeking: () => void;
402
+ protected onMediaEnded: () => void;
403
+ protected onManifestLoaded(event: Events.MANIFEST_LOADED, data: ManifestLoadedData): void;
404
+ protected onHandlerDestroying(): void;
405
+ protected onHandlerDestroyed(): void;
406
+ protected loadFragment(frag: MediaFragment, level: Level, targetBufferTime: number): void;
407
+ private _loadFragForPlayback;
408
+ protected clearTrackerIfNeeded(frag: Fragment): void;
409
+ protected checkLiveUpdate(details: LevelDetails): void;
410
+ protected waitForLive(levelInfo: Level): boolean | undefined;
411
+ protected flushMainBuffer(startOffset: number, endOffset: number, type?: SourceBufferName | null): void;
412
+ protected _loadInitSegment(fragment: Fragment, level: Level): void;
413
+ private completeInitSegmentLoad;
414
+ protected unhandledEncryptionError(initSegment: InitSegmentData, frag: Fragment): boolean;
415
+ protected fragContextChanged(frag: Fragment | null): boolean;
416
+ protected fragBufferedComplete(frag: Fragment, part: Part | null): void;
417
+ protected _handleFragmentLoadComplete(fragLoadedEndData: PartsLoadedData): void;
418
+ protected _handleFragmentLoadProgress(frag: PartsLoadedData | FragLoadedData): void;
419
+ protected _doFragLoad(frag: Fragment, level: Level, targetBufferTime?: number | null, progressCallback?: FragmentLoadProgressCallback): Promise<PartsLoadedData | FragLoadedData | null>;
420
+ private doFragPartsLoad;
421
+ private handleFragLoadError;
422
+ protected _handleTransmuxerFlush(chunkMeta: ChunkMetadata): void;
423
+ private shouldLoadParts;
424
+ protected getCurrentContext(chunkMeta: ChunkMetadata): {
425
+ frag: MediaFragment;
426
+ part: Part | null;
427
+ level: Level;
428
+ } | null;
429
+ protected bufferFragmentData(data: RemuxedTrack, frag: Fragment, part: Part | null, chunkMeta: ChunkMetadata, noBacktracking?: boolean): void;
430
+ protected flushBufferGap(frag: Fragment): void;
431
+ protected getFwdBufferInfo(bufferable: Bufferable | null, type: PlaylistLevelType): BufferInfo | null;
432
+ protected getFwdBufferInfoAtPos(bufferable: Bufferable | null, pos: number, type: PlaylistLevelType, maxBufferHole: number): BufferInfo | null;
433
+ protected getMaxBufferLength(levelBitrate?: number): number;
434
+ protected reduceMaxBufferLength(threshold: number, fragDuration: number): boolean;
435
+ protected getAppendedFrag(position: number): Fragment | null;
436
+ protected getNextFragment(pos: number, levelDetails: LevelDetails): Fragment | null;
437
+ protected isLoopLoading(frag: Fragment, targetBufferTime: number): boolean;
438
+ protected getNextFragmentLoopLoading(frag: Fragment, levelDetails: LevelDetails, bufferInfo: BufferInfo, playlistType: PlaylistLevelType, maxBufLen: number): Fragment | null;
439
+ protected get primaryPrefetch(): boolean;
440
+ protected filterReplacedPrimary(frag: MediaFragment | null, details: LevelDetails | undefined): MediaFragment | null;
441
+ mapToInitFragWhenRequired(frag: Fragment | null): typeof frag;
442
+ getNextPart(partList: Part[], frag: Fragment, targetBufferTime: number): number;
443
+ private loadedEndOfParts;
444
+ protected getInitialLiveFragment(levelDetails: LevelDetails): MediaFragment | null;
445
+ protected getFragmentAtPosition(bufferEnd: number, end: number, levelDetails: LevelDetails): MediaFragment | null;
446
+ protected alignPlaylists(details: LevelDetails, previousDetails: LevelDetails | undefined, switchDetails: LevelDetails | undefined): number;
447
+ protected waitForCdnTuneIn(details: LevelDetails): boolean | 0;
448
+ protected setStartPosition(details: LevelDetails, sliding: number): void;
449
+ protected getLoadPosition(): number;
450
+ private handleFragLoadAborted;
451
+ protected resetFragmentLoading(frag: Fragment): void;
452
+ protected onFragmentOrKeyLoadError(filterType: PlaylistLevelType, data: ErrorData): void;
453
+ protected checkRetryDate(): void;
454
+ protected reduceLengthAndFlushBuffer(data: ErrorData): boolean;
455
+ protected resetFragmentErrors(filterType: PlaylistLevelType): void;
456
+ protected afterBufferFlushed(media: Bufferable, bufferType: SourceBufferName): void;
457
+ protected resetLoadingState(): void;
458
+ private resetStartWhenNotLoaded;
459
+ protected resetWhenMissingContext(chunkMeta: ChunkMetadata | Fragment): void;
460
+ protected removeUnbufferedFrags(start?: number): void;
461
+ private updateLevelTiming;
462
+ private playlistLabel;
463
+ private fragInfo;
464
+ private treatAsGap;
465
+ protected resetTransmuxer(): void;
466
+ private isFragmentNearlyDownloaded;
467
+ protected recoverWorkerError(data: ErrorData): void;
468
+ set state(nextState: (typeof State)[keyof typeof State]);
469
+ get state(): (typeof State)[keyof typeof State];
470
+ /**
471
+ * Calculate optimal switch point by considering fetch delays and buffer info
472
+ * to avoid causing playback interruption
473
+ */
474
+ protected calculateOptimalSwitchPoint(nextLevel: Level, bufferInfo: BufferInfo): {
475
+ fetchdelay: number;
476
+ okToFlushForwardBuffer: boolean;
477
+ };
478
+ /**
479
+ * Generic track switching scheduler that prevents buffering interruptions
480
+ * by finding optimal flush points in the buffer
481
+ * This method can be overridden by subclasses with specific implementation details
482
+ */
483
+ protected scheduleTrackSwitch(bufferInfo: BufferInfo, fetchdelay: number, okToFlushForwardBuffer: boolean): void;
484
+ /**
485
+ * Handle back-buffer cleanup during track switching
486
+ */
487
+ protected cleanupBackBuffer(): void;
488
+ /**
489
+ * Gets buffered fragment at the specified position
490
+ */
491
+ protected getBufferedFrag(position: number): Fragment | null;
492
+ /**
493
+ * Gets the next buffered fragment following the given fragment
494
+ */
495
+ protected followingBufferedFrag(frag: Fragment | null): Fragment | null;
496
+ /**
497
+ * Aborts the current fragment loading and resets state
498
+ * Can be overridden by subclasses for specific behavior
499
+ */
500
+ protected abortCurrentFrag(): void;
501
+ protected checkFragmentChanged(): boolean;
502
+ protected getBufferOutput(): Bufferable | null;
503
+ /**
504
+ * try to switch ASAP without breaking video playback:
505
+ * in order to ensure smooth but quick level switching,
506
+ * we need to find the next flushable buffer range
507
+ * we should take into account new segment fetch time
508
+ */
509
+ nextLevelSwitch(): void;
510
+ }
511
+
512
+ export declare interface BaseTrack {
513
+ id: 'audio' | 'main';
514
+ container: string;
515
+ codec?: string;
516
+ supplemental?: string;
517
+ encrypted?: boolean;
518
+ levelCodec?: string;
519
+ pendingCodec?: string;
520
+ metadata?: {
521
+ channelCount?: number;
522
+ width?: number;
523
+ height?: number;
524
+ };
525
+ }
526
+
527
+ export declare type BaseTrackSet = Partial<Record<SourceBufferName, BaseTrack>>;
528
+
529
+ export declare type Bufferable = {
530
+ buffered: TimeRanges;
531
+ };
532
+
533
+ export declare interface BufferAppendedData {
534
+ type: SourceBufferName;
535
+ frag: Fragment;
536
+ part: Part | null;
537
+ chunkMeta: ChunkMetadata;
538
+ parent: PlaylistLevelType;
539
+ timeRanges: Partial<Record<SourceBufferName, TimeRanges>>;
540
+ }
541
+
542
+ export declare interface BufferAppendingData {
543
+ type: SourceBufferName;
544
+ frag: Fragment;
545
+ part: Part | null;
546
+ chunkMeta: ChunkMetadata;
547
+ offset?: number | undefined;
548
+ parent: PlaylistLevelType;
549
+ data: Uint8Array<ArrayBuffer>;
550
+ }
551
+
552
+ export declare interface BufferCodecsData {
553
+ video?: ParsedTrack;
554
+ audio?: ParsedTrack;
555
+ audiovideo?: ParsedTrack;
556
+ tracks?: BaseTrackSet;
557
+ }
558
+
559
+ export declare class BufferController extends Logger implements ComponentAPI {
560
+ private hls;
561
+ private fragmentTracker;
562
+ private details;
563
+ private _objectUrl;
564
+ private operationQueue;
565
+ private bufferCodecEventsTotal;
566
+ private media;
567
+ private mediaSource;
568
+ private lastMpegAudioChunk;
569
+ private blockedAudioAppend;
570
+ private lastVideoAppendEnd;
571
+ private appendSource;
572
+ private transferData?;
573
+ private overrides?;
574
+ private appendErrors;
575
+ private appendError?;
576
+ private tracks;
577
+ private sourceBuffers;
578
+ constructor(hls: Hls, fragmentTracker: FragmentTracker);
579
+ hasSourceTypes(): boolean;
580
+ destroy(): void;
581
+ private registerListeners;
582
+ private unregisterListeners;
583
+ transferMedia(): AttachMediaSourceData | null;
584
+ private initTracks;
585
+ private onManifestLoading;
586
+ private onManifestParsed;
587
+ private onMediaAttaching;
588
+ private assignMediaSource;
589
+ private attachTransferred;
590
+ private get mediaSourceOpenOrEnded();
591
+ private _onEndStreaming;
592
+ private _onStartStreaming;
593
+ private onMediaDetaching;
594
+ private onBufferReset;
595
+ private resetBuffer;
596
+ private removeBuffer;
597
+ private resetQueue;
598
+ private onBufferCodecs;
599
+ get sourceBufferTracks(): BaseTrackSet;
600
+ private appendChangeType;
601
+ private blockAudio;
602
+ private unblockAudio;
603
+ private onBufferAppending;
604
+ private getFlushOp;
605
+ private onBufferFlushing;
606
+ private onFragParsed;
607
+ private onFragChanged;
608
+ get bufferedToEnd(): boolean;
609
+ private onBufferEos;
610
+ private tracksEnded;
611
+ private onLevelUpdated;
612
+ private updateDuration;
613
+ private onError;
614
+ private resetAppendErrors;
615
+ private trimBuffers;
616
+ private flushBackBuffer;
617
+ private flushFrontBuffer;
618
+ /**
619
+ * Update Media Source duration to current level duration or override to Infinity if configuration parameter
620
+ * 'liveDurationInfinity` is set to `true`
621
+ * More details: https://github.com/video-dev/hls.js/issues/355
622
+ */
623
+ private getDurationAndRange;
624
+ private updateMediaSource;
625
+ private get tracksReady();
626
+ private checkPendingTracks;
627
+ private bufferCreated;
628
+ private createSourceBuffers;
629
+ private clearBufferAppendTimeoutId;
630
+ private getTrackCodec;
631
+ private trackSourceBuffer;
632
+ private _onMediaSourceOpen;
633
+ private _onMediaSourceClose;
634
+ private _onMediaSourceEnded;
635
+ private _onMediaEmptied;
636
+ private _onMediaError;
637
+ private get mediaSrc();
638
+ private onSBUpdateStart;
639
+ private onSBUpdateEnd;
640
+ private onSBUpdateError;
641
+ private updateTimestampOffset;
642
+ private removeExecutor;
643
+ private appendExecutor;
644
+ private appendTimeoutHandler;
645
+ private calculateAppendTimeoutTime;
646
+ private blockUntilOpen;
647
+ private isUpdating;
648
+ private isQueued;
649
+ private isPending;
650
+ private blockBuffers;
651
+ private stepOperationQueue;
652
+ private append;
653
+ private appendBlocker;
654
+ private currentOp;
655
+ private executeNext;
656
+ private shiftAndExecuteNext;
657
+ private get pendingTrackCount();
658
+ private get sourceBufferCount();
659
+ private get sourceBufferTypes();
660
+ private addBufferListener;
661
+ private removeBufferListeners;
662
+ }
663
+
664
+ export declare type BufferControllerConfig = {
665
+ appendErrorMaxRetry: number;
666
+ appendTimeout: number;
667
+ backBufferLength: number;
668
+ frontBufferFlushThreshold: number;
669
+ liveDurationInfinity: boolean;
670
+ /**
671
+ * @deprecated use backBufferLength
672
+ */
673
+ liveBackBufferLength: number | null;
674
+ };
675
+
676
+ export declare interface BufferCreatedData {
677
+ tracks: BufferCreatedTrackSet;
678
+ }
679
+
680
+ export declare interface BufferCreatedTrack extends BaseTrack {
681
+ buffer: ExtendedSourceBuffer;
682
+ }
683
+
684
+ export declare type BufferCreatedTrackSet = Partial<Record<SourceBufferName, BufferCreatedTrack>>;
685
+
686
+ export declare interface BufferEOSData {
687
+ type?: SourceBufferName;
688
+ }
689
+
690
+ export declare interface BufferFlushedData {
691
+ type: SourceBufferName;
692
+ }
693
+
694
+ export declare interface BufferFlushingData {
695
+ startOffset: number;
696
+ endOffset: number;
697
+ endOffsetSubtitles?: number;
698
+ type: SourceBufferName | null;
699
+ }
700
+
701
+ export declare type BufferInfo = {
702
+ len: number;
703
+ start: number;
704
+ end: number;
705
+ nextStart?: number;
706
+ buffered?: BufferTimeRange[];
707
+ bufferedIndex: number;
708
+ };
709
+
710
+ /**
711
+ * Provides methods dealing with buffer length retrieval for example.
712
+ *
713
+ * In general, a helper around HTML5 MediaElement TimeRanges gathered from `buffered` property.
714
+ *
715
+ * Also @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/buffered
716
+ */
717
+ export declare type BufferTimeRange = {
718
+ start: number;
719
+ end: number;
720
+ };
721
+
722
+ export declare class CapLevelController implements ComponentAPI {
723
+ private hls;
724
+ private autoLevelCapping;
725
+ private media;
726
+ private restrictedLevels;
727
+ private timer?;
728
+ private observer?;
729
+ private clientRect;
730
+ private streamController?;
731
+ constructor(hls: Hls);
732
+ setStreamController(streamController: StreamController): void;
733
+ destroy(): void;
734
+ protected registerListeners(): void;
735
+ protected unregisterListener(): void;
736
+ protected onFpsDropLevelCapping(event: Events.FPS_DROP_LEVEL_CAPPING, data: FPSDropLevelCappingData): void;
737
+ protected onMediaAttaching(event: Events.MEDIA_ATTACHING, data: MediaAttachingData): void;
738
+ protected onManifestParsed(event: Events.MANIFEST_PARSED, data: ManifestParsedData): void;
739
+ private onLevelsUpdated;
740
+ protected onBufferCodecs(event: Events.BUFFER_CODECS, data: BufferCodecsData): void;
741
+ protected onMediaDetaching(): void;
742
+ detectPlayerSize(): void;
743
+ getMaxLevel(capLevelIndex: number): number;
744
+ private observe;
745
+ startCapping(): void;
746
+ stopCapping(): void;
747
+ getDimensions(): {
748
+ width: number;
749
+ height: number;
750
+ };
751
+ get mediaWidth(): number;
752
+ get mediaHeight(): number;
753
+ get contentScaleFactor(): number;
754
+ private isLevelAllowed;
755
+ static getMaxLevelByMediaSize(levels: Array<Level>, width: number, height: number): number;
756
+ }
757
+
758
+ export declare type CapLevelControllerConfig = {
759
+ capLevelToPlayerSize: boolean;
760
+ };
761
+
762
+ /**
763
+ * Keep a CEA-608 screen of 32x15 styled characters
764
+ * @constructor
765
+ */
766
+ export declare class CaptionScreen {
767
+ rows: Row[];
768
+ currRow: number;
769
+ nrRollUpRows: number | null;
770
+ lastOutputScreen: CaptionScreen | null;
771
+ logger: CaptionsLogger;
772
+ constructor(logger: CaptionsLogger);
773
+ reset(): void;
774
+ equals(other: CaptionScreen): boolean;
775
+ copy(other: CaptionScreen): void;
776
+ isEmpty(): boolean;
777
+ backSpace(): void;
778
+ clearToEndOfRow(): void;
779
+ /**
780
+ * Insert a character (without styling) in the current row.
781
+ */
782
+ insertChar(char: number): void;
783
+ setPen(styles: Partial<PenStyles>): void;
784
+ moveCursor(relPos: number): void;
785
+ setCursor(absPos: number): void;
786
+ setPAC(pacData: PACData): void;
787
+ /**
788
+ * Set background/extra foreground, but first do back_space, and then insert space (backwards compatibility).
789
+ */
790
+ setBkgData(bkgData: Partial<PenStyles>): void;
791
+ setRollUpRows(nrRows: number | null): void;
792
+ rollUp(): void;
793
+ /**
794
+ * Get all non-empty rows with as unicode text.
795
+ */
796
+ getDisplayText(asOneRow?: boolean): string;
797
+ getTextAndFormat(): Row[];
798
+ }
799
+
800
+ declare class CaptionsLogger {
801
+ time: number | null;
802
+ verboseLevel: VerboseLevel;
803
+ log(severity: VerboseLevel, msg: string | (() => string)): void;
804
+ }
805
+
806
+ export declare class ChunkMetadata {
807
+ readonly level: number;
808
+ readonly sn: number;
809
+ readonly part: number;
810
+ readonly id: number;
811
+ readonly size: number;
812
+ readonly partial: boolean;
813
+ readonly transmuxing: HlsChunkPerformanceTiming;
814
+ readonly buffering: {
815
+ [key in SourceBufferName]: HlsChunkPerformanceTiming;
816
+ };
817
+ constructor(level: number, sn: number, id: number, size?: number, part?: number, partial?: boolean);
818
+ }
819
+
820
+ /**
821
+ * Controller to deal with Common Media Client Data (CMCD)
822
+ * @see https://cdn.cta.tech/cta/media/media/resources/standards/pdfs/cta-5004-final.pdf
823
+ */
824
+ export declare class CMCDController implements ComponentAPI {
825
+ private hls;
826
+ private config;
827
+ private media?;
828
+ private sid?;
829
+ private cid?;
830
+ private useHeaders;
831
+ private includeKeys?;
832
+ private initialized;
833
+ private starved;
834
+ private buffering;
835
+ private audioBuffer?;
836
+ private videoBuffer?;
837
+ constructor(hls: Hls);
838
+ private registerListeners;
839
+ private unregisterListeners;
840
+ destroy(): void;
841
+ private onMediaAttached;
842
+ private onMediaDetached;
843
+ private onBufferCreated;
844
+ private onWaiting;
845
+ private onPlaying;
846
+ /**
847
+ * Create baseline CMCD data
848
+ */
849
+ private createData;
850
+ /**
851
+ * Apply CMCD data to a request.
852
+ */
853
+ private apply;
854
+ /**
855
+ * Apply CMCD data to a manifest request.
856
+ */
857
+ private applyPlaylistData;
858
+ /**
859
+ * Apply CMCD data to a segment request
860
+ */
861
+ private applyFragmentData;
862
+ private getNextFrag;
863
+ private getNextPart;
864
+ /**
865
+ * The CMCD object type.
866
+ */
867
+ private getObjectType;
868
+ /**
869
+ * Get the highest bitrate.
870
+ */
871
+ private getTopBandwidth;
872
+ /**
873
+ * Get the buffer length for a media type in milliseconds
874
+ */
875
+ private getBufferLength;
876
+ /**
877
+ * Create a playlist loader
878
+ */
879
+ private createPlaylistLoader;
880
+ /**
881
+ * Create a playlist loader
882
+ */
883
+ private createFragmentLoader;
884
+ }
885
+
886
+ export declare type CMCDControllerConfig = {
887
+ sessionId?: string;
888
+ contentId?: string;
889
+ useHeaders?: boolean;
890
+ includeKeys?: string[];
891
+ };
892
+
893
+ export declare interface CodecsParsed {
894
+ audioCodec?: string;
895
+ videoCodec?: string;
896
+ textCodec?: string;
897
+ unknownCodecs?: string[];
898
+ }
899
+
900
+ export declare interface ComponentAPI {
901
+ destroy(): void;
902
+ }
903
+
904
+ export declare class ContentSteeringController extends Logger implements NetworkComponentAPI {
905
+ private readonly hls;
906
+ private loader;
907
+ private uri;
908
+ private pathwayId;
909
+ private _pathwayPriority;
910
+ private timeToLoad;
911
+ private reloadTimer;
912
+ private updated;
913
+ private started;
914
+ private enabled;
915
+ private levels;
916
+ private audioTracks;
917
+ private subtitleTracks;
918
+ private penalizedPathways;
919
+ constructor(hls: Hls);
920
+ private registerListeners;
921
+ private unregisterListeners;
922
+ pathways(): string[];
923
+ get pathwayPriority(): string[] | null;
924
+ set pathwayPriority(pathwayPriority: string[]);
925
+ startLoad(): void;
926
+ stopLoad(): void;
927
+ clearTimeout(): void;
928
+ destroy(): void;
929
+ removeLevel(levelToRemove: Level): void;
930
+ private onManifestLoading;
931
+ private onManifestLoaded;
932
+ private onManifestParsed;
933
+ private onError;
934
+ filterParsedLevels(levels: Level[]): Level[];
935
+ private getLevelsForPathway;
936
+ private updatePathwayPriority;
937
+ private getPathwayForGroupId;
938
+ private clonePathways;
939
+ private loadSteeringManifest;
940
+ private scheduleRefresh;
941
+ }
942
+
943
+ export declare type ContentSteeringOptions = {
944
+ uri: string;
945
+ pathwayId: string;
946
+ };
947
+
948
+ export declare const Cues: CuesInterface;
949
+
950
+ export declare interface CuesInterface {
951
+ newCue(track: TextTrack | null, startTime: number, endTime: number, captionScreen: CaptionScreen): VTTCue[];
952
+ }
953
+
954
+ export declare interface CuesParsedData {
955
+ type: 'captions' | 'subtitles';
956
+ cues: any;
957
+ track: string;
958
+ }
959
+
960
+ export declare class DateRange {
961
+ attr: AttrList;
962
+ tagAnchor: MediaFragmentRef | null;
963
+ tagOrder: number;
964
+ private _startDate;
965
+ private _endDate?;
966
+ private _dateAtEnd?;
967
+ private _cue?;
968
+ private _badValueForSameId?;
969
+ constructor(dateRangeAttr: AttrList, dateRangeWithSameId?: DateRange | undefined, tagCount?: number);
970
+ get id(): string;
971
+ get class(): string;
972
+ get cue(): DateRangeCue;
973
+ get startTime(): number;
974
+ get startDate(): Date;
975
+ get endDate(): Date | null;
976
+ get duration(): number | null;
977
+ get plannedDuration(): number | null;
978
+ get endOnNext(): boolean;
979
+ get isInterstitial(): boolean;
980
+ get isValid(): boolean;
981
+ }
982
+
983
+ export declare type DateRangeCue = {
984
+ pre: boolean;
985
+ post: boolean;
986
+ once: boolean;
987
+ };
988
+
989
+ export declare interface DecryptData {
990
+ uri: string;
991
+ method: string;
992
+ keyFormat: string;
993
+ keyFormatVersions: number[];
994
+ iv: Uint8Array<ArrayBuffer> | null;
995
+ key: Uint8Array<ArrayBuffer> | null;
996
+ keyId: Uint8Array<ArrayBuffer> | null;
997
+ pssh: Uint8Array<ArrayBuffer> | null;
998
+ encrypted: boolean;
999
+ isCommonEncryption: boolean;
1000
+ }
1001
+
1002
+ export declare class Decrypter {
1003
+ private logEnabled;
1004
+ private removePKCS7Padding;
1005
+ private subtle;
1006
+ private softwareDecrypter;
1007
+ private key;
1008
+ private fastAesKey;
1009
+ private remainderData;
1010
+ private currentIV;
1011
+ private currentResult;
1012
+ private useSoftware;
1013
+ private enableSoftwareAES;
1014
+ constructor(config: HlsConfig, { removePKCS7Padding }?: {
1015
+ removePKCS7Padding?: boolean | undefined;
1016
+ });
1017
+ destroy(): void;
1018
+ isSync(): boolean;
1019
+ flush(): Uint8Array<ArrayBuffer> | null;
1020
+ reset(): void;
1021
+ decrypt(data: Uint8Array | ArrayBuffer, key: ArrayBuffer, iv: ArrayBuffer, aesMode: DecrypterAesMode): Promise<ArrayBuffer>;
1022
+ softwareDecrypt(data: Uint8Array, key: ArrayBuffer, iv: ArrayBuffer, aesMode: DecrypterAesMode): ArrayBuffer | null;
1023
+ webCryptoDecrypt(data: Uint8Array<ArrayBuffer>, key: ArrayBuffer, iv: ArrayBuffer, aesMode: DecrypterAesMode): Promise<ArrayBuffer>;
1024
+ private onWebCryptoError;
1025
+ private getValidChunk;
1026
+ private logOnce;
1027
+ }
1028
+
1029
+ export declare const enum DecrypterAesMode {
1030
+ cbc = 0,
1031
+ ctr = 1
1032
+ }
1033
+
1034
+ declare type DetItem = {
1035
+ classId: number;
1036
+ score: number;
1037
+ box: [number, number, number, number];
1038
+ reserved: [number, number, number, number];
1039
+ };
1040
+
1041
+ export declare type DRMSystemConfiguration = {
1042
+ licenseUrl: string;
1043
+ serverCertificateUrl?: string;
1044
+ generateRequest?: (this: Hls, initDataType: string, initData: ArrayBuffer | null, keyContext: MediaKeySessionContext) => {
1045
+ initDataType: string;
1046
+ initData: ArrayBuffer | null;
1047
+ } | undefined | never;
1048
+ };
1049
+
1050
+ export declare type DRMSystemOptions = {
1051
+ audioRobustness?: string;
1052
+ videoRobustness?: string;
1053
+ audioEncryptionScheme?: string | null;
1054
+ videoEncryptionScheme?: string | null;
1055
+ persistentState?: MediaKeysRequirement;
1056
+ distinctiveIdentifier?: MediaKeysRequirement;
1057
+ sessionTypes?: string[];
1058
+ sessionType?: string;
1059
+ };
1060
+
1061
+ export declare type DRMSystemsConfiguration = Partial<Record<KeySystems, DRMSystemConfiguration>>;
1062
+
1063
+ export declare interface ElementaryStreamInfo {
1064
+ startPTS: number;
1065
+ endPTS: number;
1066
+ startDTS: number;
1067
+ endDTS: number;
1068
+ partial?: boolean;
1069
+ }
1070
+
1071
+ export declare type ElementaryStreams = Record<ElementaryStreamTypes, ElementaryStreamInfo | null>;
1072
+
1073
+ export declare const enum ElementaryStreamTypes {
1074
+ AUDIO = "audio",
1075
+ VIDEO = "video",
1076
+ AUDIOVIDEO = "audiovideo"
1077
+ }
1078
+
1079
+ /**
1080
+ * Controller to deal with encrypted media extensions (EME)
1081
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/Encrypted_Media_Extensions_API
1082
+ *
1083
+ * @class
1084
+ * @constructor
1085
+ */
1086
+ export declare class EMEController extends Logger implements ComponentAPI {
1087
+ static CDMCleanupPromise: Promise<void> | void;
1088
+ private readonly hls;
1089
+ private readonly config;
1090
+ private media;
1091
+ private mediaResolved?;
1092
+ private keyFormatPromise;
1093
+ private keySystemAccessPromises;
1094
+ private _requestLicenseFailureCount;
1095
+ private mediaKeySessions;
1096
+ private keyIdToKeySessionPromise;
1097
+ private mediaKeys;
1098
+ private setMediaKeysQueue;
1099
+ private bannedKeyIds;
1100
+ constructor(hls: Hls);
1101
+ destroy(): void;
1102
+ private registerListeners;
1103
+ private unregisterListeners;
1104
+ private getLicenseServerUrl;
1105
+ private getLicenseServerUrlOrThrow;
1106
+ private getServerCertificateUrl;
1107
+ private attemptKeySystemAccess;
1108
+ private requestMediaKeySystemAccess;
1109
+ private getMediaKeysPromise;
1110
+ private createMediaKeySessionContext;
1111
+ private renewKeySession;
1112
+ private updateKeySession;
1113
+ getSelectedKeySystemFormats(): KeySystemFormats[];
1114
+ getKeySystemAccess(keySystemsToAttempt: KeySystems[]): Promise<void>;
1115
+ selectKeySystem(keySystemsToAttempt: KeySystems[]): Promise<KeySystemFormats>;
1116
+ selectKeySystemFormat(frag: Fragment): Promise<KeySystemFormats>;
1117
+ private getKeyFormatPromise;
1118
+ getKeyStatus(decryptdata: LevelKey): MediaKeyStatus | undefined;
1119
+ loadKey(data: KeyLoadedData): Promise<MediaKeySessionContext>;
1120
+ private throwIfDestroyed;
1121
+ private handleError;
1122
+ private getKeySystemForKeyPromise;
1123
+ private getKeySystemSelectionPromise;
1124
+ private onMediaEncrypted;
1125
+ private onWaitingForKey;
1126
+ private attemptSetMediaKeys;
1127
+ private generateRequestWithPreferredKeySession;
1128
+ private getKeyStatuses;
1129
+ private fetchServerCertificate;
1130
+ private setMediaKeysServerCertificate;
1131
+ private renewLicense;
1132
+ private unpackPlayReadyKeyMessage;
1133
+ private setupLicenseXHR;
1134
+ private requestLicense;
1135
+ private onDestroying;
1136
+ private onMediaAttached;
1137
+ private onMediaDetached;
1138
+ private _clear;
1139
+ private onManifestLoading;
1140
+ private onManifestLoaded;
1141
+ private removeSession;
1142
+ }
1143
+
1144
+ export declare type EMEControllerConfig = {
1145
+ licenseXhrSetup?: (this: Hls, xhr: XMLHttpRequest, url: string, keyContext: MediaKeySessionContext, licenseChallenge: Uint8Array) => void | Uint8Array | Promise<Uint8Array | void>;
1146
+ licenseResponseCallback?: (this: Hls, xhr: XMLHttpRequest, url: string, keyContext: MediaKeySessionContext) => ArrayBuffer;
1147
+ emeEnabled: boolean;
1148
+ widevineLicenseUrl?: string;
1149
+ drmSystems: DRMSystemsConfiguration | undefined;
1150
+ drmSystemOptions: DRMSystemOptions | undefined;
1151
+ requestMediaKeySystemAccessFunc: MediaKeyFunc | null;
1152
+ requireKeySystemAccessOnStart: boolean;
1153
+ };
1154
+
1155
+ export declare const enum ErrorActionFlags {
1156
+ None = 0,
1157
+ MoveAllAlternatesMatchingHost = 1,
1158
+ MoveAllAlternatesMatchingHDCP = 2,
1159
+ MoveAllAlternatesMatchingKey = 4,
1160
+ SwitchToSDR = 8,
1161
+ ResetMediaSource = 16
1162
+ }
1163
+
1164
+ export declare class ErrorController extends Logger implements NetworkComponentAPI {
1165
+ private readonly hls;
1166
+ private playlistError;
1167
+ constructor(hls: Hls);
1168
+ private registerListeners;
1169
+ private unregisterListeners;
1170
+ destroy(): void;
1171
+ startLoad(startPosition: number): void;
1172
+ stopLoad(): void;
1173
+ private getVariantLevelIndex;
1174
+ private getVariantIndex;
1175
+ private variantHasKey;
1176
+ private onManifestLoading;
1177
+ private onLevelUpdated;
1178
+ private onError;
1179
+ private getPlaylistRetryOrSwitchAction;
1180
+ private getFragRetryOrSwitchAction;
1181
+ private getLevelSwitchAction;
1182
+ onErrorOut(event: Events.ERROR, data: ErrorData): void;
1183
+ private sendAlternateToPenaltyBox;
1184
+ private switchLevel;
1185
+ }
1186
+
1187
+ export declare interface ErrorData {
1188
+ type: ErrorTypes;
1189
+ details: ErrorDetails;
1190
+ error: Error;
1191
+ fatal: boolean;
1192
+ errorAction?: IErrorAction;
1193
+ buffer?: number;
1194
+ bufferInfo?: BufferInfo;
1195
+ bytes?: number;
1196
+ chunkMeta?: ChunkMetadata;
1197
+ context?: PlaylistLoaderContext;
1198
+ decryptdata?: LevelKey;
1199
+ event?: keyof HlsListeners | 'demuxerWorker';
1200
+ frag?: Fragment;
1201
+ part?: Part | null;
1202
+ level?: number | undefined;
1203
+ levelRetry?: boolean;
1204
+ loader?: Loader<LoaderContext>;
1205
+ networkDetails?: NullableNetworkDetails;
1206
+ stalled?: {
1207
+ start: number;
1208
+ };
1209
+ stats?: LoaderStats;
1210
+ mimeType?: string;
1211
+ reason?: string;
1212
+ response?: LoaderResponse;
1213
+ url?: string;
1214
+ parent?: PlaylistLevelType;
1215
+ sourceBufferName?: SourceBufferName;
1216
+ interstitial?: InterstitialEvent;
1217
+ /**
1218
+ * @deprecated Use ErrorData.error
1219
+ */
1220
+ err?: {
1221
+ message: string;
1222
+ };
1223
+ }
1224
+
1225
+ export declare enum ErrorDetails {
1226
+ KEY_SYSTEM_NO_KEYS = "keySystemNoKeys",
1227
+ KEY_SYSTEM_NO_ACCESS = "keySystemNoAccess",
1228
+ KEY_SYSTEM_NO_SESSION = "keySystemNoSession",
1229
+ KEY_SYSTEM_NO_CONFIGURED_LICENSE = "keySystemNoConfiguredLicense",
1230
+ KEY_SYSTEM_LICENSE_REQUEST_FAILED = "keySystemLicenseRequestFailed",
1231
+ KEY_SYSTEM_SERVER_CERTIFICATE_REQUEST_FAILED = "keySystemServerCertificateRequestFailed",
1232
+ KEY_SYSTEM_SERVER_CERTIFICATE_UPDATE_FAILED = "keySystemServerCertificateUpdateFailed",
1233
+ KEY_SYSTEM_SESSION_UPDATE_FAILED = "keySystemSessionUpdateFailed",
1234
+ KEY_SYSTEM_STATUS_OUTPUT_RESTRICTED = "keySystemStatusOutputRestricted",
1235
+ KEY_SYSTEM_STATUS_INTERNAL_ERROR = "keySystemStatusInternalError",
1236
+ KEY_SYSTEM_DESTROY_MEDIA_KEYS_ERROR = "keySystemDestroyMediaKeysError",
1237
+ KEY_SYSTEM_DESTROY_CLOSE_SESSION_ERROR = "keySystemDestroyCloseSessionError",
1238
+ KEY_SYSTEM_DESTROY_REMOVE_SESSION_ERROR = "keySystemDestroyRemoveSessionError",
1239
+ MANIFEST_LOAD_ERROR = "manifestLoadError",
1240
+ MANIFEST_LOAD_TIMEOUT = "manifestLoadTimeOut",
1241
+ MANIFEST_PARSING_ERROR = "manifestParsingError",
1242
+ MANIFEST_INCOMPATIBLE_CODECS_ERROR = "manifestIncompatibleCodecsError",
1243
+ LEVEL_EMPTY_ERROR = "levelEmptyError",
1244
+ PLAYLIST_UNCHANGED_ERROR = "playlistUnchangedError",
1245
+ LEVEL_LOAD_ERROR = "levelLoadError",
1246
+ LEVEL_LOAD_TIMEOUT = "levelLoadTimeOut",
1247
+ LEVEL_PARSING_ERROR = "levelParsingError",
1248
+ LEVEL_SWITCH_ERROR = "levelSwitchError",
1249
+ AUDIO_TRACK_LOAD_ERROR = "audioTrackLoadError",
1250
+ AUDIO_TRACK_LOAD_TIMEOUT = "audioTrackLoadTimeOut",
1251
+ SUBTITLE_LOAD_ERROR = "subtitleTrackLoadError",
1252
+ SUBTITLE_TRACK_LOAD_TIMEOUT = "subtitleTrackLoadTimeOut",
1253
+ FRAG_LOAD_ERROR = "fragLoadError",
1254
+ FRAG_LOAD_TIMEOUT = "fragLoadTimeOut",
1255
+ FRAG_DECRYPT_ERROR = "fragDecryptError",
1256
+ FRAG_PARSING_ERROR = "fragParsingError",
1257
+ FRAG_GAP = "fragGap",
1258
+ REMUX_ALLOC_ERROR = "remuxAllocError",
1259
+ KEY_LOAD_ERROR = "keyLoadError",
1260
+ KEY_LOAD_TIMEOUT = "keyLoadTimeOut",
1261
+ BUFFER_ADD_CODEC_ERROR = "bufferAddCodecError",
1262
+ BUFFER_INCOMPATIBLE_CODECS_ERROR = "bufferIncompatibleCodecsError",
1263
+ BUFFER_APPEND_ERROR = "bufferAppendError",
1264
+ BUFFER_APPENDING_ERROR = "bufferAppendingError",
1265
+ BUFFER_STALLED_ERROR = "bufferStalledError",
1266
+ BUFFER_FULL_ERROR = "bufferFullError",
1267
+ BUFFER_SEEK_OVER_HOLE = "bufferSeekOverHole",
1268
+ BUFFER_NUDGE_ON_STALL = "bufferNudgeOnStall",
1269
+ ASSET_LIST_LOAD_ERROR = "assetListLoadError",
1270
+ ASSET_LIST_LOAD_TIMEOUT = "assetListLoadTimeout",
1271
+ ASSET_LIST_PARSING_ERROR = "assetListParsingError",
1272
+ INTERSTITIAL_ASSET_ITEM_ERROR = "interstitialAssetItemError",
1273
+ INTERNAL_EXCEPTION = "internalException",
1274
+ INTERNAL_ABORTED = "aborted",
1275
+ ATTACH_MEDIA_ERROR = "attachMediaError",
1276
+ MEDIA_SOURCE_REQUIRES_RESET = "mediaSourceRequiresReset",
1277
+ UNKNOWN = "unknown"
1278
+ }
1279
+
1280
+ export declare enum ErrorTypes {
1281
+ NETWORK_ERROR = "networkError",
1282
+ MEDIA_ERROR = "mediaError",
1283
+ KEY_SYSTEM_ERROR = "keySystemError",
1284
+ MUX_ERROR = "muxError",
1285
+ OTHER_ERROR = "otherError"
1286
+ }
1287
+
1288
+ export declare enum Events {
1289
+ MEDIA_ATTACHING = "hlsMediaAttaching",
1290
+ MEDIA_ATTACHED = "hlsMediaAttached",
1291
+ MEDIA_DETACHING = "hlsMediaDetaching",
1292
+ MEDIA_DETACHED = "hlsMediaDetached",
1293
+ MEDIA_ENDED = "hlsMediaEnded",
1294
+ STALL_RESOLVED = "hlsStallResolved",
1295
+ BUFFER_RESET = "hlsBufferReset",
1296
+ BUFFER_CODECS = "hlsBufferCodecs",
1297
+ BUFFER_CREATED = "hlsBufferCreated",
1298
+ BUFFER_APPENDING = "hlsBufferAppending",
1299
+ BUFFER_APPENDED = "hlsBufferAppended",
1300
+ BUFFER_EOS = "hlsBufferEos",
1301
+ BUFFERED_TO_END = "hlsBufferedToEnd",
1302
+ BUFFER_FLUSHING = "hlsBufferFlushing",
1303
+ BUFFER_FLUSHED = "hlsBufferFlushed",
1304
+ MANIFEST_LOADING = "hlsManifestLoading",
1305
+ MANIFEST_LOADED = "hlsManifestLoaded",
1306
+ MANIFEST_PARSED = "hlsManifestParsed",
1307
+ LEVEL_SWITCHING = "hlsLevelSwitching",
1308
+ LEVEL_SWITCHED = "hlsLevelSwitched",
1309
+ LEVEL_LOADING = "hlsLevelLoading",
1310
+ LEVEL_LOADED = "hlsLevelLoaded",
1311
+ LEVEL_UPDATED = "hlsLevelUpdated",
1312
+ LEVEL_PTS_UPDATED = "hlsLevelPtsUpdated",
1313
+ LEVELS_UPDATED = "hlsLevelsUpdated",
1314
+ AUDIO_TRACKS_UPDATED = "hlsAudioTracksUpdated",
1315
+ AUDIO_TRACK_SWITCHING = "hlsAudioTrackSwitching",
1316
+ AUDIO_TRACK_SWITCHED = "hlsAudioTrackSwitched",
1317
+ AUDIO_TRACK_LOADING = "hlsAudioTrackLoading",
1318
+ AUDIO_TRACK_LOADED = "hlsAudioTrackLoaded",
1319
+ AUDIO_TRACK_UPDATED = "hlsAudioTrackUpdated",
1320
+ SUBTITLE_TRACKS_UPDATED = "hlsSubtitleTracksUpdated",
1321
+ SUBTITLE_TRACKS_CLEARED = "hlsSubtitleTracksCleared",
1322
+ SUBTITLE_TRACK_SWITCH = "hlsSubtitleTrackSwitch",
1323
+ SUBTITLE_TRACK_LOADING = "hlsSubtitleTrackLoading",
1324
+ SUBTITLE_TRACK_LOADED = "hlsSubtitleTrackLoaded",
1325
+ SUBTITLE_TRACK_UPDATED = "hlsSubtitleTrackUpdated",
1326
+ SUBTITLE_FRAG_PROCESSED = "hlsSubtitleFragProcessed",
1327
+ CUES_PARSED = "hlsCuesParsed",
1328
+ NON_NATIVE_TEXT_TRACKS_FOUND = "hlsNonNativeTextTracksFound",
1329
+ INIT_PTS_FOUND = "hlsInitPtsFound",
1330
+ FRAG_LOADING = "hlsFragLoading",
1331
+ FRAG_LOAD_EMERGENCY_ABORTED = "hlsFragLoadEmergencyAborted",
1332
+ FRAG_LOADED = "hlsFragLoaded",
1333
+ FRAG_DECRYPTED = "hlsFragDecrypted",
1334
+ FRAG_PARSING_INIT_SEGMENT = "hlsFragParsingInitSegment",
1335
+ FRAG_PARSING_USERDATA = "hlsFragParsingUserdata",
1336
+ FRAG_PARSING_METADATA = "hlsFragParsingMetadata",
1337
+ FRAG_PARSED = "hlsFragParsed",
1338
+ FRAG_BUFFERED = "hlsFragBuffered",
1339
+ FRAG_CHANGED = "hlsFragChanged",
1340
+ ALGO_DATA_LOADING = "hlsAlgoDataLoading",
1341
+ ALGO_DATA_LOADED = "hlsAlgoDataLoaded",
1342
+ ALGO_DATA_ERROR = "hlsAlgoDataError",
1343
+ FPS_DROP = "hlsFpsDrop",
1344
+ FPS_DROP_LEVEL_CAPPING = "hlsFpsDropLevelCapping",
1345
+ MAX_AUTO_LEVEL_UPDATED = "hlsMaxAutoLevelUpdated",
1346
+ ERROR = "hlsError",
1347
+ DESTROYING = "hlsDestroying",
1348
+ KEY_LOADING = "hlsKeyLoading",
1349
+ KEY_LOADED = "hlsKeyLoaded",
1350
+ LIVE_BACK_BUFFER_REACHED = "hlsLiveBackBufferReached",
1351
+ BACK_BUFFER_REACHED = "hlsBackBufferReached",
1352
+ STEERING_MANIFEST_LOADED = "hlsSteeringManifestLoaded",
1353
+ ASSET_LIST_LOADING = "hlsAssetListLoading",
1354
+ ASSET_LIST_LOADED = "hlsAssetListLoaded",
1355
+ INTERSTITIALS_UPDATED = "hlsInterstitialsUpdated",
1356
+ INTERSTITIALS_BUFFERED_TO_BOUNDARY = "hlsInterstitialsBufferedToBoundary",
1357
+ INTERSTITIAL_ASSET_PLAYER_CREATED = "hlsInterstitialAssetPlayerCreated",
1358
+ INTERSTITIAL_STARTED = "hlsInterstitialStarted",
1359
+ INTERSTITIAL_ASSET_STARTED = "hlsInterstitialAssetStarted",
1360
+ INTERSTITIAL_ASSET_ENDED = "hlsInterstitialAssetEnded",
1361
+ INTERSTITIAL_ASSET_ERROR = "hlsInterstitialAssetError",
1362
+ INTERSTITIAL_ENDED = "hlsInterstitialEnded",
1363
+ INTERSTITIALS_PRIMARY_RESUMED = "hlsInterstitialsPrimaryResumed",
1364
+ PLAYOUT_LIMIT_REACHED = "hlsPlayoutLimitReached",
1365
+ EVENT_CUE_ENTER = "hlsEventCueEnter"
1366
+ }
1367
+
1368
+ export declare class EwmaBandWidthEstimator {
1369
+ private defaultEstimate_;
1370
+ private minWeight_;
1371
+ private minDelayMs_;
1372
+ private slow_;
1373
+ private fast_;
1374
+ private defaultTTFB_;
1375
+ private ttfb_;
1376
+ constructor(slow: number, fast: number, defaultEstimate: number, defaultTTFB?: number);
1377
+ update(slow: number, fast: number): void;
1378
+ sample(durationMs: number, numBytes: number): void;
1379
+ sampleTTFB(ttfb: number): void;
1380
+ canEstimate(): boolean;
1381
+ getEstimate(): number;
1382
+ getEstimateTTFB(): number;
1383
+ get defaultEstimate(): number;
1384
+ destroy(): void;
1385
+ }
1386
+
1387
+ export declare type ExtendedSourceBuffer = SourceBuffer & {
1388
+ onbufferedchange?: ((this: SourceBuffer, ev: Event) => any) | null;
1389
+ };
1390
+
1391
+ export declare class FetchLoader implements Loader<LoaderContext> {
1392
+ private fetchSetup;
1393
+ private requestTimeout?;
1394
+ private request;
1395
+ private response;
1396
+ private controller;
1397
+ context: LoaderContext | null;
1398
+ private config;
1399
+ private callbacks;
1400
+ stats: LoaderStats;
1401
+ private loader;
1402
+ constructor(config: HlsConfig);
1403
+ destroy(): void;
1404
+ abortInternal(): void;
1405
+ abort(): void;
1406
+ load(context: LoaderContext, config: LoaderConfiguration, callbacks: LoaderCallbacks<LoaderContext>): void;
1407
+ getCacheAge(): number | null;
1408
+ getResponseHeader(name: string): string | null;
1409
+ private loadProgressively;
1410
+ }
1411
+
1412
+ export declare class FPSController implements ComponentAPI {
1413
+ private hls;
1414
+ private isVideoPlaybackQualityAvailable;
1415
+ private timer?;
1416
+ private media;
1417
+ private lastTime;
1418
+ private lastDroppedFrames;
1419
+ private lastDecodedFrames;
1420
+ private streamController;
1421
+ constructor(hls: Hls);
1422
+ setStreamController(streamController: StreamController): void;
1423
+ protected registerListeners(): void;
1424
+ protected unregisterListeners(): void;
1425
+ destroy(): void;
1426
+ protected onMediaAttaching(event: Events.MEDIA_ATTACHING, data: MediaAttachingData): void;
1427
+ private onMediaDetaching;
1428
+ checkFPS(video: HTMLVideoElement, decodedFrames: number, droppedFrames: number): void;
1429
+ checkFPSInterval(): void;
1430
+ }
1431
+
1432
+ export declare type FPSControllerConfig = {
1433
+ capLevelOnFPSDrop: boolean;
1434
+ fpsDroppedMonitoringPeriod: number;
1435
+ fpsDroppedMonitoringThreshold: number;
1436
+ };
1437
+
1438
+ export declare interface FPSDropData {
1439
+ currentDropped: number;
1440
+ currentDecoded: number;
1441
+ totalDroppedFrames: number;
1442
+ }
1443
+
1444
+ export declare interface FPSDropLevelCappingData {
1445
+ droppedLevel: number;
1446
+ level: number;
1447
+ }
1448
+
1449
+ export declare interface FragBufferedData {
1450
+ stats: LoadStats;
1451
+ frag: Fragment;
1452
+ part: Part | null;
1453
+ id: string;
1454
+ }
1455
+
1456
+ export declare interface FragChangedData {
1457
+ frag: Fragment;
1458
+ }
1459
+
1460
+ export declare interface FragDecryptedData {
1461
+ frag: Fragment;
1462
+ payload: ArrayBuffer;
1463
+ stats: {
1464
+ tstart: number;
1465
+ tdecrypt: number;
1466
+ };
1467
+ }
1468
+
1469
+ export declare interface FragLoadedData {
1470
+ frag: Fragment;
1471
+ part: Part | null;
1472
+ payload: ArrayBuffer;
1473
+ networkDetails: NullableNetworkDetails;
1474
+ }
1475
+
1476
+ export declare interface FragLoadEmergencyAbortedData {
1477
+ frag: Fragment;
1478
+ part: Part | null;
1479
+ stats: LoaderStats;
1480
+ }
1481
+
1482
+ export declare interface FragLoadFailResult extends ErrorData {
1483
+ frag: Fragment;
1484
+ part?: Part;
1485
+ response?: {
1486
+ data: any;
1487
+ code: number;
1488
+ text: string;
1489
+ url: string;
1490
+ };
1491
+ networkDetails: NullableNetworkDetails;
1492
+ }
1493
+
1494
+ export declare interface FragLoadingData {
1495
+ frag: Fragment;
1496
+ part?: Part;
1497
+ targetBufferTime: number | null;
1498
+ }
1499
+
1500
+ /**
1501
+ * Object representing parsed data from an HLS Segment. Found in {@link hls.js#LevelDetails.fragments}.
1502
+ */
1503
+ export declare class Fragment extends BaseSegment {
1504
+ private _decryptdata;
1505
+ private _programDateTime;
1506
+ private _ref;
1507
+ private _bitrate?;
1508
+ rawProgramDateTime: string | null;
1509
+ tagList: Array<string[]>;
1510
+ duration: number;
1511
+ sn: number | 'initSegment';
1512
+ levelkeys?: {
1513
+ [key: string]: LevelKey | undefined;
1514
+ };
1515
+ readonly type: PlaylistLevelType;
1516
+ loader: Loader<FragmentLoaderContext> | null;
1517
+ keyLoader: Loader<KeyLoaderContext> | null;
1518
+ level: number;
1519
+ cc: number;
1520
+ startPTS?: number;
1521
+ endPTS?: number;
1522
+ startDTS?: number;
1523
+ endDTS?: number;
1524
+ start: number;
1525
+ playlistOffset: number;
1526
+ deltaPTS?: number;
1527
+ maxStartPTS?: number;
1528
+ minEndPTS?: number;
1529
+ data?: Uint8Array;
1530
+ bitrateTest: boolean;
1531
+ title: string | null;
1532
+ initSegment: Fragment | null;
1533
+ endList?: boolean;
1534
+ gap?: boolean;
1535
+ urlId: number;
1536
+ constructor(type: PlaylistLevelType, base: Base | string);
1537
+ get byteLength(): number | null;
1538
+ get bitrate(): number | null;
1539
+ set bitrate(value: number);
1540
+ get decryptdata(): LevelKey | null;
1541
+ get end(): number;
1542
+ get endProgramDateTime(): number | null;
1543
+ get encrypted(): boolean;
1544
+ get programDateTime(): number | null;
1545
+ set programDateTime(value: number | null);
1546
+ get ref(): MediaFragmentRef | null;
1547
+ addStart(value: number): void;
1548
+ setStart(value: number): void;
1549
+ setDuration(value: number): void;
1550
+ setKeyFormat(keyFormat: KeySystemFormats): void;
1551
+ abortRequests(): void;
1552
+ setElementaryStreamInfo(type: ElementaryStreamTypes, startPTS: number, endPTS: number, startDTS: number, endDTS: number, partial?: boolean): void;
1553
+ }
1554
+
1555
+ export declare class FragmentLoader {
1556
+ private readonly config;
1557
+ private loader;
1558
+ private partLoadTimeout;
1559
+ constructor(config: HlsConfig);
1560
+ destroy(): void;
1561
+ abort(): void;
1562
+ load(frag: Fragment, onProgress?: FragmentLoadProgressCallback): Promise<FragLoadedData>;
1563
+ loadPart(frag: Fragment, part: Part, onProgress: FragmentLoadProgressCallback): Promise<FragLoadedData>;
1564
+ private updateStatsFromPart;
1565
+ private resetLoader;
1566
+ }
1567
+
1568
+ /**
1569
+ * @deprecated use fragLoadPolicy.default
1570
+ */
1571
+ export declare type FragmentLoaderConfig = {
1572
+ fragLoadingTimeOut: number;
1573
+ fragLoadingMaxRetry: number;
1574
+ fragLoadingRetryDelay: number;
1575
+ fragLoadingMaxRetryTimeout: number;
1576
+ };
1577
+
1578
+ export declare interface FragmentLoaderConstructor {
1579
+ new (confg: HlsConfig): Loader<FragmentLoaderContext>;
1580
+ }
1581
+
1582
+ export declare interface FragmentLoaderContext extends LoaderContext {
1583
+ frag: Fragment;
1584
+ part: Part | null;
1585
+ resetIV?: boolean;
1586
+ }
1587
+
1588
+ export declare type FragmentLoadProgressCallback = (result: FragLoadedData | PartsLoadedData) => void;
1589
+
1590
+ export declare const enum FragmentState {
1591
+ NOT_LOADED = "NOT_LOADED",
1592
+ APPENDING = "APPENDING",
1593
+ PARTIAL = "PARTIAL",
1594
+ OK = "OK"
1595
+ }
1596
+
1597
+ export declare class FragmentTracker implements ComponentAPI {
1598
+ private activePartLists;
1599
+ private endListFragments;
1600
+ private fragments;
1601
+ private timeRanges;
1602
+ private bufferPadding;
1603
+ private hls;
1604
+ private hasGaps;
1605
+ constructor(hls: Hls);
1606
+ private _registerListeners;
1607
+ private _unregisterListeners;
1608
+ destroy(): void;
1609
+ /**
1610
+ * Return a Fragment or Part with an appended range that matches the position and levelType
1611
+ * Otherwise, return null
1612
+ */
1613
+ getAppendedFrag(position: number, levelType: PlaylistLevelType): MediaFragment | Part | null;
1614
+ /**
1615
+ * Return a buffered Fragment that matches the position and levelType.
1616
+ * A buffered Fragment is one whose loading, parsing and appending is done (completed or "partial" meaning aborted).
1617
+ * If not found any Fragment, return null
1618
+ */
1619
+ getBufferedFrag(position: number, levelType: PlaylistLevelType): MediaFragment | null;
1620
+ getFragAtPos(position: number, levelType: PlaylistLevelType, buffered?: boolean): MediaFragment | null;
1621
+ /**
1622
+ * Partial fragments effected by coded frame eviction will be removed
1623
+ * The browser will unload parts of the buffer to free up memory for new buffer data
1624
+ * 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)
1625
+ */
1626
+ detectEvictedFragments(elementaryStream: SourceBufferName, timeRange: TimeRanges, playlistType: PlaylistLevelType, appendedPart?: Part | null, removeAppending?: boolean): void;
1627
+ /**
1628
+ * Checks if the fragment passed in is loaded in the buffer properly
1629
+ * Partially loaded fragments will be registered as a partial fragment
1630
+ */
1631
+ detectPartialFragments(data: FragBufferedData): void;
1632
+ private bufferedEnd;
1633
+ private removeParts;
1634
+ fragBuffered(frag: MediaFragment, force?: true): void;
1635
+ private getBufferedTimes;
1636
+ /**
1637
+ * Gets the partial fragment for a certain time
1638
+ */
1639
+ getPartialFragment(time: number): MediaFragment | null;
1640
+ isEndListAppended(type: PlaylistLevelType): boolean;
1641
+ getState(fragment: Fragment): FragmentState;
1642
+ private isTimeBuffered;
1643
+ private onManifestLoading;
1644
+ private onFragLoaded;
1645
+ private onBufferAppended;
1646
+ private onFragBuffered;
1647
+ private hasFragment;
1648
+ hasFragments(type?: PlaylistLevelType): boolean;
1649
+ hasParts(type: PlaylistLevelType): boolean;
1650
+ removeFragmentsInRange(start: number, end: number, playlistType: PlaylistLevelType, withGapOnly?: boolean, unbufferedOnly?: boolean): void;
1651
+ removeFragment(fragment: Fragment): void;
1652
+ removeAllFragments(): void;
1653
+ }
1654
+
1655
+ export declare interface FragParsedData {
1656
+ frag: Fragment;
1657
+ part: Part | null;
1658
+ }
1659
+
1660
+ export declare interface FragParsingInitSegmentData {
1661
+ }
1662
+
1663
+ export declare interface FragParsingMetadataData {
1664
+ id: string;
1665
+ frag: Fragment;
1666
+ details: LevelDetails;
1667
+ samples: MetadataSample[];
1668
+ }
1669
+
1670
+ export declare interface FragParsingUserdataData {
1671
+ id: string;
1672
+ frag: Fragment;
1673
+ details: LevelDetails;
1674
+ samples: UserdataSample[];
1675
+ }
1676
+
1677
+ declare type FrameItem = {
1678
+ frameIdx: number;
1679
+ autoCameras: AutoCameraItem;
1680
+ tracks: TrackItem[];
1681
+ detections: DetItem[];
1682
+ };
1683
+
1684
+ export declare type GapControllerConfig = {
1685
+ detectStallWithCurrentTimeMs: number;
1686
+ highBufferWatchdogPeriod: number;
1687
+ nudgeOffset: number;
1688
+ nudgeMaxRetry: number;
1689
+ nudgeOnVideoHole: boolean;
1690
+ skipBufferHolePadding: number;
1691
+ };
1692
+
1693
+ export declare type HdcpLevel = (typeof HdcpLevels)[number];
1694
+
1695
+ export declare const HdcpLevels: readonly ["NONE", "TYPE-0", "TYPE-1", null];
1696
+
1697
+ /**
1698
+ * The `Hls` class is the core of the HLS.js library used to instantiate player instances.
1699
+ * @public
1700
+ */
1701
+ declare class Hls implements HlsEventEmitter {
1702
+ private static defaultConfig;
1703
+ /**
1704
+ * The runtime configuration used by the player. At instantiation this is combination of `hls.userConfig` merged over `Hls.DefaultConfig`.
1705
+ */
1706
+ readonly config: HlsConfig;
1707
+ /**
1708
+ * The configuration object provided on player instantiation.
1709
+ */
1710
+ readonly userConfig: Partial<HlsConfig>;
1711
+ /**
1712
+ * The logger functions used by this player instance, configured on player instantiation.
1713
+ */
1714
+ readonly logger: ILogger;
1715
+ private coreComponents;
1716
+ private networkControllers;
1717
+ private _emitter;
1718
+ private _autoLevelCapping;
1719
+ private _maxHdcpLevel;
1720
+ private abrController;
1721
+ private bufferController;
1722
+ private capLevelController;
1723
+ private latencyController;
1724
+ private levelController;
1725
+ private streamController;
1726
+ private algoDataController?;
1727
+ private audioStreamController?;
1728
+ private subtititleStreamController?;
1729
+ private audioTrackController?;
1730
+ private subtitleTrackController?;
1731
+ private interstitialsController?;
1732
+ private gapController;
1733
+ private emeController?;
1734
+ private cmcdController?;
1735
+ private _media;
1736
+ private _url;
1737
+ private _sessionId?;
1738
+ private triggeringException?;
1739
+ private started;
1740
+ /**
1741
+ * Get the video-dev/hls.js package version.
1742
+ */
1743
+ static get version(): string;
1744
+ /**
1745
+ * Check if the required MediaSource Extensions are available.
1746
+ */
1747
+ static isMSESupported(): boolean;
1748
+ /**
1749
+ * Check if MediaSource Extensions are available and isTypeSupported checks pass for any baseline codecs.
1750
+ */
1751
+ static isSupported(): boolean;
1752
+ /**
1753
+ * Get the MediaSource global used for MSE playback (ManagedMediaSource, MediaSource, or WebKitMediaSource).
1754
+ */
1755
+ static getMediaSource(): typeof MediaSource | undefined;
1756
+ static get Events(): typeof Events;
1757
+ static get MetadataSchema(): typeof MetadataSchema;
1758
+ static get ErrorTypes(): typeof ErrorTypes;
1759
+ static get ErrorDetails(): typeof ErrorDetails;
1760
+ /**
1761
+ * Get the default configuration applied to new instances.
1762
+ */
1763
+ static get DefaultConfig(): HlsConfig;
1764
+ /**
1765
+ * Replace the default configuration applied to new instances.
1766
+ */
1767
+ static set DefaultConfig(defaultConfig: HlsConfig);
1768
+ /**
1769
+ * Creates an instance of an HLS client that can attach to exactly one `HTMLMediaElement`.
1770
+ * @param userConfig - Configuration options applied over `Hls.DefaultConfig`
1771
+ */
1772
+ constructor(userConfig?: Partial<HlsConfig>);
1773
+ createController(ControllerClass: any, components: any): any;
1774
+ on<E extends keyof HlsListeners, Context = undefined>(event: E, listener: HlsListeners[E], context?: Context): void;
1775
+ once<E extends keyof HlsListeners, Context = undefined>(event: E, listener: HlsListeners[E], context?: Context): void;
1776
+ removeAllListeners<E extends keyof HlsListeners>(event?: E | undefined): void;
1777
+ off<E extends keyof HlsListeners, Context = undefined>(event: E, listener?: HlsListeners[E] | undefined, context?: Context, once?: boolean | undefined): void;
1778
+ listeners<E extends keyof HlsListeners>(event: E): HlsListeners[E][];
1779
+ emit<E extends keyof HlsListeners>(event: E, name: E, eventObject: Parameters<HlsListeners[E]>[1]): boolean;
1780
+ trigger<E extends keyof HlsListeners>(event: E, eventObject: Parameters<HlsListeners[E]>[1]): boolean;
1781
+ listenerCount<E extends keyof HlsListeners>(event: E): number;
1782
+ /**
1783
+ * Dispose of the instance
1784
+ */
1785
+ destroy(): void;
1786
+ /**
1787
+ * Attaches Hls.js to a media element
1788
+ */
1789
+ attachMedia(data: HTMLMediaElement | MediaAttachingData): void;
1790
+ /**
1791
+ * Detach Hls.js from the media
1792
+ */
1793
+ detachMedia(): void;
1794
+ /**
1795
+ * Detach HTMLMediaElement, MediaSource, and SourceBuffers without reset, for attaching to another instance
1796
+ */
1797
+ transferMedia(): AttachMediaSourceData | null;
1798
+ /**
1799
+ * Set the source URL. Can be relative or absolute.
1800
+ */
1801
+ loadSource(url: string): void;
1802
+ /**
1803
+ * Gets the currently loaded URL
1804
+ */
1805
+ get url(): string | null;
1806
+ /**
1807
+ * Whether or not enough has been buffered to seek to start position or use `media.currentTime` to determine next load position
1808
+ */
1809
+ get hasEnoughToStart(): boolean;
1810
+ /**
1811
+ * Get the startPosition set on startLoad(position) or on autostart with config.startPosition
1812
+ */
1813
+ get startPosition(): number;
1814
+ /**
1815
+ * Start loading data from the stream source.
1816
+ * Depending on default config, client starts loading automatically when a source is set.
1817
+ *
1818
+ * @param startPosition - Set the start position to stream from.
1819
+ * Defaults to -1 (None: starts from earliest point)
1820
+ */
1821
+ startLoad(startPosition?: number, skipSeekToStartPosition?: boolean): void;
1822
+ /**
1823
+ * Stop loading of any stream data.
1824
+ */
1825
+ stopLoad(): void;
1826
+ /**
1827
+ * Returns whether loading, toggled with `startLoad()` and `stopLoad()`, is active or not`.
1828
+ */
1829
+ get loadingEnabled(): boolean;
1830
+ /**
1831
+ * 根据时间获取算法帧数据
1832
+ */
1833
+ getAlgoFrameByTime(time: number): FrameItem | null;
1834
+ /**
1835
+ * 根据帧索引获取算法帧数据(1-based)
1836
+ */
1837
+ getAlgoFrameByIndex(frameIdx: number): FrameItem | null;
1838
+ /**
1839
+ * 判断时间点的算法数据是否已就绪
1840
+ */
1841
+ isAlgoDataReady(time: number): boolean;
1842
+ /**
1843
+ * 判断帧索引的算法数据是否已就绪(1-based)
1844
+ */
1845
+ isAlgoDataReadyByIndex(frameIdx: number): boolean;
1846
+ getAllCachedAlgoChunks(): AlgoChunk[];
1847
+ /**
1848
+ * Returns state of fragment loading toggled by calling `pauseBuffering()` and `resumeBuffering()`.
1849
+ */
1850
+ get bufferingEnabled(): boolean;
1851
+ /**
1852
+ * Resumes stream controller segment loading after `pauseBuffering` has been called.
1853
+ */
1854
+ resumeBuffering(): void;
1855
+ /**
1856
+ * Prevents stream controller from loading new segments until `resumeBuffering` is called.
1857
+ * This allows for media buffering to be paused without interupting playlist loading.
1858
+ */
1859
+ pauseBuffering(): void;
1860
+ get inFlightFragments(): InFlightFragments;
1861
+ /**
1862
+ * Swap through possible audio codecs in the stream (for example to switch from stereo to 5.1)
1863
+ */
1864
+ swapAudioCodec(): void;
1865
+ /**
1866
+ * When the media-element fails, this allows to detach and then re-attach it
1867
+ * as one call (convenience method).
1868
+ *
1869
+ * Automatic recovery of media-errors by this process is configurable.
1870
+ */
1871
+ recoverMediaError(): void;
1872
+ removeLevel(levelIndex: number): void;
1873
+ /**
1874
+ * @returns a UUID for this player instance
1875
+ */
1876
+ get sessionId(): string;
1877
+ /**
1878
+ * @returns an array of levels (variants) sorted by HDCP-LEVEL, RESOLUTION (height), FRAME-RATE, CODECS, VIDEO-RANGE, and BANDWIDTH
1879
+ */
1880
+ get levels(): Level[];
1881
+ /**
1882
+ * @returns LevelDetails of last loaded level (variant) or `null` prior to loading a media playlist.
1883
+ */
1884
+ get latestLevelDetails(): LevelDetails | null;
1885
+ /**
1886
+ * @returns Level object of selected level (variant) or `null` prior to selecting a level or once the level is removed.
1887
+ */
1888
+ get loadLevelObj(): Level | null;
1889
+ /**
1890
+ * Index of quality level (variant) currently played
1891
+ */
1892
+ get currentLevel(): number;
1893
+ /**
1894
+ * Set quality level index immediately. This will flush the current buffer to replace the quality asap. That means playback will interrupt at least shortly to re-buffer and re-sync eventually. Set to -1 for automatic level selection.
1895
+ */
1896
+ set currentLevel(newLevel: number);
1897
+ /**
1898
+ * Index of next quality level loaded as scheduled by stream controller.
1899
+ */
1900
+ get nextLevel(): number;
1901
+ /**
1902
+ * Set quality level index for next loaded data.
1903
+ * This will switch the video quality asap, without interrupting playback.
1904
+ * May abort current loading of data, and flush parts of buffer (outside currently played fragment region).
1905
+ * @param newLevel - Pass -1 for automatic level selection
1906
+ */
1907
+ set nextLevel(newLevel: number);
1908
+ /**
1909
+ * Return the quality level of the currently or last (of none is loaded currently) segment
1910
+ */
1911
+ get loadLevel(): number;
1912
+ /**
1913
+ * Set quality level index for next loaded data in a conservative way.
1914
+ * This will switch the quality without flushing, but interrupt current loading.
1915
+ * Thus the moment when the quality switch will appear in effect will only be after the already existing buffer.
1916
+ * @param newLevel - Pass -1 for automatic level selection
1917
+ */
1918
+ set loadLevel(newLevel: number);
1919
+ /**
1920
+ * get next quality level loaded
1921
+ */
1922
+ get nextLoadLevel(): number;
1923
+ /**
1924
+ * Set quality level of next loaded segment in a fully "non-destructive" way.
1925
+ * Same as `loadLevel` but will wait for next switch (until current loading is done).
1926
+ */
1927
+ set nextLoadLevel(level: number);
1928
+ /**
1929
+ * Return "first level": like a default level, if not set,
1930
+ * falls back to index of first level referenced in manifest
1931
+ */
1932
+ get firstLevel(): number;
1933
+ /**
1934
+ * Sets "first-level", see getter.
1935
+ */
1936
+ set firstLevel(newLevel: number);
1937
+ /**
1938
+ * Return the desired start level for the first fragment that will be loaded.
1939
+ * The default value of -1 indicates automatic start level selection.
1940
+ * Setting hls.nextAutoLevel without setting a startLevel will result in
1941
+ * the nextAutoLevel value being used for one fragment load.
1942
+ */
1943
+ get startLevel(): number;
1944
+ /**
1945
+ * set start level (level of first fragment that will be played back)
1946
+ * if not overrided by user, first level appearing in manifest will be used as start level
1947
+ * if -1 : automatic start level selection, playback will start from level matching download bandwidth
1948
+ * (determined from download of first segment)
1949
+ */
1950
+ set startLevel(newLevel: number);
1951
+ /**
1952
+ * Whether level capping is enabled.
1953
+ * Default value is set via `config.capLevelToPlayerSize`.
1954
+ */
1955
+ get capLevelToPlayerSize(): boolean;
1956
+ /**
1957
+ * Enables or disables level capping. If disabled after previously enabled, `nextLevelSwitch` will be immediately called.
1958
+ */
1959
+ set capLevelToPlayerSize(shouldStartCapping: boolean);
1960
+ /**
1961
+ * Capping/max level value that should be used by automatic level selection algorithm (`ABRController`)
1962
+ */
1963
+ get autoLevelCapping(): number;
1964
+ /**
1965
+ * Returns the current bandwidth estimate in bits per second, when available. Otherwise, `NaN` is returned.
1966
+ */
1967
+ get bandwidthEstimate(): number;
1968
+ set bandwidthEstimate(abrEwmaDefaultEstimate: number);
1969
+ get abrEwmaDefaultEstimate(): number;
1970
+ /**
1971
+ * get time to first byte estimate
1972
+ * @type {number}
1973
+ */
1974
+ get ttfbEstimate(): number;
1975
+ /**
1976
+ * Capping/max level value that should be used by automatic level selection algorithm (`ABRController`)
1977
+ */
1978
+ set autoLevelCapping(newLevel: number);
1979
+ get maxHdcpLevel(): HdcpLevel;
1980
+ set maxHdcpLevel(value: HdcpLevel);
1981
+ /**
1982
+ * True when automatic level selection enabled
1983
+ */
1984
+ get autoLevelEnabled(): boolean;
1985
+ /**
1986
+ * Level set manually (if any)
1987
+ */
1988
+ get manualLevel(): number;
1989
+ /**
1990
+ * min level selectable in auto mode according to config.minAutoBitrate
1991
+ */
1992
+ get minAutoLevel(): number;
1993
+ /**
1994
+ * max level selectable in auto mode according to autoLevelCapping
1995
+ */
1996
+ get maxAutoLevel(): number;
1997
+ get firstAutoLevel(): number;
1998
+ /**
1999
+ * next automatically selected quality level
2000
+ */
2001
+ get nextAutoLevel(): number;
2002
+ /**
2003
+ * this setter is used to force next auto level.
2004
+ * this is useful to force a switch down in auto mode:
2005
+ * in case of load error on level N, hls.js can set nextAutoLevel to N-1 for example)
2006
+ * forced value is valid for one fragment. upon successful frag loading at forced level,
2007
+ * this value will be resetted to -1 by ABR controller.
2008
+ */
2009
+ set nextAutoLevel(nextLevel: number);
2010
+ /**
2011
+ * get the datetime value relative to media.currentTime for the active level Program Date Time if present
2012
+ */
2013
+ get playingDate(): Date | null;
2014
+ get mainForwardBufferInfo(): BufferInfo | null;
2015
+ get maxBufferLength(): number;
2016
+ /**
2017
+ * Find and select the best matching audio track, making a level switch when a Group change is necessary.
2018
+ * Updates `hls.config.audioPreference`. Returns the selected track, or null when no matching track is found.
2019
+ */
2020
+ setAudioOption(audioOption: MediaPlaylist | AudioSelectionOption | undefined): MediaPlaylist | null;
2021
+ /**
2022
+ * Find and select the best matching subtitle track, making a level switch when a Group change is necessary.
2023
+ * Updates `hls.config.subtitlePreference`. Returns the selected track, or null when no matching track is found.
2024
+ */
2025
+ setSubtitleOption(subtitleOption: MediaPlaylist | SubtitleSelectionOption | undefined): MediaPlaylist | null;
2026
+ /**
2027
+ * Get the complete list of audio tracks across all media groups
2028
+ */
2029
+ get allAudioTracks(): MediaPlaylist[];
2030
+ /**
2031
+ * Get the list of selectable audio tracks
2032
+ */
2033
+ get audioTracks(): MediaPlaylist[];
2034
+ /**
2035
+ * index of the selected audio track (index in audio track lists)
2036
+ */
2037
+ get audioTrack(): number;
2038
+ /**
2039
+ * selects an audio track, based on its index in audio track lists
2040
+ */
2041
+ set audioTrack(audioTrackId: number);
2042
+ /**
2043
+ * Index of next audio track as scheduled by audio stream controller.
2044
+ */
2045
+ get nextAudioTrack(): number;
2046
+ /**
2047
+ * Set audio track index for next loaded data.
2048
+ * This will switch the audio track asap, without interrupting playback.
2049
+ * May abort current loading of data, and flush parts of buffer(outside
2050
+ * currently played fragment region). Audio Track Switched event will be
2051
+ * delayed until the currently playing fragment is of the next audio track.
2052
+ * @param audioTrackId - Pass -1 for automatic level selection
2053
+ */
2054
+ set nextAudioTrack(audioTrackId: number);
2055
+ /**
2056
+ * get the complete list of subtitle tracks across all media groups
2057
+ */
2058
+ get allSubtitleTracks(): MediaPlaylist[];
2059
+ /**
2060
+ * get alternate subtitle tracks list from playlist
2061
+ */
2062
+ get subtitleTracks(): MediaPlaylist[];
2063
+ /**
2064
+ * index of the selected subtitle track (index in subtitle track lists)
2065
+ */
2066
+ get subtitleTrack(): number;
2067
+ get media(): HTMLMediaElement | null;
2068
+ /**
2069
+ * select an subtitle track, based on its index in subtitle track lists
2070
+ */
2071
+ set subtitleTrack(subtitleTrackId: number);
2072
+ /**
2073
+ * Whether subtitle display is enabled or not
2074
+ */
2075
+ get subtitleDisplay(): boolean;
2076
+ /**
2077
+ * Enable/disable subtitle display rendering
2078
+ */
2079
+ set subtitleDisplay(value: boolean);
2080
+ /**
2081
+ * get mode for Low-Latency HLS loading
2082
+ */
2083
+ get lowLatencyMode(): boolean;
2084
+ /**
2085
+ * Enable/disable Low-Latency HLS part playlist and segment loading, and start live streams at playlist PART-HOLD-BACK rather than HOLD-BACK.
2086
+ */
2087
+ set lowLatencyMode(mode: boolean);
2088
+ /**
2089
+ * Position (in seconds) of live sync point (ie edge of live position minus safety delay defined by ```hls.config.liveSyncDuration```)
2090
+ * @returns null prior to loading live Playlist
2091
+ */
2092
+ get liveSyncPosition(): number | null;
2093
+ /**
2094
+ * Estimated position (in seconds) of live edge (ie edge of live playlist plus time sync playlist advanced)
2095
+ * @returns 0 before first playlist is loaded
2096
+ */
2097
+ get latency(): number;
2098
+ /**
2099
+ * maximum distance from the edge before the player seeks forward to ```hls.liveSyncPosition```
2100
+ * configured using ```liveMaxLatencyDurationCount``` (multiple of target duration) or ```liveMaxLatencyDuration```
2101
+ * @returns 0 before first playlist is loaded
2102
+ */
2103
+ get maxLatency(): number;
2104
+ /**
2105
+ * target distance from the edge as calculated by the latency controller
2106
+ */
2107
+ get targetLatency(): number | null;
2108
+ set targetLatency(latency: number);
2109
+ /**
2110
+ * the rate at which the edge of the current live playlist is advancing or 1 if there is none
2111
+ */
2112
+ get drift(): number | null;
2113
+ /**
2114
+ * set to true when startLoad is called before MANIFEST_PARSED event
2115
+ */
2116
+ get forceStartLoad(): boolean;
2117
+ /**
2118
+ * ContentSteering pathways getter
2119
+ */
2120
+ get pathways(): string[];
2121
+ /**
2122
+ * ContentSteering pathwayPriority getter/setter
2123
+ */
2124
+ get pathwayPriority(): string[] | null;
2125
+ set pathwayPriority(pathwayPriority: string[]);
2126
+ /**
2127
+ * returns true when all SourceBuffers are buffered to the end
2128
+ */
2129
+ get bufferedToEnd(): boolean;
2130
+ /**
2131
+ * returns Interstitials Program Manager
2132
+ */
2133
+ get interstitialsManager(): InterstitialsManager | null;
2134
+ /**
2135
+ * returns mediaCapabilities.decodingInfo for a variant/rendition
2136
+ */
2137
+ getMediaDecodingInfo(level: Level, audioTracks?: MediaPlaylist[]): Promise<MediaDecodingInfo>;
2138
+ }
2139
+ export default Hls;
2140
+
2141
+ export declare class HlsAssetPlayer {
2142
+ hls: Hls | null;
2143
+ interstitial: InterstitialEvent;
2144
+ readonly assetItem: InterstitialAssetItem;
2145
+ tracks: Partial<BufferCodecsData> | null;
2146
+ private hasDetails;
2147
+ private mediaAttached;
2148
+ private _currentTime?;
2149
+ private _bufferedEosTime?;
2150
+ constructor(HlsPlayerClass: typeof Hls, userConfig: HlsAssetPlayerConfig, interstitial: InterstitialEvent, assetItem: InterstitialAssetItem);
2151
+ get appendInPlace(): boolean;
2152
+ loadSource(): void;
2153
+ bufferedInPlaceToEnd(media?: HTMLMediaElement | null): boolean;
2154
+ private checkPlayout;
2155
+ private reachedPlayout;
2156
+ get destroyed(): boolean;
2157
+ get assetId(): InterstitialAssetId;
2158
+ get interstitialId(): InterstitialId;
2159
+ get media(): HTMLMediaElement | null;
2160
+ get bufferedEnd(): number;
2161
+ get currentTime(): number;
2162
+ get duration(): number;
2163
+ get remaining(): number;
2164
+ get startOffset(): number;
2165
+ get timelineOffset(): number;
2166
+ set timelineOffset(value: number);
2167
+ private getAssetTime;
2168
+ private removeMediaListeners;
2169
+ private bufferSnapShot;
2170
+ destroy(): void;
2171
+ attachMedia(data: HTMLMediaElement | MediaAttachingData): void;
2172
+ detachMedia(): void;
2173
+ resumeBuffering(): void;
2174
+ pauseBuffering(): void;
2175
+ transferMedia(): AttachMediaSourceData | null;
2176
+ resetDetails(): void;
2177
+ on<E extends keyof HlsListeners, Context = undefined>(event: E, listener: HlsListeners[E], context?: Context): void;
2178
+ once<E extends keyof HlsListeners, Context = undefined>(event: E, listener: HlsListeners[E], context?: Context): void;
2179
+ off<E extends keyof HlsListeners, Context = undefined>(event: E, listener: HlsListeners[E], context?: Context): void;
2180
+ toString(): string;
2181
+ }
2182
+
2183
+ export declare type HlsAssetPlayerConfig = Partial<HlsConfig> & Required<Pick<HlsConfig, 'assetPlayerId' | 'primarySessionId'>>;
2184
+
2185
+ export declare interface HlsChunkPerformanceTiming extends HlsPerformanceTiming {
2186
+ executeStart: number;
2187
+ executeEnd: number;
2188
+ }
2189
+
2190
+ export declare type HlsConfig = {
2191
+ debug: boolean | ILogger;
2192
+ enableWorker: boolean;
2193
+ workerPath: null | string;
2194
+ enableSoftwareAES: boolean;
2195
+ minAutoBitrate: number;
2196
+ ignoreDevicePixelRatio: boolean;
2197
+ maxDevicePixelRatio: number;
2198
+ preferManagedMediaSource: boolean;
2199
+ preserveManualLevelOnError: boolean;
2200
+ timelineOffset?: number;
2201
+ ignorePlaylistParsingErrors: boolean;
2202
+ algoDataEnabled: boolean;
2203
+ algoSegmentPattern: RegExp | string;
2204
+ algoPreloadCount: number;
2205
+ algoCacheSize: number;
2206
+ algoFrameRate?: number;
2207
+ loader: {
2208
+ new (confg: HlsConfig): Loader<LoaderContext>;
2209
+ };
2210
+ fLoader?: FragmentLoaderConstructor;
2211
+ pLoader?: PlaylistLoaderConstructor;
2212
+ fetchSetup?: (context: LoaderContext, initParams: any) => Promise<Request> | Request;
2213
+ xhrSetup?: (xhr: XMLHttpRequest, url: string) => Promise<void> | void;
2214
+ audioStreamController?: typeof AudioStreamController;
2215
+ audioTrackController?: typeof AudioTrackController;
2216
+ subtitleStreamController?: typeof SubtitleStreamController;
2217
+ subtitleTrackController?: typeof SubtitleTrackController;
2218
+ timelineController?: typeof TimelineController;
2219
+ emeController?: typeof EMEController;
2220
+ cmcd?: CMCDControllerConfig;
2221
+ cmcdController?: typeof CMCDController;
2222
+ contentSteeringController?: typeof ContentSteeringController;
2223
+ interstitialsController?: typeof InterstitialsController;
2224
+ enableInterstitialPlayback: boolean;
2225
+ interstitialAppendInPlace: boolean;
2226
+ interstitialLiveLookAhead: number;
2227
+ assetPlayerId?: string;
2228
+ useMediaCapabilities: boolean;
2229
+ abrController: typeof AbrController;
2230
+ bufferController: typeof BufferController;
2231
+ capLevelController: typeof CapLevelController;
2232
+ errorController: typeof ErrorController;
2233
+ fpsController: typeof FPSController;
2234
+ progressive: boolean;
2235
+ lowLatencyMode: boolean;
2236
+ primarySessionId?: string;
2237
+ } & ABRControllerConfig & BufferControllerConfig & CapLevelControllerConfig & EMEControllerConfig & FPSControllerConfig & GapControllerConfig & LevelControllerConfig & MP4RemuxerConfig & StreamControllerConfig & SelectionPreferences & LatencyControllerConfig & MetadataControllerConfig & TimelineControllerConfig & TSDemuxerConfig & HlsLoadPolicies & PlaylistControllerConfig & FragmentLoaderConfig & PlaylistLoaderConfig;
2238
+
2239
+ export declare interface HlsEventEmitter {
2240
+ on<E extends keyof HlsListeners, Context = undefined>(event: E, listener: HlsListeners[E], context?: Context): void;
2241
+ once<E extends keyof HlsListeners, Context = undefined>(event: E, listener: HlsListeners[E], context?: Context): void;
2242
+ removeAllListeners<E extends keyof HlsListeners>(event?: E): void;
2243
+ off<E extends keyof HlsListeners, Context = undefined>(event: E, listener?: HlsListeners[E], context?: Context, once?: boolean): void;
2244
+ listeners<E extends keyof HlsListeners>(event: E): HlsListeners[E][];
2245
+ emit<E extends keyof HlsListeners>(event: E, name: E, eventObject: Parameters<HlsListeners[E]>[1]): boolean;
2246
+ listenerCount<E extends keyof HlsListeners>(event: E): number;
2247
+ }
2248
+
2249
+ /**
2250
+ * Defines each Event type and payload by Event name. Used in {@link hls.js#HlsEventEmitter} to strongly type the event listener API.
2251
+ */
2252
+ export declare interface HlsListeners {
2253
+ [Events.MEDIA_ATTACHING]: (event: Events.MEDIA_ATTACHING, data: MediaAttachingData) => void;
2254
+ [Events.MEDIA_ATTACHED]: (event: Events.MEDIA_ATTACHED, data: MediaAttachedData) => void;
2255
+ [Events.MEDIA_DETACHING]: (event: Events.MEDIA_DETACHING, data: MediaDetachingData) => void;
2256
+ [Events.MEDIA_DETACHED]: (event: Events.MEDIA_DETACHED, data: MediaDetachedData) => void;
2257
+ [Events.MEDIA_ENDED]: (event: Events.MEDIA_ENDED, data: MediaEndedData) => void;
2258
+ [Events.STALL_RESOLVED]: (event: Events.STALL_RESOLVED, data: {}) => void;
2259
+ [Events.BUFFER_RESET]: (event: Events.BUFFER_RESET) => void;
2260
+ [Events.BUFFER_CODECS]: (event: Events.BUFFER_CODECS, data: BufferCodecsData) => void;
2261
+ [Events.BUFFER_CREATED]: (event: Events.BUFFER_CREATED, data: BufferCreatedData) => void;
2262
+ [Events.BUFFER_APPENDING]: (event: Events.BUFFER_APPENDING, data: BufferAppendingData) => void;
2263
+ [Events.BUFFER_APPENDED]: (event: Events.BUFFER_APPENDED, data: BufferAppendedData) => void;
2264
+ [Events.BUFFER_EOS]: (event: Events.BUFFER_EOS, data: BufferEOSData) => void;
2265
+ [Events.BUFFERED_TO_END]: (event: Events.BUFFERED_TO_END) => void;
2266
+ [Events.BUFFER_FLUSHING]: (event: Events.BUFFER_FLUSHING, data: BufferFlushingData) => void;
2267
+ [Events.BUFFER_FLUSHED]: (event: Events.BUFFER_FLUSHED, data: BufferFlushedData) => void;
2268
+ [Events.MANIFEST_LOADING]: (event: Events.MANIFEST_LOADING, data: ManifestLoadingData) => void;
2269
+ [Events.MANIFEST_LOADED]: (event: Events.MANIFEST_LOADED, data: ManifestLoadedData) => void;
2270
+ [Events.MANIFEST_PARSED]: (event: Events.MANIFEST_PARSED, data: ManifestParsedData) => void;
2271
+ [Events.LEVEL_SWITCHING]: (event: Events.LEVEL_SWITCHING, data: LevelSwitchingData) => void;
2272
+ [Events.LEVEL_SWITCHED]: (event: Events.LEVEL_SWITCHED, data: LevelSwitchedData) => void;
2273
+ [Events.LEVEL_LOADING]: (event: Events.LEVEL_LOADING, data: LevelLoadingData) => void;
2274
+ [Events.LEVEL_LOADED]: (event: Events.LEVEL_LOADED, data: LevelLoadedData) => void;
2275
+ [Events.LEVEL_UPDATED]: (event: Events.LEVEL_UPDATED, data: LevelUpdatedData) => void;
2276
+ [Events.LEVEL_PTS_UPDATED]: (event: Events.LEVEL_PTS_UPDATED, data: LevelPTSUpdatedData) => void;
2277
+ [Events.LEVELS_UPDATED]: (event: Events.LEVELS_UPDATED, data: LevelsUpdatedData) => void;
2278
+ [Events.AUDIO_TRACKS_UPDATED]: (event: Events.AUDIO_TRACKS_UPDATED, data: AudioTracksUpdatedData) => void;
2279
+ [Events.AUDIO_TRACK_SWITCHING]: (event: Events.AUDIO_TRACK_SWITCHING, data: AudioTrackSwitchingData) => void;
2280
+ [Events.AUDIO_TRACK_SWITCHED]: (event: Events.AUDIO_TRACK_SWITCHED, data: AudioTrackSwitchedData) => void;
2281
+ [Events.AUDIO_TRACK_LOADING]: (event: Events.AUDIO_TRACK_LOADING, data: TrackLoadingData) => void;
2282
+ [Events.AUDIO_TRACK_LOADED]: (event: Events.AUDIO_TRACK_LOADED, data: AudioTrackLoadedData) => void;
2283
+ [Events.AUDIO_TRACK_UPDATED]: (event: Events.AUDIO_TRACK_UPDATED, data: AudioTrackUpdatedData) => void;
2284
+ [Events.SUBTITLE_TRACKS_UPDATED]: (event: Events.SUBTITLE_TRACKS_UPDATED, data: SubtitleTracksUpdatedData) => void;
2285
+ [Events.SUBTITLE_TRACKS_CLEARED]: (event: Events.SUBTITLE_TRACKS_CLEARED) => void;
2286
+ [Events.SUBTITLE_TRACK_SWITCH]: (event: Events.SUBTITLE_TRACK_SWITCH, data: SubtitleTrackSwitchData) => void;
2287
+ [Events.SUBTITLE_TRACK_LOADING]: (event: Events.SUBTITLE_TRACK_LOADING, data: TrackLoadingData) => void;
2288
+ [Events.SUBTITLE_TRACK_LOADED]: (event: Events.SUBTITLE_TRACK_LOADED, data: SubtitleTrackLoadedData) => void;
2289
+ [Events.SUBTITLE_TRACK_UPDATED]: (event: Events.SUBTITLE_TRACK_UPDATED, data: SubtitleTrackUpdatedData) => void;
2290
+ [Events.SUBTITLE_FRAG_PROCESSED]: (event: Events.SUBTITLE_FRAG_PROCESSED, data: SubtitleFragProcessedData) => void;
2291
+ [Events.CUES_PARSED]: (event: Events.CUES_PARSED, data: CuesParsedData) => void;
2292
+ [Events.NON_NATIVE_TEXT_TRACKS_FOUND]: (event: Events.NON_NATIVE_TEXT_TRACKS_FOUND, data: NonNativeTextTracksData) => void;
2293
+ [Events.INIT_PTS_FOUND]: (event: Events.INIT_PTS_FOUND, data: InitPTSFoundData) => void;
2294
+ [Events.FRAG_LOADING]: (event: Events.FRAG_LOADING, data: FragLoadingData) => void;
2295
+ [Events.FRAG_LOAD_EMERGENCY_ABORTED]: (event: Events.FRAG_LOAD_EMERGENCY_ABORTED, data: FragLoadEmergencyAbortedData) => void;
2296
+ [Events.FRAG_LOADED]: (event: Events.FRAG_LOADED, data: FragLoadedData) => void;
2297
+ [Events.FRAG_DECRYPTED]: (event: Events.FRAG_DECRYPTED, data: FragDecryptedData) => void;
2298
+ [Events.FRAG_PARSING_INIT_SEGMENT]: (event: Events.FRAG_PARSING_INIT_SEGMENT, data: FragParsingInitSegmentData) => void;
2299
+ [Events.FRAG_PARSING_USERDATA]: (event: Events.FRAG_PARSING_USERDATA, data: FragParsingUserdataData) => void;
2300
+ [Events.FRAG_PARSING_METADATA]: (event: Events.FRAG_PARSING_METADATA, data: FragParsingMetadataData) => void;
2301
+ [Events.FRAG_PARSED]: (event: Events.FRAG_PARSED, data: FragParsedData) => void;
2302
+ [Events.FRAG_BUFFERED]: (event: Events.FRAG_BUFFERED, data: FragBufferedData) => void;
2303
+ [Events.FRAG_CHANGED]: (event: Events.FRAG_CHANGED, data: FragChangedData) => void;
2304
+ [Events.ALGO_DATA_LOADING]: (event: Events.ALGO_DATA_LOADING, data: AlgoDataLoadingData) => void;
2305
+ [Events.ALGO_DATA_LOADED]: (event: Events.ALGO_DATA_LOADED, data: AlgoDataLoadedData) => void;
2306
+ [Events.ALGO_DATA_ERROR]: (event: Events.ALGO_DATA_ERROR, data: AlgoDataErrorData) => void;
2307
+ [Events.FPS_DROP]: (event: Events.FPS_DROP, data: FPSDropData) => void;
2308
+ [Events.FPS_DROP_LEVEL_CAPPING]: (event: Events.FPS_DROP_LEVEL_CAPPING, data: FPSDropLevelCappingData) => void;
2309
+ [Events.MAX_AUTO_LEVEL_UPDATED]: (event: Events.MAX_AUTO_LEVEL_UPDATED, data: MaxAutoLevelUpdatedData) => void;
2310
+ [Events.ERROR]: (event: Events.ERROR, data: ErrorData) => void;
2311
+ [Events.DESTROYING]: (event: Events.DESTROYING) => void;
2312
+ [Events.KEY_LOADING]: (event: Events.KEY_LOADING, data: KeyLoadingData) => void;
2313
+ [Events.KEY_LOADED]: (event: Events.KEY_LOADED, data: KeyLoadedData) => void;
2314
+ [Events.LIVE_BACK_BUFFER_REACHED]: (event: Events.LIVE_BACK_BUFFER_REACHED, data: LiveBackBufferData) => void;
2315
+ [Events.BACK_BUFFER_REACHED]: (event: Events.BACK_BUFFER_REACHED, data: BackBufferData) => void;
2316
+ [Events.STEERING_MANIFEST_LOADED]: (event: Events.STEERING_MANIFEST_LOADED, data: SteeringManifestLoadedData) => void;
2317
+ [Events.ASSET_LIST_LOADING]: (event: Events.ASSET_LIST_LOADING, data: AssetListLoadingData) => void;
2318
+ [Events.ASSET_LIST_LOADED]: (event: Events.ASSET_LIST_LOADED, data: AssetListLoadedData) => void;
2319
+ [Events.INTERSTITIALS_UPDATED]: (event: Events.INTERSTITIALS_UPDATED, data: InterstitialsUpdatedData) => void;
2320
+ [Events.INTERSTITIALS_BUFFERED_TO_BOUNDARY]: (event: Events.INTERSTITIALS_BUFFERED_TO_BOUNDARY, data: InterstitialsBufferedToBoundaryData) => void;
2321
+ [Events.INTERSTITIAL_ASSET_PLAYER_CREATED]: (event: Events.INTERSTITIAL_ASSET_PLAYER_CREATED, data: InterstitialAssetPlayerCreatedData) => void;
2322
+ [Events.INTERSTITIAL_STARTED]: (event: Events.INTERSTITIAL_STARTED, data: InterstitialStartedData) => void;
2323
+ [Events.INTERSTITIAL_ASSET_STARTED]: (event: Events.INTERSTITIAL_ASSET_STARTED, data: InterstitialAssetStartedData) => void;
2324
+ [Events.INTERSTITIAL_ASSET_ENDED]: (event: Events.INTERSTITIAL_ASSET_ENDED, data: InterstitialAssetEndedData) => void;
2325
+ [Events.INTERSTITIAL_ASSET_ERROR]: (event: Events.INTERSTITIAL_ASSET_ERROR, data: InterstitialAssetErrorData) => void;
2326
+ [Events.INTERSTITIAL_ENDED]: (event: Events.INTERSTITIAL_ENDED, data: InterstitialEndedData) => void;
2327
+ [Events.INTERSTITIALS_PRIMARY_RESUMED]: (event: Events.INTERSTITIALS_PRIMARY_RESUMED, data: InterstitialsPrimaryResumed) => void;
2328
+ [Events.PLAYOUT_LIMIT_REACHED]: (event: Events.PLAYOUT_LIMIT_REACHED, data: {}) => void;
2329
+ [Events.EVENT_CUE_ENTER]: (event: Events.EVENT_CUE_ENTER, data: {}) => void;
2330
+ }
2331
+
2332
+ export declare type HlsLoadPolicies = {
2333
+ fragLoadPolicy: LoadPolicy;
2334
+ keyLoadPolicy: LoadPolicy;
2335
+ certLoadPolicy: LoadPolicy;
2336
+ playlistLoadPolicy: LoadPolicy;
2337
+ manifestLoadPolicy: LoadPolicy;
2338
+ steeringManifestLoadPolicy: LoadPolicy;
2339
+ interstitialAssetListLoadPolicy: LoadPolicy;
2340
+ };
2341
+
2342
+ export declare interface HlsPerformanceTiming {
2343
+ start: number;
2344
+ end: number;
2345
+ }
2346
+
2347
+ export declare interface HlsProgressivePerformanceTiming extends HlsPerformanceTiming {
2348
+ first: number;
2349
+ }
2350
+
2351
+ export declare const enum HlsSkip {
2352
+ No = "",
2353
+ Yes = "YES",
2354
+ v2 = "v2"
2355
+ }
2356
+
2357
+ export declare class HlsUrlParameters {
2358
+ msn?: number;
2359
+ part?: number;
2360
+ skip?: HlsSkip;
2361
+ constructor(msn?: number, part?: number, skip?: HlsSkip);
2362
+ addDirectives(uri: string): string | never;
2363
+ }
2364
+
2365
+ export declare type IErrorAction = {
2366
+ action: NetworkErrorAction;
2367
+ flags: ErrorActionFlags;
2368
+ retryCount?: number;
2369
+ retryConfig?: RetryConfig;
2370
+ hdcpLevel?: HdcpLevel;
2371
+ nextAutoLevel?: number;
2372
+ resolved?: boolean;
2373
+ };
2374
+
2375
+ export declare interface ILogFunction {
2376
+ (message?: any, ...optionalParams: any[]): void;
2377
+ }
2378
+
2379
+ export declare interface ILogger {
2380
+ trace: ILogFunction;
2381
+ debug: ILogFunction;
2382
+ log: ILogFunction;
2383
+ warn: ILogFunction;
2384
+ info: ILogFunction;
2385
+ error: ILogFunction;
2386
+ }
2387
+
2388
+ export declare type InFlightData = {
2389
+ frag: Fragment | null;
2390
+ state: (typeof State)[keyof typeof State];
2391
+ };
2392
+
2393
+ export declare type InFlightFragments = {
2394
+ [PlaylistLevelType.MAIN]: InFlightData;
2395
+ [PlaylistLevelType.AUDIO]?: InFlightData;
2396
+ [PlaylistLevelType.SUBTITLE]?: InFlightData;
2397
+ };
2398
+
2399
+ export declare interface InitPTSFoundData {
2400
+ id: PlaylistLevelType;
2401
+ frag: MediaFragment;
2402
+ initPTS: number;
2403
+ timescale: number;
2404
+ trackId: number;
2405
+ }
2406
+
2407
+ export declare interface InitSegmentData {
2408
+ tracks?: TrackSet;
2409
+ initPTS: number | undefined;
2410
+ timescale: number | undefined;
2411
+ trackId: number | undefined;
2412
+ }
2413
+
2414
+ export declare interface InterstitialAssetEndedData {
2415
+ asset: InterstitialAssetItem;
2416
+ assetListIndex: number;
2417
+ event: InterstitialEvent;
2418
+ schedule: InterstitialScheduleItem[];
2419
+ scheduleIndex: number;
2420
+ player: HlsAssetPlayer;
2421
+ }
2422
+
2423
+ export declare type InterstitialAssetErrorData = {
2424
+ asset: InterstitialAssetItem | null;
2425
+ assetListIndex: number;
2426
+ event: InterstitialEvent | null;
2427
+ schedule: InterstitialScheduleItem[] | null;
2428
+ scheduleIndex: number;
2429
+ player: HlsAssetPlayer | null;
2430
+ } & ErrorData;
2431
+
2432
+ export declare type InterstitialAssetId = string;
2433
+
2434
+ export declare type InterstitialAssetItem = {
2435
+ parentIdentifier: InterstitialId;
2436
+ identifier: InterstitialAssetId;
2437
+ duration: number | null;
2438
+ startOffset: number;
2439
+ timelineStart: number;
2440
+ uri: string;
2441
+ error?: Error;
2442
+ };
2443
+
2444
+ export declare interface InterstitialAssetPlayerCreatedData {
2445
+ asset: InterstitialAssetItem;
2446
+ assetListIndex: number;
2447
+ assetListResponse?: AssetListJSON;
2448
+ event: InterstitialEvent;
2449
+ player: HlsAssetPlayer;
2450
+ }
2451
+
2452
+ export declare interface InterstitialAssetStartedData {
2453
+ asset: InterstitialAssetItem;
2454
+ assetListIndex: number;
2455
+ event: InterstitialEvent;
2456
+ schedule: InterstitialScheduleItem[];
2457
+ scheduleIndex: number;
2458
+ player: HlsAssetPlayer;
2459
+ }
2460
+
2461
+ export declare interface InterstitialEndedData {
2462
+ event: InterstitialEvent;
2463
+ schedule: InterstitialScheduleItem[];
2464
+ scheduleIndex: number;
2465
+ }
2466
+
2467
+ export declare class InterstitialEvent {
2468
+ private base;
2469
+ private _duration;
2470
+ private _timelineStart;
2471
+ private appendInPlaceDisabled?;
2472
+ appendInPlaceStarted?: boolean;
2473
+ dateRange: DateRange;
2474
+ hasPlayed: boolean;
2475
+ cumulativeDuration: number;
2476
+ resumeOffset: number;
2477
+ playoutLimit: number;
2478
+ restrictions: PlaybackRestrictions;
2479
+ snapOptions: SnapOptions;
2480
+ assetList: InterstitialAssetItem[];
2481
+ assetListLoader?: Loader<LoaderContext>;
2482
+ assetListResponse: AssetListJSON | null;
2483
+ resumeAnchor?: MediaFragmentRef;
2484
+ error?: Error;
2485
+ resetOnResume?: boolean;
2486
+ constructor(dateRange: DateRange, base: BaseData);
2487
+ setDateRange(dateRange: DateRange): void;
2488
+ reset(): void;
2489
+ isAssetPastPlayoutLimit(assetIndex: number): boolean;
2490
+ findAssetIndex(asset: InterstitialAssetItem): number;
2491
+ get identifier(): InterstitialId;
2492
+ get startDate(): Date;
2493
+ get startTime(): number;
2494
+ get startOffset(): number;
2495
+ get startIsAligned(): boolean;
2496
+ get resumptionOffset(): number;
2497
+ get resumeTime(): number;
2498
+ get appendInPlace(): boolean;
2499
+ set appendInPlace(value: boolean);
2500
+ get timelineStart(): number;
2501
+ set timelineStart(value: number);
2502
+ get duration(): number;
2503
+ set duration(value: number);
2504
+ get cue(): DateRangeCue;
2505
+ get timelineOccupancy(): TimelineOccupancy;
2506
+ get supplementsPrimary(): boolean;
2507
+ get contentMayVary(): boolean;
2508
+ get assetUrl(): string | undefined;
2509
+ get assetListUrl(): string | undefined;
2510
+ get baseUrl(): string;
2511
+ get assetListLoaded(): boolean;
2512
+ toString(): string;
2513
+ }
2514
+
2515
+ export declare interface InterstitialEventWithAssetList extends InterstitialEvent {
2516
+ assetListUrl: string;
2517
+ }
2518
+
2519
+ export declare type InterstitialId = string;
2520
+
2521
+ export declare interface InterstitialPlayer {
2522
+ bufferedEnd: number;
2523
+ currentTime: number;
2524
+ duration: number;
2525
+ assetPlayers: (HlsAssetPlayer | null)[];
2526
+ playingIndex: number;
2527
+ scheduleItem: InterstitialScheduleEventItem | null;
2528
+ }
2529
+
2530
+ export declare interface InterstitialsBufferedToBoundaryData {
2531
+ events: InterstitialEvent[];
2532
+ schedule: InterstitialScheduleItem[];
2533
+ bufferingIndex: number;
2534
+ playingIndex: number;
2535
+ }
2536
+
2537
+ export declare type InterstitialScheduleDurations = {
2538
+ primary: number;
2539
+ playout: number;
2540
+ integrated: number;
2541
+ };
2542
+
2543
+ export declare type InterstitialScheduleEventItem = {
2544
+ event: InterstitialEvent;
2545
+ start: number;
2546
+ end: number;
2547
+ playout: {
2548
+ start: number;
2549
+ end: number;
2550
+ };
2551
+ integrated: {
2552
+ start: number;
2553
+ end: number;
2554
+ };
2555
+ };
2556
+
2557
+ export declare type InterstitialScheduleItem = InterstitialScheduleEventItem | InterstitialSchedulePrimaryItem;
2558
+
2559
+ export declare type InterstitialSchedulePrimaryItem = {
2560
+ nextEvent: InterstitialEvent | null;
2561
+ previousEvent: InterstitialEvent | null;
2562
+ event?: undefined;
2563
+ start: number;
2564
+ end: number;
2565
+ playout: {
2566
+ start: number;
2567
+ end: number;
2568
+ };
2569
+ integrated: {
2570
+ start: number;
2571
+ end: number;
2572
+ };
2573
+ };
2574
+
2575
+ export declare class InterstitialsController extends Logger implements NetworkComponentAPI {
2576
+ private readonly HlsPlayerClass;
2577
+ private readonly hls;
2578
+ private readonly assetListLoader;
2579
+ private mediaSelection;
2580
+ private altSelection;
2581
+ private media;
2582
+ private detachedData;
2583
+ private requiredTracks;
2584
+ private manager;
2585
+ private playerQueue;
2586
+ private bufferedPos;
2587
+ private timelinePos;
2588
+ private schedule;
2589
+ private playingItem;
2590
+ private bufferingItem;
2591
+ private waitingItem;
2592
+ private endedItem;
2593
+ private playingAsset;
2594
+ private endedAsset;
2595
+ private bufferingAsset;
2596
+ private shouldPlay;
2597
+ constructor(hls: Hls, HlsPlayerClass: typeof Hls);
2598
+ private registerListeners;
2599
+ private unregisterListeners;
2600
+ startLoad(): void;
2601
+ stopLoad(): void;
2602
+ resumeBuffering(): void;
2603
+ pauseBuffering(): void;
2604
+ destroy(): void;
2605
+ private onDestroying;
2606
+ private removeMediaListeners;
2607
+ private onMediaAttaching;
2608
+ private onMediaAttached;
2609
+ private clearScheduleState;
2610
+ private onMediaDetaching;
2611
+ get interstitialsManager(): InterstitialsManager | null;
2612
+ private get effectivePlayingItem();
2613
+ private get effectivePlayingAsset();
2614
+ private get playingLastItem();
2615
+ private get playbackStarted();
2616
+ private get currentTime();
2617
+ private get primaryMedia();
2618
+ private isInterstitial;
2619
+ private retreiveMediaSource;
2620
+ private transferMediaFromPlayer;
2621
+ private transferMediaTo;
2622
+ private onPlay;
2623
+ private onPause;
2624
+ private onSeeking;
2625
+ private onInterstitialCueEnter;
2626
+ private onTimeupdate;
2627
+ private checkStart;
2628
+ private advanceAssetBuffering;
2629
+ private advanceAfterAssetEnded;
2630
+ private setScheduleToAssetAtTime;
2631
+ private setSchedulePosition;
2632
+ private advanceSchedule;
2633
+ private get playbackDisabled();
2634
+ private get primaryDetails();
2635
+ private get primaryLive();
2636
+ private resumePrimary;
2637
+ private getPrimaryResumption;
2638
+ private isAssetBuffered;
2639
+ private attachPrimary;
2640
+ private startLoadingPrimaryAt;
2641
+ private onManifestLoading;
2642
+ private onLevelUpdated;
2643
+ private onAudioTrackUpdated;
2644
+ private onSubtitleTrackUpdated;
2645
+ private onAudioTrackSwitching;
2646
+ private onSubtitleTrackSwitch;
2647
+ private onBufferCodecs;
2648
+ private onBufferAppended;
2649
+ private onBufferFlushed;
2650
+ private onBufferedToEnd;
2651
+ private onMediaEnded;
2652
+ private onScheduleUpdate;
2653
+ private updateItem;
2654
+ private trimInPlace;
2655
+ private itemsMatch;
2656
+ private eventItemsMatch;
2657
+ private findItemIndex;
2658
+ private updateSchedule;
2659
+ private checkBuffer;
2660
+ private updateBufferedPos;
2661
+ private assetsBuffered;
2662
+ private setBufferingItem;
2663
+ private bufferedToItem;
2664
+ private preloadPrimary;
2665
+ private bufferedToEvent;
2666
+ private preloadAssets;
2667
+ private flushFrontBuffer;
2668
+ private getAssetPlayerQueueIndex;
2669
+ private getAssetPlayer;
2670
+ private getBufferingPlayer;
2671
+ private createAsset;
2672
+ private createAssetPlayer;
2673
+ private clearInterstitial;
2674
+ private clearAssetPlayers;
2675
+ private resetAssetPlayer;
2676
+ private clearAssetPlayer;
2677
+ private emptyPlayerQueue;
2678
+ private startAssetPlayer;
2679
+ private bufferAssetPlayer;
2680
+ private handleInPlaceStall;
2681
+ private advanceInPlace;
2682
+ private handleAssetItemError;
2683
+ private primaryFallback;
2684
+ private onAssetListLoaded;
2685
+ private onError;
2686
+ }
2687
+
2688
+ export declare interface InterstitialsManager {
2689
+ events: InterstitialEvent[];
2690
+ schedule: InterstitialScheduleItem[];
2691
+ interstitialPlayer: InterstitialPlayer | null;
2692
+ playerQueue: HlsAssetPlayer[];
2693
+ bufferingAsset: InterstitialAssetItem | null;
2694
+ bufferingItem: InterstitialScheduleItem | null;
2695
+ bufferingIndex: number;
2696
+ playingAsset: InterstitialAssetItem | null;
2697
+ playingItem: InterstitialScheduleItem | null;
2698
+ playingIndex: number;
2699
+ primary: PlayheadTimes;
2700
+ integrated: PlayheadTimes;
2701
+ skip: () => void;
2702
+ }
2703
+
2704
+ export declare interface InterstitialsPrimaryResumed {
2705
+ schedule: InterstitialScheduleItem[];
2706
+ scheduleIndex: number;
2707
+ }
2708
+
2709
+ export declare interface InterstitialStartedData {
2710
+ event: InterstitialEvent;
2711
+ schedule: InterstitialScheduleItem[];
2712
+ scheduleIndex: number;
2713
+ }
2714
+
2715
+ export declare interface InterstitialsUpdatedData {
2716
+ events: InterstitialEvent[];
2717
+ schedule: InterstitialScheduleItem[];
2718
+ durations: InterstitialScheduleDurations;
2719
+ removedIds: string[];
2720
+ }
2721
+
2722
+ export declare interface KeyLoadedData {
2723
+ frag: Fragment;
2724
+ keyInfo: KeyLoaderInfo;
2725
+ }
2726
+
2727
+ export declare class KeyLoader extends Logger implements ComponentAPI {
2728
+ private readonly config;
2729
+ private keyIdToKeyInfo;
2730
+ emeController: EMEController | null;
2731
+ constructor(config: HlsConfig, logger: ILogger);
2732
+ abort(type?: PlaylistLevelType): void;
2733
+ detach(): void;
2734
+ destroy(): void;
2735
+ createKeyLoadError(frag: Fragment, details: ErrorDetails | undefined, error: Error, networkDetails?: NullableNetworkDetails, response?: {
2736
+ url: string;
2737
+ data: undefined;
2738
+ code: number;
2739
+ text: string;
2740
+ }): LoadError;
2741
+ loadClear(loadingFrag: Fragment, encryptedFragments: Fragment[], startFragRequested: boolean): null | Promise<void>;
2742
+ load(frag: Fragment): Promise<KeyLoadedData>;
2743
+ loadInternal(frag: Fragment, keySystemFormat?: KeySystemFormats): Promise<KeyLoadedData>;
2744
+ loadKeyEME(keyInfo: KeyLoaderInfo, frag: Fragment): Promise<KeyLoadedData>;
2745
+ loadKeyHTTP(keyInfo: KeyLoaderInfo, frag: Fragment): Promise<KeyLoadedData>;
2746
+ private resetLoader;
2747
+ }
2748
+
2749
+ export declare interface KeyLoaderContext extends LoaderContext {
2750
+ keyInfo: KeyLoaderInfo;
2751
+ frag: Fragment;
2752
+ }
2753
+
2754
+ export declare interface KeyLoaderInfo {
2755
+ decryptdata: LevelKey;
2756
+ keyLoadPromise: Promise<KeyLoadedData> | null;
2757
+ loader: Loader<KeyLoaderContext> | null;
2758
+ mediaKeySessionContext: MediaKeySessionContext | null;
2759
+ }
2760
+
2761
+ export declare interface KeyLoadingData {
2762
+ frag: Fragment;
2763
+ }
2764
+
2765
+ export declare const enum KeySystemFormats {
2766
+ CLEARKEY = "org.w3.clearkey",
2767
+ FAIRPLAY = "com.apple.streamingkeydelivery",
2768
+ PLAYREADY = "com.microsoft.playready",
2769
+ WIDEVINE = "urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"
2770
+ }
2771
+
2772
+ /**
2773
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/Navigator/requestMediaKeySystemAccess
2774
+ */
2775
+ export declare const enum KeySystems {
2776
+ CLEARKEY = "org.w3.clearkey",
2777
+ FAIRPLAY = "com.apple.fps",
2778
+ PLAYREADY = "com.microsoft.playready",
2779
+ WIDEVINE = "com.widevine.alpha"
2780
+ }
2781
+
2782
+ export declare type LatencyControllerConfig = {
2783
+ liveSyncDurationCount: number;
2784
+ liveMaxLatencyDurationCount: number;
2785
+ liveSyncDuration?: number;
2786
+ liveMaxLatencyDuration?: number;
2787
+ maxLiveSyncPlaybackRate: number;
2788
+ liveSyncOnStallIncrease: number;
2789
+ };
2790
+
2791
+ export declare class Level {
2792
+ readonly _attrs: LevelAttributes[];
2793
+ readonly audioCodec: string | undefined;
2794
+ readonly bitrate: number;
2795
+ readonly codecSet: string;
2796
+ readonly url: string[];
2797
+ readonly frameRate: number;
2798
+ readonly height: number;
2799
+ readonly id: number;
2800
+ readonly name: string;
2801
+ readonly supplemental: CodecsParsed | undefined;
2802
+ readonly videoCodec: string | undefined;
2803
+ readonly width: number;
2804
+ details?: LevelDetails;
2805
+ fragmentError: number;
2806
+ loadError: number;
2807
+ loaded?: {
2808
+ bytes: number;
2809
+ duration: number;
2810
+ };
2811
+ realBitrate: number;
2812
+ supportedPromise?: Promise<MediaDecodingInfo>;
2813
+ supportedResult?: MediaDecodingInfo;
2814
+ private _avgBitrate;
2815
+ private _audioGroups?;
2816
+ private _subtitleGroups?;
2817
+ private readonly _urlId;
2818
+ constructor(data: LevelParsed | MediaPlaylist);
2819
+ get maxBitrate(): number;
2820
+ get averageBitrate(): number;
2821
+ get attrs(): LevelAttributes;
2822
+ get codecs(): string;
2823
+ get pathwayId(): string;
2824
+ get videoRange(): VideoRange;
2825
+ get score(): number;
2826
+ get uri(): string;
2827
+ hasAudioGroup(groupId: string | undefined): boolean;
2828
+ hasSubtitleGroup(groupId: string | undefined): boolean;
2829
+ get audioGroups(): (string | undefined)[] | undefined;
2830
+ get subtitleGroups(): (string | undefined)[] | undefined;
2831
+ addGroupId(type: string, groupId: string | undefined): void;
2832
+ get urlId(): number;
2833
+ set urlId(value: number);
2834
+ get audioGroupIds(): (string | undefined)[] | undefined;
2835
+ get textGroupIds(): (string | undefined)[] | undefined;
2836
+ get audioGroupId(): string | undefined;
2837
+ get textGroupId(): string | undefined;
2838
+ addFallback(): void;
2839
+ }
2840
+
2841
+ export declare interface LevelAttributes extends AttrList {
2842
+ 'ALLOWED-CPC'?: string;
2843
+ AUDIO?: string;
2844
+ 'AVERAGE-BANDWIDTH'?: string;
2845
+ BANDWIDTH?: string;
2846
+ 'CLOSED-CAPTIONS'?: string;
2847
+ CODECS?: string;
2848
+ 'FRAME-RATE'?: string;
2849
+ 'HDCP-LEVEL'?: 'TYPE-0' | 'TYPE-1' | 'NONE';
2850
+ 'PATHWAY-ID'?: string;
2851
+ RESOLUTION?: string;
2852
+ SCORE?: string;
2853
+ 'STABLE-VARIANT-ID'?: string;
2854
+ SUBTITLES?: string;
2855
+ 'SUPPLEMENTAL-CODECS'?: string;
2856
+ VIDEO?: string;
2857
+ 'VIDEO-RANGE'?: VideoRange;
2858
+ }
2859
+
2860
+ export declare type LevelControllerConfig = {
2861
+ startLevel?: number;
2862
+ };
2863
+
2864
+ /**
2865
+ * Object representing parsed data from an HLS Media Playlist. Found in {@link hls.js#Level.details}.
2866
+ */
2867
+ export declare class LevelDetails {
2868
+ PTSKnown: boolean;
2869
+ alignedSliding: boolean;
2870
+ averagetargetduration?: number;
2871
+ endCC: number;
2872
+ endSN: number;
2873
+ fragments: MediaFragment[];
2874
+ fragmentHint?: MediaFragment;
2875
+ partList: Part[] | null;
2876
+ dateRanges: Record<string, DateRange | undefined>;
2877
+ dateRangeTagCount: number;
2878
+ live: boolean;
2879
+ requestScheduled: number;
2880
+ ageHeader: number;
2881
+ advancedDateTime?: number;
2882
+ updated: boolean;
2883
+ advanced: boolean;
2884
+ misses: number;
2885
+ startCC: number;
2886
+ startSN: number;
2887
+ startTimeOffset: number | null;
2888
+ targetduration: number;
2889
+ totalduration: number;
2890
+ type: string | null;
2891
+ url: string;
2892
+ m3u8: string;
2893
+ version: number | null;
2894
+ canBlockReload: boolean;
2895
+ canSkipUntil: number;
2896
+ canSkipDateRanges: boolean;
2897
+ skippedSegments: number;
2898
+ recentlyRemovedDateranges?: string[];
2899
+ partHoldBack: number;
2900
+ holdBack: number;
2901
+ partTarget: number;
2902
+ preloadHint?: AttrList;
2903
+ renditionReports?: AttrList[];
2904
+ tuneInGoal: number;
2905
+ deltaUpdateFailed?: boolean;
2906
+ driftStartTime: number;
2907
+ driftEndTime: number;
2908
+ driftStart: number;
2909
+ driftEnd: number;
2910
+ encryptedFragments: Fragment[];
2911
+ playlistParsingError: Error | null;
2912
+ variableList: VariableMap | null;
2913
+ hasVariableRefs: boolean;
2914
+ appliedTimelineOffset?: number;
2915
+ constructor(baseUrl: string);
2916
+ reloaded(previous: LevelDetails | undefined): void;
2917
+ hasKey(levelKey: LevelKey): boolean;
2918
+ get hasProgramDateTime(): boolean;
2919
+ get levelTargetDuration(): number;
2920
+ get drift(): number;
2921
+ get edge(): number;
2922
+ get partEnd(): number;
2923
+ get fragmentEnd(): number;
2924
+ get fragmentStart(): number;
2925
+ get age(): number;
2926
+ get lastPartIndex(): number;
2927
+ get maxPartIndex(): number;
2928
+ get lastPartSn(): number;
2929
+ get expired(): boolean;
2930
+ }
2931
+
2932
+ export declare class LevelKey implements DecryptData {
2933
+ readonly uri: string;
2934
+ readonly method: string;
2935
+ readonly keyFormat: string;
2936
+ readonly keyFormatVersions: number[];
2937
+ readonly encrypted: boolean;
2938
+ readonly isCommonEncryption: boolean;
2939
+ iv: Uint8Array<ArrayBuffer> | null;
2940
+ key: Uint8Array<ArrayBuffer> | null;
2941
+ keyId: Uint8Array<ArrayBuffer> | null;
2942
+ pssh: Uint8Array<ArrayBuffer> | null;
2943
+ static clearKeyUriToKeyIdMap(): void;
2944
+ static setKeyIdForUri(uri: string, keyId: Uint8Array<ArrayBuffer>): void;
2945
+ static addKeyIdForUri(uri: string): Uint8Array<ArrayBuffer>;
2946
+ constructor(method: string, uri: string, format: string, formatversions?: number[], iv?: Uint8Array<ArrayBuffer> | null, keyId?: string);
2947
+ matches(key: LevelKey): boolean;
2948
+ isSupported(): boolean;
2949
+ getDecryptData(sn: number | 'initSegment', levelKeys?: {
2950
+ [key: string]: LevelKey | undefined;
2951
+ }): LevelKey | null;
2952
+ }
2953
+
2954
+ export declare interface LevelLoadedData {
2955
+ details: LevelDetails;
2956
+ id: number;
2957
+ level: number;
2958
+ levelInfo: Level;
2959
+ networkDetails: NullableNetworkDetails;
2960
+ stats: LoaderStats;
2961
+ deliveryDirectives: HlsUrlParameters | null;
2962
+ withoutMultiVariant?: boolean;
2963
+ context?: PlaylistLoaderContext;
2964
+ }
2965
+
2966
+ export declare interface LevelLoadingData {
2967
+ id: number;
2968
+ level: number;
2969
+ levelInfo: Level;
2970
+ pathwayId: string | undefined;
2971
+ url: string;
2972
+ deliveryDirectives: HlsUrlParameters | null;
2973
+ }
2974
+
2975
+ export declare interface LevelParsed extends CodecsParsed {
2976
+ attrs: LevelAttributes;
2977
+ bitrate: number;
2978
+ details?: LevelDetails;
2979
+ height?: number;
2980
+ id?: number;
2981
+ name: string;
2982
+ supplemental?: CodecsParsed;
2983
+ url: string;
2984
+ width?: number;
2985
+ }
2986
+
2987
+ export declare interface LevelPTSUpdatedData {
2988
+ details: LevelDetails;
2989
+ level: Level;
2990
+ drift: number;
2991
+ type: string;
2992
+ frag: Fragment;
2993
+ start: number;
2994
+ end: number;
2995
+ }
2996
+
2997
+ export declare interface LevelsUpdatedData {
2998
+ levels: Array<Level>;
2999
+ }
3000
+
3001
+ export declare interface LevelSwitchedData {
3002
+ level: number;
3003
+ }
3004
+
3005
+ export declare interface LevelSwitchingData {
3006
+ level: number;
3007
+ attrs: LevelAttributes;
3008
+ details: LevelDetails | undefined;
3009
+ bitrate: number;
3010
+ averageBitrate: number;
3011
+ maxBitrate: number;
3012
+ realBitrate: number;
3013
+ width: number;
3014
+ height: number;
3015
+ codecSet: string;
3016
+ audioCodec: string | undefined;
3017
+ videoCodec: string | undefined;
3018
+ audioGroups: (string | undefined)[] | undefined;
3019
+ subtitleGroups: (string | undefined)[] | undefined;
3020
+ loaded: {
3021
+ bytes: number;
3022
+ duration: number;
3023
+ } | undefined;
3024
+ loadError: number;
3025
+ fragmentError: number;
3026
+ name: string | undefined;
3027
+ id: number;
3028
+ uri: string;
3029
+ url: string[];
3030
+ urlId: 0;
3031
+ audioGroupIds: (string | undefined)[] | undefined;
3032
+ textGroupIds: (string | undefined)[] | undefined;
3033
+ }
3034
+
3035
+ export declare interface LevelUpdatedData {
3036
+ details: LevelDetails;
3037
+ level: number;
3038
+ }
3039
+
3040
+ /**
3041
+ * @deprecated Use BackBufferData
3042
+ */
3043
+ export declare interface LiveBackBufferData extends BackBufferData {
3044
+ }
3045
+
3046
+ export declare interface Loader<T extends LoaderContext> {
3047
+ destroy(): void;
3048
+ abort(): void;
3049
+ load(context: T, config: LoaderConfiguration, callbacks: LoaderCallbacks<T>): void;
3050
+ /**
3051
+ * `getCacheAge()` is called by hls.js to get the duration that a given object
3052
+ * has been sitting in a cache proxy when playing live. If implemented,
3053
+ * this should return a value in seconds.
3054
+ *
3055
+ * For HTTP based loaders, this should return the contents of the "age" header.
3056
+ *
3057
+ * @returns time object being lodaded
3058
+ */
3059
+ getCacheAge?: () => number | null;
3060
+ getResponseHeader?: (name: string) => string | null;
3061
+ context: T | null;
3062
+ stats: LoaderStats;
3063
+ }
3064
+
3065
+ export declare interface LoaderCallbacks<T extends LoaderContext> {
3066
+ onSuccess: LoaderOnSuccess<T>;
3067
+ onError: LoaderOnError<T>;
3068
+ onTimeout: LoaderOnTimeout<T>;
3069
+ onAbort?: LoaderOnAbort<T>;
3070
+ onProgress?: LoaderOnProgress<T>;
3071
+ }
3072
+
3073
+ export declare type LoaderConfig = {
3074
+ maxTimeToFirstByteMs: number;
3075
+ maxLoadTimeMs: number;
3076
+ timeoutRetry: RetryConfig | null;
3077
+ errorRetry: RetryConfig | null;
3078
+ };
3079
+
3080
+ export declare interface LoaderConfiguration {
3081
+ loadPolicy: LoaderConfig;
3082
+ /**
3083
+ * @deprecated use LoaderConfig timeoutRetry and errorRetry maxNumRetry
3084
+ */
3085
+ maxRetry: number;
3086
+ /**
3087
+ * @deprecated use LoaderConfig maxTimeToFirstByteMs and maxLoadTimeMs
3088
+ */
3089
+ timeout: number;
3090
+ /**
3091
+ * @deprecated use LoaderConfig timeoutRetry and errorRetry retryDelayMs
3092
+ */
3093
+ retryDelay: number;
3094
+ /**
3095
+ * @deprecated use LoaderConfig timeoutRetry and errorRetry maxRetryDelayMs
3096
+ */
3097
+ maxRetryDelay: number;
3098
+ highWaterMark?: number;
3099
+ }
3100
+
3101
+ export declare interface LoaderContext {
3102
+ url: string;
3103
+ responseType: string;
3104
+ headers?: Record<string, string>;
3105
+ rangeStart?: number;
3106
+ rangeEnd?: number;
3107
+ progressData?: boolean;
3108
+ }
3109
+
3110
+ export declare type LoaderOnAbort<T extends LoaderContext> = (stats: LoaderStats, context: T, networkDetails: NullableNetworkDetails) => void;
3111
+
3112
+ export declare type LoaderOnError<T extends LoaderContext> = (error: {
3113
+ code: number;
3114
+ text: string;
3115
+ }, context: T, networkDetails: NullableNetworkDetails, stats: LoaderStats) => void;
3116
+
3117
+ export declare type LoaderOnProgress<T extends LoaderContext> = (stats: LoaderStats, context: T, data: string | ArrayBuffer, networkDetails: NullableNetworkDetails) => void;
3118
+
3119
+ export declare type LoaderOnSuccess<T extends LoaderContext> = (response: LoaderResponse, stats: LoaderStats, context: T, networkDetails: NullableNetworkDetails) => void;
3120
+
3121
+ export declare type LoaderOnTimeout<T extends LoaderContext> = (stats: LoaderStats, context: T, networkDetails: NullableNetworkDetails) => void;
3122
+
3123
+ export declare interface LoaderResponse {
3124
+ url: string;
3125
+ data?: string | ArrayBuffer | Object;
3126
+ code?: number;
3127
+ text?: string;
3128
+ }
3129
+
3130
+ export declare class LoadError extends Error {
3131
+ readonly data: FragLoadFailResult;
3132
+ constructor(data: FragLoadFailResult);
3133
+ }
3134
+
3135
+ export declare interface LoaderStats {
3136
+ aborted: boolean;
3137
+ loaded: number;
3138
+ retry: number;
3139
+ total: number;
3140
+ chunkCount: number;
3141
+ bwEstimate: number;
3142
+ loading: HlsProgressivePerformanceTiming;
3143
+ parsing: HlsPerformanceTiming;
3144
+ buffering: HlsProgressivePerformanceTiming;
3145
+ }
3146
+
3147
+ export declare type LoadPolicy = {
3148
+ default: LoaderConfig;
3149
+ };
3150
+
3151
+ export declare class LoadStats implements LoaderStats {
3152
+ aborted: boolean;
3153
+ loaded: number;
3154
+ retry: number;
3155
+ total: number;
3156
+ chunkCount: number;
3157
+ bwEstimate: number;
3158
+ loading: HlsProgressivePerformanceTiming;
3159
+ parsing: HlsPerformanceTiming;
3160
+ buffering: HlsProgressivePerformanceTiming;
3161
+ }
3162
+
3163
+ export declare class Logger implements ILogger {
3164
+ trace: ILogFunction;
3165
+ debug: ILogFunction;
3166
+ log: ILogFunction;
3167
+ warn: ILogFunction;
3168
+ info: ILogFunction;
3169
+ error: ILogFunction;
3170
+ constructor(label: string, logger: ILogger);
3171
+ }
3172
+
3173
+ export declare class M3U8Parser {
3174
+ static findGroup(groups: ({
3175
+ id?: string;
3176
+ audioCodec?: string;
3177
+ } | {
3178
+ id?: string;
3179
+ textCodec?: string;
3180
+ })[], mediaGroupId: string): {
3181
+ id?: string;
3182
+ audioCodec?: string;
3183
+ } | {
3184
+ id?: string;
3185
+ textCodec?: string;
3186
+ } | undefined;
3187
+ static resolve(url: any, baseUrl: any): string;
3188
+ static isMediaPlaylist(str: string): boolean;
3189
+ static parseMasterPlaylist(string: string, baseurl: string): ParsedMultivariantPlaylist;
3190
+ static parseMasterPlaylistMedia(string: string, baseurl: string, parsed: ParsedMultivariantPlaylist): ParsedMultivariantMediaOptions;
3191
+ static parseLevelPlaylist(string: string, baseurl: string, id: number, type: PlaylistLevelType, levelUrlId: number, multivariantVariableList: VariableMap | null, algoSegmentPattern?: RegExp | string | null): LevelDetails;
3192
+ }
3193
+
3194
+ export declare type MainPlaylistType = AudioPlaylistType | 'VIDEO';
3195
+
3196
+ export declare interface ManifestLoadedData {
3197
+ audioTracks: MediaPlaylist[];
3198
+ captions?: MediaPlaylist[];
3199
+ contentSteering: ContentSteeringOptions | null;
3200
+ levels: LevelParsed[];
3201
+ networkDetails: NullableNetworkDetails;
3202
+ sessionData: Record<string, AttrList> | null;
3203
+ sessionKeys: LevelKey[] | null;
3204
+ startTimeOffset: number | null;
3205
+ stats: LoaderStats;
3206
+ subtitles?: MediaPlaylist[];
3207
+ url: string;
3208
+ variableList: VariableMap | null;
3209
+ }
3210
+
3211
+ export declare interface ManifestLoadingData {
3212
+ url: string;
3213
+ }
3214
+
3215
+ export declare interface ManifestParsedData {
3216
+ levels: Level[];
3217
+ audioTracks: MediaPlaylist[];
3218
+ subtitleTracks: MediaPlaylist[];
3219
+ sessionData: Record<string, AttrList> | null;
3220
+ sessionKeys: LevelKey[] | null;
3221
+ firstLevel: number;
3222
+ stats: LoaderStats;
3223
+ audio: boolean;
3224
+ video: boolean;
3225
+ altAudio: boolean;
3226
+ }
3227
+
3228
+ export declare interface MaxAutoLevelUpdatedData {
3229
+ autoLevelCapping: number;
3230
+ levels: Level[] | null;
3231
+ maxAutoLevel: number;
3232
+ minAutoLevel: number;
3233
+ maxHdcpLevel: HdcpLevel;
3234
+ }
3235
+
3236
+ export declare interface MediaAttachedData {
3237
+ media: HTMLMediaElement;
3238
+ mediaSource?: MediaSource;
3239
+ }
3240
+
3241
+ export declare interface MediaAttachingData {
3242
+ media: HTMLMediaElement;
3243
+ mediaSource?: MediaSource | null;
3244
+ tracks?: SourceBufferTrackSet;
3245
+ overrides?: MediaOverrides;
3246
+ }
3247
+
3248
+ export declare interface MediaAttributes extends AttrList {
3249
+ 'ASSOC-LANGUAGE'?: string;
3250
+ AUTOSELECT?: 'YES' | 'NO';
3251
+ CHANNELS?: string;
3252
+ CHARACTERISTICS?: string;
3253
+ DEFAULT?: 'YES' | 'NO';
3254
+ FORCED?: 'YES' | 'NO';
3255
+ 'GROUP-ID': string;
3256
+ 'INSTREAM-ID'?: string;
3257
+ LANGUAGE?: string;
3258
+ NAME: string;
3259
+ 'PATHWAY-ID'?: string;
3260
+ 'STABLE-RENDITION-ID'?: string;
3261
+ TYPE?: 'AUDIO' | 'VIDEO' | 'SUBTITLES' | 'CLOSED-CAPTIONS';
3262
+ URI?: string;
3263
+ }
3264
+
3265
+ export declare type MediaDecodingInfo = {
3266
+ supported: boolean;
3267
+ configurations: readonly MediaDecodingConfiguration[];
3268
+ decodingInfoResults: readonly MediaCapabilitiesDecodingInfo[];
3269
+ error?: Error;
3270
+ };
3271
+
3272
+ export declare interface MediaDetachedData {
3273
+ transferMedia?: AttachMediaSourceData | null;
3274
+ }
3275
+
3276
+ export declare interface MediaDetachingData {
3277
+ transferMedia?: AttachMediaSourceData | null;
3278
+ }
3279
+
3280
+ export declare interface MediaEndedData {
3281
+ stalled: boolean;
3282
+ }
3283
+
3284
+ export declare interface MediaFragment extends Fragment {
3285
+ sn: number;
3286
+ ref: MediaFragmentRef;
3287
+ }
3288
+
3289
+ declare type MediaFragmentRef = {
3290
+ base: Base;
3291
+ start: number;
3292
+ duration: number;
3293
+ sn: number;
3294
+ programDateTime: number | null;
3295
+ };
3296
+
3297
+ export declare type MediaKeyFunc = (keySystem: KeySystems, supportedConfigurations: MediaKeySystemConfiguration[]) => Promise<MediaKeySystemAccess>;
3298
+
3299
+ export declare interface MediaKeySessionContext {
3300
+ keySystem: KeySystems;
3301
+ mediaKeys: MediaKeys;
3302
+ decryptdata: LevelKey;
3303
+ mediaKeysSession: MediaKeySession;
3304
+ keyStatus?: MediaKeyStatus;
3305
+ keyStatusTimeouts?: {
3306
+ [keyId: string]: number;
3307
+ };
3308
+ licenseXhr?: XMLHttpRequest;
3309
+ _onmessage?: (this: MediaKeySession, ev: MediaKeyMessageEvent) => any;
3310
+ _onkeystatuseschange?: (this: MediaKeySession, ev: Event) => any;
3311
+ }
3312
+
3313
+ export declare type MediaOverrides = {
3314
+ duration?: number;
3315
+ endOfStream?: boolean;
3316
+ };
3317
+
3318
+ export declare interface MediaPlaylist {
3319
+ attrs: MediaAttributes;
3320
+ audioCodec?: string;
3321
+ autoselect: boolean;
3322
+ bitrate: number;
3323
+ channels?: string;
3324
+ characteristics?: string;
3325
+ details?: LevelDetails;
3326
+ height?: number;
3327
+ default: boolean;
3328
+ forced: boolean;
3329
+ groupId: string;
3330
+ id: number;
3331
+ instreamId?: string;
3332
+ lang?: string;
3333
+ assocLang?: string;
3334
+ name: string;
3335
+ textCodec?: string;
3336
+ unknownCodecs?: string[];
3337
+ type: MediaPlaylistType | 'main';
3338
+ url: string;
3339
+ videoCodec?: string;
3340
+ width?: number;
3341
+ trackNode?: HTMLTrackElement;
3342
+ }
3343
+
3344
+ export declare type MediaPlaylistType = MainPlaylistType | SubtitlePlaylistType;
3345
+
3346
+ export declare type MetadataControllerConfig = {
3347
+ enableDateRangeMetadataCues: boolean;
3348
+ enableEmsgMetadataCues: boolean;
3349
+ enableEmsgKLVMetadata: boolean;
3350
+ enableID3MetadataCues: boolean;
3351
+ emsgKLVSchemaUri?: string;
3352
+ };
3353
+
3354
+ export declare interface MetadataSample {
3355
+ pts: number;
3356
+ dts: number;
3357
+ duration: number;
3358
+ len?: number;
3359
+ data: Uint8Array;
3360
+ type: MetadataSchema;
3361
+ }
3362
+
3363
+ export declare enum MetadataSchema {
3364
+ audioId3 = "org.id3",
3365
+ dateRange = "com.apple.quicktime.HLS",
3366
+ emsg = "https://aomedia.org/emsg/ID3",
3367
+ misbklv = "urn:misb:KLV:bin:1910.1"
3368
+ }
3369
+
3370
+ export declare type MP4RemuxerConfig = {
3371
+ stretchShortVideoTrack: boolean;
3372
+ maxAudioFramesDrift: number;
3373
+ };
3374
+
3375
+ export declare interface NetworkComponentAPI extends ComponentAPI {
3376
+ startLoad(startPosition: number, skipSeekToStartPosition?: boolean): void;
3377
+ stopLoad(): void;
3378
+ pauseBuffering?(): void;
3379
+ resumeBuffering?(): void;
3380
+ }
3381
+
3382
+ declare type NetworkDetails = Response | XMLHttpRequest;
3383
+
3384
+ export declare const enum NetworkErrorAction {
3385
+ DoNothing = 0,
3386
+ SendEndCallback = 1,
3387
+ SendAlternateToPenaltyBox = 2,
3388
+ RemoveAlternatePermanently = 3,
3389
+ InsertDiscontinuity = 4,
3390
+ RetryRequest = 5
3391
+ }
3392
+
3393
+ export declare interface NonNativeTextTrack {
3394
+ _id?: string;
3395
+ label: any;
3396
+ kind: string;
3397
+ default: boolean;
3398
+ closedCaptions?: MediaPlaylist;
3399
+ subtitleTrack?: MediaPlaylist;
3400
+ }
3401
+
3402
+ export declare interface NonNativeTextTracksData {
3403
+ tracks: Array<NonNativeTextTrack>;
3404
+ }
3405
+
3406
+ declare type NullableNetworkDetails = NetworkDetails | null;
3407
+
3408
+ declare interface PACData {
3409
+ row: number;
3410
+ indent: number | null;
3411
+ color: string | null;
3412
+ underline: boolean;
3413
+ italics: boolean;
3414
+ }
3415
+
3416
+ declare type ParsedMultivariantMediaOptions = {
3417
+ AUDIO?: MediaPlaylist[];
3418
+ SUBTITLES?: MediaPlaylist[];
3419
+ 'CLOSED-CAPTIONS'?: MediaPlaylist[];
3420
+ };
3421
+
3422
+ export declare type ParsedMultivariantPlaylist = {
3423
+ contentSteering: ContentSteeringOptions | null;
3424
+ levels: LevelParsed[];
3425
+ playlistParsingError: Error | null;
3426
+ sessionData: Record<string, AttrList> | null;
3427
+ sessionKeys: LevelKey[] | null;
3428
+ startTimeOffset: number | null;
3429
+ variableList: VariableMap | null;
3430
+ hasVariableRefs: boolean;
3431
+ };
3432
+
3433
+ export declare interface ParsedTrack extends BaseTrack {
3434
+ initSegment?: Uint8Array;
3435
+ }
3436
+
3437
+ /**
3438
+ * Object representing parsed data from an HLS Partial Segment. Found in {@link hls.js#LevelDetails.partList}.
3439
+ */
3440
+ export declare class Part extends BaseSegment {
3441
+ readonly fragOffset: number;
3442
+ readonly duration: number;
3443
+ readonly gap: boolean;
3444
+ readonly independent: boolean;
3445
+ readonly relurl: string;
3446
+ readonly fragment: MediaFragment;
3447
+ readonly index: number;
3448
+ constructor(partAttrs: AttrList, frag: MediaFragment, base: Base | string, index: number, previous?: Part);
3449
+ get start(): number;
3450
+ get end(): number;
3451
+ get loaded(): boolean;
3452
+ }
3453
+
3454
+ export declare interface PartsLoadedData {
3455
+ frag: Fragment;
3456
+ part: Part | null;
3457
+ partsLoaded?: FragLoadedData[];
3458
+ }
3459
+
3460
+ export declare type PathwayClone = {
3461
+ 'BASE-ID': string;
3462
+ ID: string;
3463
+ 'URI-REPLACEMENT': UriReplacement;
3464
+ };
3465
+
3466
+ declare class PenState {
3467
+ foreground: string;
3468
+ underline: boolean;
3469
+ italics: boolean;
3470
+ background: string;
3471
+ flash: boolean;
3472
+ reset(): void;
3473
+ setStyles(styles: Partial<PenStyles>): void;
3474
+ isDefault(): boolean;
3475
+ equals(other: PenState): boolean;
3476
+ copy(newPenState: PenState): void;
3477
+ toString(): string;
3478
+ }
3479
+
3480
+ declare type PenStyles = {
3481
+ foreground: string | null;
3482
+ underline: boolean;
3483
+ italics: boolean;
3484
+ background: string;
3485
+ flash: boolean;
3486
+ };
3487
+
3488
+ export declare type PlaybackRestrictions = {
3489
+ skip: boolean;
3490
+ jump: boolean;
3491
+ };
3492
+
3493
+ export declare type PlayheadTimes = {
3494
+ bufferedEnd: number;
3495
+ currentTime: number;
3496
+ duration: number;
3497
+ seekableStart: number;
3498
+ };
3499
+
3500
+ export declare const enum PlaylistContextType {
3501
+ MANIFEST = "manifest",
3502
+ LEVEL = "level",
3503
+ AUDIO_TRACK = "audioTrack",
3504
+ SUBTITLE_TRACK = "subtitleTrack"
3505
+ }
3506
+
3507
+ export declare type PlaylistControllerConfig = {
3508
+ liveMaxUnchangedPlaylistRefresh: number;
3509
+ };
3510
+
3511
+ export declare const enum PlaylistLevelType {
3512
+ MAIN = "main",
3513
+ AUDIO = "audio",
3514
+ SUBTITLE = "subtitle"
3515
+ }
3516
+
3517
+ /**
3518
+ * @deprecated use manifestLoadPolicy.default and playlistLoadPolicy.default
3519
+ */
3520
+ export declare type PlaylistLoaderConfig = {
3521
+ manifestLoadingTimeOut: number;
3522
+ manifestLoadingMaxRetry: number;
3523
+ manifestLoadingRetryDelay: number;
3524
+ manifestLoadingMaxRetryTimeout: number;
3525
+ levelLoadingTimeOut: number;
3526
+ levelLoadingMaxRetry: number;
3527
+ levelLoadingRetryDelay: number;
3528
+ levelLoadingMaxRetryTimeout: number;
3529
+ };
3530
+
3531
+ export declare interface PlaylistLoaderConstructor {
3532
+ new (confg: HlsConfig): Loader<PlaylistLoaderContext>;
3533
+ }
3534
+
3535
+ export declare interface PlaylistLoaderContext extends LoaderContext {
3536
+ type: PlaylistContextType;
3537
+ level: number | null;
3538
+ id: number | null;
3539
+ groupId?: string;
3540
+ pathwayId?: string;
3541
+ levelDetails?: LevelDetails;
3542
+ deliveryDirectives: HlsUrlParameters | null;
3543
+ levelOrTrack: Level | MediaPlaylist | null;
3544
+ }
3545
+
3546
+ export declare type RationalTimestamp = {
3547
+ baseTime: number;
3548
+ timescale: number;
3549
+ };
3550
+
3551
+ export declare interface RemuxedMetadata {
3552
+ samples: MetadataSample[];
3553
+ }
3554
+
3555
+ export declare interface RemuxedTrack {
3556
+ data1: Uint8Array<ArrayBuffer>;
3557
+ data2?: Uint8Array<ArrayBuffer>;
3558
+ startPTS: number;
3559
+ endPTS: number;
3560
+ startDTS: number;
3561
+ endDTS: number;
3562
+ type: SourceBufferName;
3563
+ hasAudio: boolean;
3564
+ hasVideo: boolean;
3565
+ independent?: boolean;
3566
+ firstKeyFrame?: number;
3567
+ firstKeyFramePTS?: number;
3568
+ nb: number;
3569
+ transferredData1?: ArrayBuffer;
3570
+ transferredData2?: ArrayBuffer;
3571
+ dropped?: number;
3572
+ encrypted?: boolean;
3573
+ }
3574
+
3575
+ export declare interface RemuxedUserdata {
3576
+ samples: UserdataSample[];
3577
+ }
3578
+
3579
+ export declare interface RemuxerResult {
3580
+ audio?: RemuxedTrack;
3581
+ video?: RemuxedTrack;
3582
+ text?: RemuxedUserdata;
3583
+ id3?: RemuxedMetadata;
3584
+ initSegment?: InitSegmentData;
3585
+ independent?: boolean;
3586
+ }
3587
+
3588
+ export declare type RetryConfig = {
3589
+ maxNumRetry: number;
3590
+ retryDelayMs: number;
3591
+ maxRetryDelayMs: number;
3592
+ backoff?: 'exponential' | 'linear';
3593
+ shouldRetry?: (retryConfig: RetryConfig | null | undefined, retryCount: number, isTimeout: boolean, loaderResponse: LoaderResponse | undefined, retry: boolean) => boolean;
3594
+ };
3595
+
3596
+ /**
3597
+ * CEA-608 row consisting of NR_COLS instances of StyledUnicodeChar.
3598
+ * @constructor
3599
+ */
3600
+ declare class Row {
3601
+ chars: StyledUnicodeChar[];
3602
+ pos: number;
3603
+ currPenState: PenState;
3604
+ cueStartTime: number | null;
3605
+ private logger;
3606
+ constructor(logger: CaptionsLogger);
3607
+ equals(other: Row): boolean;
3608
+ copy(other: Row): void;
3609
+ isEmpty(): boolean;
3610
+ /**
3611
+ * Set the cursor to a valid column.
3612
+ */
3613
+ setCursor(absPos: number): void;
3614
+ /**
3615
+ * Move the cursor relative to current position.
3616
+ */
3617
+ moveCursor(relPos: number): void;
3618
+ /**
3619
+ * Backspace, move one step back and clear character.
3620
+ */
3621
+ backSpace(): void;
3622
+ insertChar(byte: number): void;
3623
+ clearFromPos(startPos: number): void;
3624
+ clear(): void;
3625
+ clearToEndOfRow(): void;
3626
+ getTextString(): string;
3627
+ setPenStyles(styles: Partial<PenStyles>): void;
3628
+ }
3629
+
3630
+ export declare type SelectionPreferences = {
3631
+ videoPreference?: VideoSelectionOption;
3632
+ audioPreference?: AudioSelectionOption;
3633
+ subtitlePreference?: SubtitleSelectionOption;
3634
+ };
3635
+
3636
+ export declare type SnapOptions = {
3637
+ out: boolean;
3638
+ in: boolean;
3639
+ };
3640
+
3641
+ export declare interface SourceBufferListener {
3642
+ event: string;
3643
+ listener: EventListener;
3644
+ }
3645
+
3646
+ export declare type SourceBufferName = 'video' | 'audio' | 'audiovideo';
3647
+
3648
+ export declare interface SourceBufferTrack extends BaseTrack {
3649
+ buffer?: ExtendedSourceBuffer;
3650
+ bufferAppendTimeoutId?: number;
3651
+ listeners: SourceBufferListener[];
3652
+ ending?: boolean;
3653
+ ended?: boolean;
3654
+ }
3655
+
3656
+ export declare type SourceBufferTrackSet = Partial<Record<SourceBufferName, SourceBufferTrack>>;
3657
+
3658
+ export declare const State: {
3659
+ STOPPED: string;
3660
+ IDLE: string;
3661
+ KEY_LOADING: string;
3662
+ FRAG_LOADING: string;
3663
+ FRAG_LOADING_WAITING_RETRY: string;
3664
+ WAITING_TRACK: string;
3665
+ PARSING: string;
3666
+ PARSED: string;
3667
+ ENDED: string;
3668
+ ERROR: string;
3669
+ WAITING_INIT_PTS: string;
3670
+ WAITING_LEVEL: string;
3671
+ };
3672
+
3673
+ export declare type SteeringManifest = {
3674
+ VERSION: 1;
3675
+ TTL: number;
3676
+ 'RELOAD-URI'?: string;
3677
+ 'PATHWAY-PRIORITY': string[];
3678
+ 'PATHWAY-CLONES'?: PathwayClone[];
3679
+ };
3680
+
3681
+ export declare interface SteeringManifestLoadedData {
3682
+ steeringManifest: SteeringManifest;
3683
+ url: string;
3684
+ }
3685
+
3686
+ export declare class StreamController extends BaseStreamController implements NetworkComponentAPI {
3687
+ private audioCodecSwap;
3688
+ private level;
3689
+ private _forceStartLoad;
3690
+ private _hasEnoughToStart;
3691
+ private altAudio;
3692
+ private audioOnly;
3693
+ private _couldBacktrack;
3694
+ private _backtrackFragment;
3695
+ private audioCodecSwitch;
3696
+ private videoBuffer;
3697
+ constructor(hls: Hls, fragmentTracker: FragmentTracker, keyLoader: KeyLoader);
3698
+ protected registerListeners(): void;
3699
+ protected unregisterListeners(): void;
3700
+ protected onHandlerDestroying(): void;
3701
+ startLoad(startPosition: number, skipSeekToStartPosition?: boolean): void;
3702
+ stopLoad(): void;
3703
+ protected doTick(): void;
3704
+ protected onTickEnd(): void;
3705
+ private doTickIdle;
3706
+ protected loadFragment(frag: Fragment, level: Level, targetBufferTime: number): void;
3707
+ immediateLevelSwitch(): void;
3708
+ /**
3709
+ * Get the buffer output to use for buffer calculations.
3710
+ * Override to use altAudio logic in stream-controller.
3711
+ */
3712
+ protected getBufferOutput(): Bufferable | null;
3713
+ protected checkFragmentChanged(): boolean;
3714
+ /**
3715
+ * Get backtrack fragment. Override to return actual backtrack fragment.
3716
+ */
3717
+ protected get backtrackFragment(): Fragment | undefined;
3718
+ /**
3719
+ * Set backtrack fragment. Override to set actual backtrack fragment.
3720
+ */
3721
+ protected set backtrackFragment(value: Fragment | undefined);
3722
+ /**
3723
+ * Get could backtrack flag. Override to return actual value.
3724
+ */
3725
+ protected get couldBacktrack(): boolean;
3726
+ /**
3727
+ * Set could backtrack flag. Override to set actual value.
3728
+ */
3729
+ protected set couldBacktrack(value: boolean);
3730
+ protected abortCurrentFrag(): void;
3731
+ protected flushMainBuffer(startOffset: number, endOffset: number): void;
3732
+ protected onMediaAttached(event: Events.MEDIA_ATTACHED, data: MediaAttachedData): void;
3733
+ protected onMediaDetaching(event: Events.MEDIA_DETACHING, data: MediaDetachingData): void;
3734
+ private onMediaPlaying;
3735
+ private onMediaSeeked;
3736
+ protected onManifestLoading(): void;
3737
+ private onManifestParsed;
3738
+ private onLevelLoading;
3739
+ private onLevelLoaded;
3740
+ private synchronizeToLiveEdge;
3741
+ protected _handleFragmentLoadProgress(data: FragLoadedData): void;
3742
+ private onAudioTrackSwitching;
3743
+ private onAudioTrackSwitched;
3744
+ private onBufferCreated;
3745
+ private onFragBuffered;
3746
+ get hasEnoughToStart(): boolean;
3747
+ protected onError(event: Events.ERROR, data: ErrorData): void;
3748
+ private onFragLoadEmergencyAborted;
3749
+ private onBufferFlushed;
3750
+ private onLevelsUpdated;
3751
+ swapAudioCodec(): void;
3752
+ /**
3753
+ * Seeks to the set startPosition if not equal to the mediaElement's current time.
3754
+ */
3755
+ protected seekToStartPos(): void;
3756
+ private _getAudioCodec;
3757
+ private _loadBitrateTestFrag;
3758
+ private _handleTransmuxComplete;
3759
+ private logMuxedErr;
3760
+ private _bufferInitSegment;
3761
+ getMainFwdBufferInfo(): BufferInfo | null;
3762
+ get maxBufferLength(): number;
3763
+ private backtrack;
3764
+ get nextLevel(): number;
3765
+ get currentFrag(): Fragment | null;
3766
+ get currentProgramDateTime(): Date | null;
3767
+ get currentLevel(): number;
3768
+ get nextBufferedFrag(): Fragment | null;
3769
+ get forceStartLoad(): boolean;
3770
+ }
3771
+
3772
+ export declare type StreamControllerConfig = {
3773
+ autoStartLoad: boolean;
3774
+ startPosition: number;
3775
+ defaultAudioCodec?: string;
3776
+ initialLiveManifestSize: number;
3777
+ maxBufferLength: number;
3778
+ maxBufferSize: number;
3779
+ maxBufferHole: number;
3780
+ maxFragLookUpTolerance: number;
3781
+ maxMaxBufferLength: number;
3782
+ startFragPrefetch: boolean;
3783
+ testBandwidth: boolean;
3784
+ liveSyncMode?: 'edge' | 'buffered';
3785
+ startOnSegmentBoundary: boolean;
3786
+ nextAudioTrackBufferFlushForwardOffset: number;
3787
+ };
3788
+
3789
+ /**
3790
+ * Unicode character with styling and background.
3791
+ * @constructor
3792
+ */
3793
+ declare class StyledUnicodeChar {
3794
+ uchar: string;
3795
+ penState: PenState;
3796
+ reset(): void;
3797
+ setChar(uchar: string, newPenState: PenState): void;
3798
+ setPenState(newPenState: PenState): void;
3799
+ equals(other: StyledUnicodeChar): boolean;
3800
+ copy(newChar: StyledUnicodeChar): void;
3801
+ isEmpty(): boolean;
3802
+ }
3803
+
3804
+ export declare interface SubtitleFragProcessedData {
3805
+ success: boolean;
3806
+ frag: Fragment;
3807
+ part: Part | null;
3808
+ error?: Error;
3809
+ }
3810
+
3811
+ export declare type SubtitlePlaylistType = 'SUBTITLES' | 'CLOSED-CAPTIONS';
3812
+
3813
+ export declare type SubtitleSelectionOption = {
3814
+ id?: number;
3815
+ lang?: string;
3816
+ assocLang?: string;
3817
+ characteristics?: string;
3818
+ name?: string;
3819
+ groupId?: string;
3820
+ default?: boolean;
3821
+ forced?: boolean;
3822
+ };
3823
+
3824
+ export declare class SubtitleStreamController extends BaseStreamController implements NetworkComponentAPI {
3825
+ private currentTrackId;
3826
+ private tracksBuffered;
3827
+ private mainDetails;
3828
+ constructor(hls: Hls, fragmentTracker: FragmentTracker, keyLoader: KeyLoader);
3829
+ protected onHandlerDestroying(): void;
3830
+ protected registerListeners(): void;
3831
+ protected unregisterListeners(): void;
3832
+ startLoad(startPosition: number, skipSeekToStartPosition?: boolean): void;
3833
+ protected onManifestLoading(): void;
3834
+ protected onMediaDetaching(event: Events.MEDIA_DETACHING, data: MediaDetachingData): void;
3835
+ private onLevelLoaded;
3836
+ private onSubtitleFragProcessed;
3837
+ private onBufferFlushing;
3838
+ protected onError(event: Events.ERROR, data: ErrorData): void;
3839
+ private onSubtitleTracksUpdated;
3840
+ private onSubtitleTrackSwitch;
3841
+ private onSubtitleTrackLoaded;
3842
+ _handleFragmentLoadComplete(fragLoadedData: FragLoadedData): void;
3843
+ doTick(): void;
3844
+ protected loadFragment(frag: Fragment, level: Level, targetBufferTime: number): void;
3845
+ get mediaBufferTimeRanges(): Bufferable;
3846
+ }
3847
+
3848
+ export declare class SubtitleTrackController extends BasePlaylistController {
3849
+ private media;
3850
+ private tracks;
3851
+ private groupIds;
3852
+ private tracksInGroup;
3853
+ private trackId;
3854
+ private currentTrack;
3855
+ private selectDefaultTrack;
3856
+ private queuedDefaultTrack;
3857
+ private useTextTrackPolling;
3858
+ private subtitlePollingInterval;
3859
+ private _subtitleDisplay;
3860
+ private asyncPollTrackChange;
3861
+ constructor(hls: Hls);
3862
+ destroy(): void;
3863
+ get subtitleDisplay(): boolean;
3864
+ set subtitleDisplay(value: boolean);
3865
+ private registerListeners;
3866
+ private unregisterListeners;
3867
+ private createTracksInGroup;
3868
+ protected onMediaAttached(event: Events.MEDIA_ATTACHED, data: MediaAttachedData): void;
3869
+ private pollTrackChange;
3870
+ protected onMediaDetaching(event: Events.MEDIA_DETACHING, data: MediaDetachingData): void;
3871
+ protected onManifestLoading(): void;
3872
+ protected onManifestParsed(event: Events.MANIFEST_PARSED, data: ManifestParsedData): void;
3873
+ protected onSubtitleTrackLoaded(event: Events.SUBTITLE_TRACK_LOADED, data: TrackLoadedData): void;
3874
+ protected onLevelLoading(event: Events.LEVEL_LOADING, data: LevelLoadingData): void;
3875
+ protected onLevelSwitching(event: Events.LEVEL_SWITCHING, data: LevelSwitchingData): void;
3876
+ private switchLevel;
3877
+ private findTrackId;
3878
+ protected onError(event: Events.ERROR, data: ErrorData): void;
3879
+ get allSubtitleTracks(): MediaPlaylist[];
3880
+ /** get alternate subtitle tracks list from playlist **/
3881
+ get subtitleTracks(): MediaPlaylist[];
3882
+ /** get/set index of the selected subtitle track (based on index in subtitle track lists) **/
3883
+ get subtitleTrack(): number;
3884
+ set subtitleTrack(newId: number);
3885
+ setSubtitleOption(subtitleOption: MediaPlaylist | SubtitleSelectionOption | undefined): MediaPlaylist | null;
3886
+ protected loadPlaylist(hlsUrlParameters?: HlsUrlParameters): void;
3887
+ protected loadingPlaylist(currentTrack: MediaPlaylist, hlsUrlParameters: HlsUrlParameters | undefined): void;
3888
+ /**
3889
+ * Disables the old subtitleTrack and sets current mode on the next subtitleTrack.
3890
+ * This operates on the DOM textTracks.
3891
+ * A value of -1 will disable all subtitle tracks.
3892
+ */
3893
+ private toggleTrackModes;
3894
+ /**
3895
+ * This method is responsible for validating the subtitle index and periodically reloading if live.
3896
+ * Dispatches the SUBTITLE_TRACK_SWITCH event, which instructs the subtitle-stream-controller to load the selected track.
3897
+ */
3898
+ private setSubtitleTrack;
3899
+ private onTextTracksChanged;
3900
+ }
3901
+
3902
+ export declare interface SubtitleTrackLoadedData extends TrackLoadedData {
3903
+ }
3904
+
3905
+ export declare interface SubtitleTracksUpdatedData {
3906
+ subtitleTracks: MediaPlaylist[];
3907
+ }
3908
+
3909
+ export declare interface SubtitleTrackSwitchData {
3910
+ id: number;
3911
+ name?: string;
3912
+ groupId?: string;
3913
+ type?: MediaPlaylistType | 'main';
3914
+ url?: string;
3915
+ }
3916
+
3917
+ export declare interface SubtitleTrackUpdatedData {
3918
+ details: LevelDetails;
3919
+ id: number;
3920
+ groupId: string;
3921
+ }
3922
+
3923
+ /**
3924
+ * @ignore
3925
+ * Sub-class specialization of EventHandler base class.
3926
+ *
3927
+ * TaskLoop allows to schedule a task function being called (optionnaly repeatedly) on the main loop,
3928
+ * scheduled asynchroneously, avoiding recursive calls in the same tick.
3929
+ *
3930
+ * The task itself is implemented in `doTick`. It can be requested and called for single execution
3931
+ * using the `tick` method.
3932
+ *
3933
+ * It will be assured that the task execution method (`tick`) only gets called once per main loop "tick",
3934
+ * no matter how often it gets requested for execution. Execution in further ticks will be scheduled accordingly.
3935
+ *
3936
+ * If further execution requests have already been scheduled on the next tick, it can be checked with `hasNextTick`,
3937
+ * and cancelled with `clearNextTick`.
3938
+ *
3939
+ * The task can be scheduled as an interval repeatedly with a period as parameter (see `setInterval`, `clearInterval`).
3940
+ *
3941
+ * Sub-classes need to implement the `doTick` method which will effectively have the task execution routine.
3942
+ *
3943
+ * Further explanations:
3944
+ *
3945
+ * The baseclass has a `tick` method that will schedule the doTick call. It may be called synchroneously
3946
+ * only for a stack-depth of one. On re-entrant calls, sub-sequent calls are scheduled for next main loop ticks.
3947
+ *
3948
+ * When the task execution (`tick` method) is called in re-entrant way this is detected and
3949
+ * we are limiting the task execution per call stack to exactly one, but scheduling/post-poning further
3950
+ * task processing on the next main loop iteration (also known as "next tick" in the Node/JS runtime lingo).
3951
+ */
3952
+ export declare class TaskLoop extends Logger {
3953
+ private readonly _boundTick;
3954
+ private _tickTimer;
3955
+ private _tickInterval;
3956
+ private _tickCallCount;
3957
+ constructor(label: string, logger: ILogger);
3958
+ destroy(): void;
3959
+ protected onHandlerDestroying(): void;
3960
+ protected onHandlerDestroyed(): void;
3961
+ hasInterval(): boolean;
3962
+ hasNextTick(): boolean;
3963
+ /**
3964
+ * @param millis - Interval time (ms)
3965
+ * @eturns True when interval has been scheduled, false when already scheduled (no effect)
3966
+ */
3967
+ setInterval(millis: number): boolean;
3968
+ /**
3969
+ * @returns True when interval was cleared, false when none was set (no effect)
3970
+ */
3971
+ clearInterval(): boolean;
3972
+ /**
3973
+ * @returns True when timeout was cleared, false when none was set (no effect)
3974
+ */
3975
+ clearNextTick(): boolean;
3976
+ /**
3977
+ * Will call the subclass doTick implementation in this main loop tick
3978
+ * or in the next one (via setTimeout(,0)) in case it has already been called
3979
+ * in this tick (in case this is a re-entrant call).
3980
+ */
3981
+ tick(): void;
3982
+ tickImmediate(): void;
3983
+ /**
3984
+ * For subclass to implement task logic
3985
+ * @abstract
3986
+ */
3987
+ protected doTick(): void;
3988
+ }
3989
+
3990
+ export declare class TimelineController implements ComponentAPI {
3991
+ private hls;
3992
+ private media;
3993
+ private config;
3994
+ private enabled;
3995
+ private Cues;
3996
+ private tracks;
3997
+ private initPTS;
3998
+ private unparsedVttFrags;
3999
+ private captionsTracks;
4000
+ private nonNativeCaptionsTracks;
4001
+ private cea608Parser1?;
4002
+ private cea608Parser2?;
4003
+ private lastCc;
4004
+ private lastSn;
4005
+ private lastPartIndex;
4006
+ private prevCC;
4007
+ private vttCCs;
4008
+ private captionsProperties;
4009
+ constructor(hls: Hls);
4010
+ destroy(): void;
4011
+ private initCea608Parsers;
4012
+ addCues(trackName: string, startTime: number, endTime: number, screen: CaptionScreen, cueRanges: Array<[number, number]>): void;
4013
+ private onInitPtsFound;
4014
+ createCaptionsTrack(trackName: string): void;
4015
+ private createNativeTrack;
4016
+ private createNonNativeTrack;
4017
+ private onMediaAttaching;
4018
+ private onMediaDetaching;
4019
+ private onManifestLoading;
4020
+ private onSubtitleTracksUpdated;
4021
+ private onManifestLoaded;
4022
+ private closedCaptionsForLevel;
4023
+ private onFragLoading;
4024
+ private onFragLoaded;
4025
+ private _parseIMSC1;
4026
+ private _parseVTTs;
4027
+ private _fallbackToIMSC1;
4028
+ private _appendCues;
4029
+ private onFragDecrypted;
4030
+ private onSubtitleTracksCleared;
4031
+ private onFragParsingUserdata;
4032
+ onBufferFlushing(event: Events.BUFFER_FLUSHING, { startOffset, endOffset, endOffsetSubtitles, type }: BufferFlushingData): void;
4033
+ private extractCea608Data;
4034
+ }
4035
+
4036
+ export declare type TimelineControllerConfig = {
4037
+ cueHandler: CuesInterface;
4038
+ enableWebVTT: boolean;
4039
+ enableIMSC1: boolean;
4040
+ enableCEA708Captions: boolean;
4041
+ captionsTextTrack1Label: string;
4042
+ captionsTextTrack1LanguageCode: string;
4043
+ captionsTextTrack2Label: string;
4044
+ captionsTextTrack2LanguageCode: string;
4045
+ captionsTextTrack3Label: string;
4046
+ captionsTextTrack3LanguageCode: string;
4047
+ captionsTextTrack4Label: string;
4048
+ captionsTextTrack4LanguageCode: string;
4049
+ renderTextTracksNatively: boolean;
4050
+ };
4051
+
4052
+ export declare enum TimelineOccupancy {
4053
+ Point = 0,
4054
+ Range = 1
4055
+ }
4056
+
4057
+ export declare type TimestampOffset = RationalTimestamp & {
4058
+ trackId: number;
4059
+ };
4060
+
4061
+ export declare interface Track extends BaseTrack {
4062
+ buffer?: SourceBuffer;
4063
+ initSegment?: Uint8Array<ArrayBuffer>;
4064
+ }
4065
+
4066
+ declare type TrackItem = {
4067
+ trackId: number;
4068
+ score: number;
4069
+ box: [number, number, number, number];
4070
+ reserved: [number, number, number, number];
4071
+ };
4072
+
4073
+ export declare interface TrackLoadedData {
4074
+ details: LevelDetails;
4075
+ id: number;
4076
+ groupId: string;
4077
+ networkDetails: NullableNetworkDetails;
4078
+ stats: LoaderStats;
4079
+ deliveryDirectives: HlsUrlParameters | null;
4080
+ track: MediaPlaylist;
4081
+ context?: PlaylistLoaderContext;
4082
+ }
4083
+
4084
+ export declare interface TrackLoadingData {
4085
+ id: number;
4086
+ groupId: string;
4087
+ track: MediaPlaylist;
4088
+ url: string;
4089
+ deliveryDirectives: HlsUrlParameters | null;
4090
+ }
4091
+
4092
+ export declare interface TrackSet {
4093
+ audio?: Track;
4094
+ video?: Track;
4095
+ audiovideo?: Track;
4096
+ }
4097
+
4098
+ export declare class TransmuxerInterface {
4099
+ error: Error | null;
4100
+ private hls;
4101
+ private id;
4102
+ private instanceNo;
4103
+ private observer;
4104
+ private frag;
4105
+ private part;
4106
+ private useWorker;
4107
+ private workerContext;
4108
+ private transmuxer;
4109
+ private onTransmuxComplete;
4110
+ private onFlush;
4111
+ constructor(hls: Hls, id: PlaylistLevelType, onTransmuxComplete: (transmuxResult: TransmuxerResult) => void, onFlush: (chunkMeta: ChunkMetadata) => void);
4112
+ reset(): void;
4113
+ private terminateWorker;
4114
+ destroy(): void;
4115
+ push(data: ArrayBuffer, initSegmentData: Uint8Array | undefined, audioCodec: string | undefined, videoCodec: string | undefined, frag: MediaFragment, part: Part | null, duration: number, accurateTimeOffset: boolean, chunkMeta: ChunkMetadata, defaultInitPTS?: TimestampOffset): void;
4116
+ flush(chunkMeta: ChunkMetadata): void;
4117
+ private transmuxerError;
4118
+ private handleFlushResult;
4119
+ private onWorkerMessage;
4120
+ private onWorkerError;
4121
+ private configureTransmuxer;
4122
+ private handleTransmuxComplete;
4123
+ }
4124
+
4125
+ export declare interface TransmuxerResult {
4126
+ remuxResult: RemuxerResult;
4127
+ chunkMeta: ChunkMetadata;
4128
+ }
4129
+
4130
+ export declare type TSDemuxerConfig = {
4131
+ forceKeyFrameOnDiscontinuity: boolean;
4132
+ handleMpegTsVideoIntegrityErrors: 'process' | 'skip';
4133
+ };
4134
+
4135
+ export declare type UriReplacement = {
4136
+ HOST?: string;
4137
+ PARAMS?: {
4138
+ [queryParameter: string]: string;
4139
+ };
4140
+ 'PER-VARIANT-URIS'?: {
4141
+ [stableVariantId: string]: string;
4142
+ };
4143
+ 'PER-RENDITION-URIS'?: {
4144
+ [stableRenditionId: string]: string;
4145
+ };
4146
+ };
4147
+
4148
+ export declare interface UserdataSample {
4149
+ pts: number;
4150
+ bytes?: Uint8Array;
4151
+ type?: number;
4152
+ payloadType?: number;
4153
+ uuid?: string;
4154
+ userData?: string;
4155
+ userDataBytes?: Uint8Array;
4156
+ }
4157
+
4158
+ export declare type VariableMap = Record<string, string>;
4159
+
4160
+ declare const enum VerboseLevel {
4161
+ ERROR = 0,
4162
+ TEXT = 1,
4163
+ WARNING = 2,
4164
+ INFO = 2,
4165
+ DEBUG = 3,
4166
+ DATA = 3
4167
+ }
4168
+
4169
+ export declare type VideoRange = (typeof VideoRangeValues)[number];
4170
+
4171
+ export declare const VideoRangeValues: readonly ["SDR", "PQ", "HLG"];
4172
+
4173
+ export declare type VideoSelectionOption = {
4174
+ preferHDR?: boolean;
4175
+ allowedVideoRanges?: Array<VideoRange>;
4176
+ videoCodec?: string;
4177
+ };
4178
+
4179
+ export declare class XhrLoader implements Loader<LoaderContext> {
4180
+ private xhrSetup;
4181
+ private requestTimeout?;
4182
+ private retryTimeout?;
4183
+ private retryDelay;
4184
+ private config;
4185
+ private callbacks;
4186
+ context: LoaderContext | null;
4187
+ private loader;
4188
+ stats: LoaderStats;
4189
+ constructor(config: HlsConfig);
4190
+ destroy(): void;
4191
+ abortInternal(): void;
4192
+ abort(): void;
4193
+ load(context: LoaderContext, config: LoaderConfiguration, callbacks: LoaderCallbacks<LoaderContext>): void;
4194
+ loadInternal(): void;
4195
+ openAndSendXhr(xhr: XMLHttpRequest, context: LoaderContext, config: LoaderConfiguration): void;
4196
+ readystatechange(): void;
4197
+ loadtimeout(): void;
4198
+ retry(retryConfig: RetryConfig): void;
4199
+ loadprogress(event: ProgressEvent): void;
4200
+ getCacheAge(): number | null;
4201
+ getResponseHeader(name: string): string | null;
4202
+ }
4203
+
4204
+ export { }