hls.js.d.ts 104 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105
  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. export declare class AbrController implements AbrComponentAPI {
  9. protected hls: Hls;
  10. private lastLevelLoadSec;
  11. private lastLoadedFragLevel;
  12. private firstSelection;
  13. private _nextAutoLevel;
  14. private nextAutoLevelKey;
  15. private audioTracksByGroup;
  16. private codecTiers;
  17. private timer;
  18. private fragCurrent;
  19. private partCurrent;
  20. private bitrateTestDelay;
  21. bwEstimator: EwmaBandWidthEstimator;
  22. constructor(hls: Hls);
  23. resetEstimator(abrEwmaDefaultEstimate?: number): void;
  24. private initEstimator;
  25. protected registerListeners(): void;
  26. protected unregisterListeners(): void;
  27. destroy(): void;
  28. protected onManifestLoading(event: Events.MANIFEST_LOADING, data: ManifestLoadingData): void;
  29. private onLevelsUpdated;
  30. private onMaxAutoLevelUpdated;
  31. protected onFragLoading(event: Events.FRAG_LOADING, data: FragLoadingData): void;
  32. protected onLevelSwitching(event: Events.LEVEL_SWITCHING, data: LevelSwitchingData): void;
  33. protected onError(event: Events.ERROR, data: ErrorData): void;
  34. private getTimeToLoadFrag;
  35. protected onLevelLoaded(event: Events.LEVEL_LOADED, data: LevelLoadedData): void;
  36. private _abandonRulesCheck;
  37. protected onFragLoaded(event: Events.FRAG_LOADED, { frag, part }: FragLoadedData): void;
  38. protected onFragBuffered(event: Events.FRAG_BUFFERED, data: FragBufferedData): void;
  39. private ignoreFragment;
  40. clearTimer(): void;
  41. get firstAutoLevel(): number;
  42. get forcedAutoLevel(): number;
  43. get nextAutoLevel(): number;
  44. private getAutoLevelKey;
  45. private getNextABRAutoLevel;
  46. private getStarvationDelay;
  47. private getBwEstimate;
  48. private findBestLevel;
  49. set nextAutoLevel(nextLevel: number);
  50. }
  51. export declare type ABRControllerConfig = {
  52. abrEwmaFastLive: number;
  53. abrEwmaSlowLive: number;
  54. abrEwmaFastVoD: number;
  55. abrEwmaSlowVoD: number;
  56. /**
  57. * Default bandwidth estimate in bits/s prior to collecting fragment bandwidth samples
  58. */
  59. abrEwmaDefaultEstimate: number;
  60. abrEwmaDefaultEstimateMax: number;
  61. abrBandWidthFactor: number;
  62. abrBandWidthUpFactor: number;
  63. abrMaxWithRealBitrate: boolean;
  64. maxStarvationDelay: number;
  65. maxLoadingDelay: number;
  66. };
  67. export declare class AttrList {
  68. [key: string]: any;
  69. constructor(attrs: string | Record<string, any>);
  70. get clientAttrs(): string[];
  71. decimalInteger(attrName: string): number;
  72. hexadecimalInteger(attrName: string): Uint8Array | null;
  73. hexadecimalIntegerAsNumber(attrName: string): number;
  74. decimalFloatingPoint(attrName: string): number;
  75. optionalFloat(attrName: string, defaultValue: number): number;
  76. enumeratedString(attrName: string): string | undefined;
  77. bool(attrName: string): boolean;
  78. decimalResolution(attrName: string): {
  79. width: number;
  80. height: number;
  81. } | undefined;
  82. static parseAttrList(input: string): Record<string, any>;
  83. }
  84. export declare type AudioPlaylistType = 'AUDIO';
  85. export declare type AudioSelectionOption = {
  86. lang?: string;
  87. assocLang?: string;
  88. characteristics?: string;
  89. channels?: string;
  90. name?: string;
  91. audioCodec?: string;
  92. groupId?: string;
  93. default?: boolean;
  94. };
  95. export declare class AudioStreamController extends BaseStreamController implements NetworkComponentAPI {
  96. private videoBuffer;
  97. private videoTrackCC;
  98. private waitingVideoCC;
  99. private bufferedTrack;
  100. private switchingTrack;
  101. private trackId;
  102. private waitingData;
  103. private mainDetails;
  104. private flushing;
  105. private bufferFlushed;
  106. private cachedTrackLoadedData;
  107. constructor(hls: Hls, fragmentTracker: FragmentTracker, keyLoader: KeyLoader);
  108. protected onHandlerDestroying(): void;
  109. private _registerListeners;
  110. private _unregisterListeners;
  111. onInitPtsFound(event: Events.INIT_PTS_FOUND, { frag, id, initPTS, timescale }: InitPTSFoundData): void;
  112. startLoad(startPosition: number): void;
  113. doTick(): void;
  114. clearWaitingFragment(): void;
  115. protected resetLoadingState(): void;
  116. protected onTickEnd(): void;
  117. private doTickIdle;
  118. protected getMaxBufferLength(mainBufferLength?: number): number;
  119. onMediaDetaching(): void;
  120. onAudioTracksUpdated(event: Events.AUDIO_TRACKS_UPDATED, { audioTracks }: AudioTracksUpdatedData): void;
  121. onAudioTrackSwitching(event: Events.AUDIO_TRACK_SWITCHING, data: AudioTrackSwitchingData): void;
  122. onManifestLoading(): void;
  123. onLevelLoaded(event: Events.LEVEL_LOADED, data: LevelLoadedData): void;
  124. onAudioTrackLoaded(event: Events.AUDIO_TRACK_LOADED, data: TrackLoadedData): void;
  125. _handleFragmentLoadProgress(data: FragLoadedData): void;
  126. protected _handleFragmentLoadComplete(fragLoadedData: FragLoadedData): void;
  127. onBufferReset(): void;
  128. onBufferCreated(event: Events.BUFFER_CREATED, data: BufferCreatedData): void;
  129. onFragBuffered(event: Events.FRAG_BUFFERED, data: FragBufferedData): void;
  130. private onError;
  131. private onBufferFlushing;
  132. private onBufferFlushed;
  133. private _handleTransmuxComplete;
  134. private _bufferInitSegment;
  135. protected loadFragment(frag: Fragment, track: Level, targetBufferTime: number): void;
  136. private flushAudioIfNeeded;
  137. private completeAudioSwitch;
  138. }
  139. export declare class AudioTrackController extends BasePlaylistController {
  140. private tracks;
  141. private groupIds;
  142. private tracksInGroup;
  143. private trackId;
  144. private currentTrack;
  145. private selectDefaultTrack;
  146. constructor(hls: Hls);
  147. private registerListeners;
  148. private unregisterListeners;
  149. destroy(): void;
  150. protected onManifestLoading(): void;
  151. protected onManifestParsed(event: Events.MANIFEST_PARSED, data: ManifestParsedData): void;
  152. protected onAudioTrackLoaded(event: Events.AUDIO_TRACK_LOADED, data: AudioTrackLoadedData): void;
  153. protected onLevelLoading(event: Events.LEVEL_LOADING, data: LevelLoadingData): void;
  154. protected onLevelSwitching(event: Events.LEVEL_SWITCHING, data: LevelSwitchingData): void;
  155. private switchLevel;
  156. protected onError(event: Events.ERROR, data: ErrorData): void;
  157. get allAudioTracks(): MediaPlaylist[];
  158. get audioTracks(): MediaPlaylist[];
  159. get audioTrack(): number;
  160. set audioTrack(newId: number);
  161. setAudioOption(audioOption: MediaPlaylist | AudioSelectionOption | undefined): MediaPlaylist | null;
  162. private setAudioTrack;
  163. private findTrackId;
  164. protected loadPlaylist(hlsUrlParameters?: HlsUrlParameters): void;
  165. }
  166. export declare interface AudioTrackLoadedData extends TrackLoadedData {
  167. }
  168. export declare interface AudioTracksUpdatedData {
  169. audioTracks: MediaPlaylist[];
  170. }
  171. export declare interface AudioTrackSwitchedData extends MediaPlaylist {
  172. }
  173. export declare interface AudioTrackSwitchingData extends MediaPlaylist {
  174. }
  175. export declare interface BackBufferData {
  176. bufferEnd: number;
  177. }
  178. export declare class BasePlaylistController implements NetworkComponentAPI {
  179. protected hls: Hls;
  180. protected timer: number;
  181. protected requestScheduled: number;
  182. protected canLoad: boolean;
  183. protected log: (msg: any) => void;
  184. protected warn: (msg: any) => void;
  185. constructor(hls: Hls, logPrefix: string);
  186. destroy(): void;
  187. protected clearTimer(): void;
  188. startLoad(): void;
  189. stopLoad(): void;
  190. protected switchParams(playlistUri: string, previous: LevelDetails | undefined, current: LevelDetails | undefined): HlsUrlParameters | undefined;
  191. protected loadPlaylist(hlsUrlParameters?: HlsUrlParameters): void;
  192. protected shouldLoadPlaylist(playlist: Level | MediaPlaylist | null | undefined): boolean;
  193. protected shouldReloadPlaylist(playlist: Level | MediaPlaylist | null | undefined): boolean;
  194. protected playlistLoaded(index: number, data: LevelLoadedData | AudioTrackLoadedData | TrackLoadedData, previousDetails?: LevelDetails): void;
  195. private getDeliveryDirectives;
  196. protected checkRetry(errorEvent: ErrorData): boolean;
  197. }
  198. export declare class BaseSegment {
  199. private _byteRange;
  200. private _url;
  201. readonly baseurl: string;
  202. relurl?: string;
  203. elementaryStreams: ElementaryStreams;
  204. constructor(baseurl: string);
  205. setByteRange(value: string, previous?: BaseSegment): void;
  206. get byteRange(): [number, number] | [];
  207. get byteRangeStartOffset(): number | undefined;
  208. get byteRangeEndOffset(): number | undefined;
  209. get url(): string;
  210. set url(value: string);
  211. }
  212. export declare class BaseStreamController extends TaskLoop implements NetworkComponentAPI {
  213. protected hls: Hls;
  214. protected fragPrevious: Fragment | null;
  215. protected fragCurrent: Fragment | null;
  216. protected fragmentTracker: FragmentTracker;
  217. protected transmuxer: TransmuxerInterface | null;
  218. protected _state: string;
  219. protected playlistType: PlaylistLevelType;
  220. protected media: HTMLMediaElement | null;
  221. protected mediaBuffer: Bufferable | null;
  222. protected config: HlsConfig;
  223. protected bitrateTest: boolean;
  224. protected lastCurrentTime: number;
  225. protected nextLoadPosition: number;
  226. protected startPosition: number;
  227. protected startTimeOffset: number | null;
  228. protected loadedmetadata: boolean;
  229. protected retryDate: number;
  230. protected levels: Array<Level> | null;
  231. protected fragmentLoader: FragmentLoader;
  232. protected keyLoader: KeyLoader;
  233. protected levelLastLoaded: Level | null;
  234. protected startFragRequested: boolean;
  235. protected decrypter: Decrypter;
  236. protected initPTS: RationalTimestamp[];
  237. protected onvseeking: EventListener | null;
  238. protected onvended: EventListener | null;
  239. private readonly logPrefix;
  240. protected log: (msg: any) => void;
  241. protected warn: (msg: any) => void;
  242. constructor(hls: Hls, fragmentTracker: FragmentTracker, keyLoader: KeyLoader, logPrefix: string, playlistType: PlaylistLevelType);
  243. protected doTick(): void;
  244. protected onTickEnd(): void;
  245. startLoad(startPosition: number): void;
  246. stopLoad(): void;
  247. protected _streamEnded(bufferInfo: BufferInfo, levelDetails: LevelDetails): boolean;
  248. protected getLevelDetails(): LevelDetails | undefined;
  249. protected onMediaAttached(event: Events.MEDIA_ATTACHED, data: MediaAttachedData): void;
  250. protected onMediaDetaching(): void;
  251. protected onMediaSeeking(): void;
  252. protected onMediaEnded(): void;
  253. protected onManifestLoaded(event: Events.MANIFEST_LOADED, data: ManifestLoadedData): void;
  254. protected onHandlerDestroying(): void;
  255. protected onHandlerDestroyed(): void;
  256. protected loadFragment(frag: Fragment, level: Level, targetBufferTime: number): void;
  257. private _loadFragForPlayback;
  258. protected clearTrackerIfNeeded(frag: Fragment): void;
  259. protected checkLiveUpdate(details: LevelDetails): void;
  260. protected flushMainBuffer(startOffset: number, endOffset: number, type?: SourceBufferName | null): void;
  261. protected _loadInitSegment(frag: Fragment, level: Level): void;
  262. private completeInitSegmentLoad;
  263. protected fragContextChanged(frag: Fragment | null): boolean;
  264. protected fragBufferedComplete(frag: Fragment, part: Part | null): void;
  265. protected seekToStartPos(): void;
  266. protected _handleFragmentLoadComplete(fragLoadedEndData: PartsLoadedData): void;
  267. protected _handleFragmentLoadProgress(frag: PartsLoadedData | FragLoadedData): void;
  268. protected _doFragLoad(frag: Fragment, level: Level, targetBufferTime?: number | null, progressCallback?: FragmentLoadProgressCallback): Promise<PartsLoadedData | FragLoadedData | null>;
  269. private doFragPartsLoad;
  270. private handleFragLoadError;
  271. protected _handleTransmuxerFlush(chunkMeta: ChunkMetadata): void;
  272. protected getCurrentContext(chunkMeta: ChunkMetadata): {
  273. frag: Fragment;
  274. part: Part | null;
  275. level: Level;
  276. } | null;
  277. protected bufferFragmentData(data: RemuxedTrack, frag: Fragment, part: Part | null, chunkMeta: ChunkMetadata, noBacktracking?: boolean): void;
  278. protected flushBufferGap(frag: Fragment): void;
  279. protected getFwdBufferInfo(bufferable: Bufferable | null, type: PlaylistLevelType): BufferInfo | null;
  280. protected getFwdBufferInfoAtPos(bufferable: Bufferable | null, pos: number, type: PlaylistLevelType): BufferInfo | null;
  281. protected getMaxBufferLength(levelBitrate?: number): number;
  282. protected reduceMaxBufferLength(threshold: number): boolean;
  283. protected getAppendedFrag(position: number, playlistType?: PlaylistLevelType): Fragment | null;
  284. protected getNextFragment(pos: number, levelDetails: LevelDetails): Fragment | null;
  285. protected isLoopLoading(frag: Fragment, targetBufferTime: number): boolean;
  286. protected getNextFragmentLoopLoading(frag: Fragment, levelDetails: LevelDetails, bufferInfo: BufferInfo, playlistType: PlaylistLevelType, maxBufLen: number): Fragment | null;
  287. mapToInitFragWhenRequired(frag: Fragment | null): typeof frag;
  288. getNextPart(partList: Part[], frag: Fragment, targetBufferTime: number): number;
  289. private loadedEndOfParts;
  290. protected getInitialLiveFragment(levelDetails: LevelDetails, fragments: Array<Fragment>): Fragment | null;
  291. protected getFragmentAtPosition(bufferEnd: number, end: number, levelDetails: LevelDetails): Fragment | null;
  292. protected synchronizeToLiveEdge(levelDetails: LevelDetails): void;
  293. protected alignPlaylists(details: LevelDetails, previousDetails: LevelDetails | undefined, switchDetails: LevelDetails | undefined): number;
  294. protected waitForCdnTuneIn(details: LevelDetails): boolean | 0;
  295. protected setStartPosition(details: LevelDetails, sliding: number): void;
  296. protected getLoadPosition(): number;
  297. private handleFragLoadAborted;
  298. protected resetFragmentLoading(frag: Fragment): void;
  299. protected onFragmentOrKeyLoadError(filterType: PlaylistLevelType, data: ErrorData): void;
  300. protected reduceLengthAndFlushBuffer(data: ErrorData): boolean;
  301. protected resetFragmentErrors(filterType: PlaylistLevelType): void;
  302. protected afterBufferFlushed(media: Bufferable, bufferType: SourceBufferName, playlistType: PlaylistLevelType): void;
  303. protected resetLoadingState(): void;
  304. protected resetStartWhenNotLoaded(level: Level | null): void;
  305. protected resetWhenMissingContext(chunkMeta: ChunkMetadata): void;
  306. protected removeUnbufferedFrags(start?: number): void;
  307. private updateLevelTiming;
  308. protected resetTransmuxer(): void;
  309. protected recoverWorkerError(data: ErrorData): void;
  310. set state(nextState: string);
  311. get state(): string;
  312. }
  313. declare type Bufferable = {
  314. buffered: TimeRanges;
  315. };
  316. export declare interface BufferAppendedData {
  317. type: SourceBufferName;
  318. frag: Fragment;
  319. part: Part | null;
  320. chunkMeta: ChunkMetadata;
  321. parent: PlaylistLevelType;
  322. timeRanges: Partial<Record<SourceBufferName, TimeRanges>>;
  323. }
  324. export declare interface BufferAppendingData {
  325. type: SourceBufferName;
  326. frag: Fragment;
  327. part: Part | null;
  328. chunkMeta: ChunkMetadata;
  329. parent: PlaylistLevelType;
  330. data: Uint8Array;
  331. }
  332. export declare interface BufferCodecsData {
  333. video?: Track;
  334. audio?: Track;
  335. }
  336. export declare class BufferController implements ComponentAPI {
  337. private details;
  338. private _objectUrl;
  339. private operationQueue;
  340. private listeners;
  341. private hls;
  342. bufferCodecEventsExpected: number;
  343. private _bufferCodecEventsTotal;
  344. media: HTMLMediaElement | null;
  345. mediaSource: MediaSource | null;
  346. private lastMpegAudioChunk;
  347. private appendSource;
  348. appendErrors: {
  349. audio: number;
  350. video: number;
  351. audiovideo: number;
  352. };
  353. tracks: TrackSet;
  354. pendingTracks: TrackSet;
  355. sourceBuffer: SourceBuffers;
  356. protected log: (msg: any) => void;
  357. protected warn: (msg: any, obj?: any) => void;
  358. protected error: (msg: any, obj?: any) => void;
  359. constructor(hls: Hls);
  360. hasSourceTypes(): boolean;
  361. destroy(): void;
  362. protected registerListeners(): void;
  363. protected unregisterListeners(): void;
  364. private _initSourceBuffer;
  365. private onManifestLoading;
  366. protected onManifestParsed(event: Events.MANIFEST_PARSED, data: ManifestParsedData): void;
  367. protected onMediaAttaching(event: Events.MEDIA_ATTACHING, data: MediaAttachingData): void;
  368. private _onEndStreaming;
  369. private _onStartStreaming;
  370. protected onMediaDetaching(): void;
  371. protected onBufferReset(): void;
  372. private resetBuffer;
  373. protected onBufferCodecs(event: Events.BUFFER_CODECS, data: BufferCodecsData): void;
  374. protected appendChangeType(type: any, mimeType: any): void;
  375. protected onBufferAppending(event: Events.BUFFER_APPENDING, eventData: BufferAppendingData): void;
  376. protected onBufferFlushing(event: Events.BUFFER_FLUSHING, data: BufferFlushingData): void;
  377. protected onFragParsed(event: Events.FRAG_PARSED, data: FragParsedData): void;
  378. private onFragChanged;
  379. protected onBufferEos(event: Events.BUFFER_EOS, data: BufferEOSData): void;
  380. protected onLevelUpdated(event: Events.LEVEL_UPDATED, { details }: LevelUpdatedData): void;
  381. trimBuffers(): void;
  382. flushBackBuffer(currentTime: number, targetDuration: number, targetBackBufferPosition: number): void;
  383. flushFrontBuffer(currentTime: number, targetDuration: number, targetFrontBufferPosition: number): void;
  384. /**
  385. * Update Media Source duration to current level duration or override to Infinity if configuration parameter
  386. * 'liveDurationInfinity` is set to `true`
  387. * More details: https://github.com/video-dev/hls.js/issues/355
  388. */
  389. private updateMediaElementDuration;
  390. updateSeekableRange(levelDetails: any): void;
  391. protected checkPendingTracks(): void;
  392. protected createSourceBuffers(tracks: TrackSet): void;
  393. private _onMediaSourceOpen;
  394. private _onMediaSourceClose;
  395. private _onMediaSourceEnded;
  396. private _onMediaEmptied;
  397. private get mediaSrc();
  398. private _onSBUpdateStart;
  399. private _onSBUpdateEnd;
  400. private _onSBUpdateError;
  401. private removeExecutor;
  402. private appendExecutor;
  403. private blockBuffers;
  404. private getSourceBufferTypes;
  405. private addBufferListener;
  406. private removeBufferListeners;
  407. }
  408. export declare type BufferControllerConfig = {
  409. appendErrorMaxRetry: number;
  410. backBufferLength: number;
  411. frontBufferFlushThreshold: number;
  412. liveDurationInfinity: boolean;
  413. /**
  414. * @deprecated use backBufferLength
  415. */
  416. liveBackBufferLength: number | null;
  417. };
  418. export declare interface BufferCreatedData {
  419. tracks: TrackSet;
  420. }
  421. export declare interface BufferEOSData {
  422. type?: SourceBufferName;
  423. }
  424. export declare interface BufferFlushedData {
  425. type: SourceBufferName;
  426. }
  427. export declare interface BufferFlushingData {
  428. startOffset: number;
  429. endOffset: number;
  430. endOffsetSubtitles?: number;
  431. type: SourceBufferName | null;
  432. }
  433. export declare type BufferInfo = {
  434. len: number;
  435. start: number;
  436. end: number;
  437. nextStart?: number;
  438. };
  439. export declare class CapLevelController implements ComponentAPI {
  440. private hls;
  441. private autoLevelCapping;
  442. private firstLevel;
  443. private media;
  444. private restrictedLevels;
  445. private timer;
  446. private clientRect;
  447. private streamController?;
  448. constructor(hls: Hls);
  449. setStreamController(streamController: StreamController): void;
  450. destroy(): void;
  451. protected registerListeners(): void;
  452. protected unregisterListener(): void;
  453. protected onFpsDropLevelCapping(event: Events.FPS_DROP_LEVEL_CAPPING, data: FPSDropLevelCappingData): void;
  454. protected onMediaAttaching(event: Events.MEDIA_ATTACHING, data: MediaAttachingData): void;
  455. protected onManifestParsed(event: Events.MANIFEST_PARSED, data: ManifestParsedData): void;
  456. private onLevelsUpdated;
  457. protected onBufferCodecs(event: Events.BUFFER_CODECS, data: BufferCodecsData): void;
  458. protected onMediaDetaching(): void;
  459. detectPlayerSize(): void;
  460. getMaxLevel(capLevelIndex: number): number;
  461. startCapping(): void;
  462. stopCapping(): void;
  463. getDimensions(): {
  464. width: number;
  465. height: number;
  466. };
  467. get mediaWidth(): number;
  468. get mediaHeight(): number;
  469. get contentScaleFactor(): number;
  470. private isLevelAllowed;
  471. static getMaxLevelByMediaSize(levels: Array<Level>, width: number, height: number): number;
  472. }
  473. export declare type CapLevelControllerConfig = {
  474. capLevelToPlayerSize: boolean;
  475. };
  476. /**
  477. * Keep a CEA-608 screen of 32x15 styled characters
  478. * @constructor
  479. */
  480. declare class CaptionScreen {
  481. rows: Row[];
  482. currRow: number;
  483. nrRollUpRows: number | null;
  484. lastOutputScreen: CaptionScreen | null;
  485. logger: CaptionsLogger;
  486. constructor(logger: CaptionsLogger);
  487. reset(): void;
  488. equals(other: CaptionScreen): boolean;
  489. copy(other: CaptionScreen): void;
  490. isEmpty(): boolean;
  491. backSpace(): void;
  492. clearToEndOfRow(): void;
  493. /**
  494. * Insert a character (without styling) in the current row.
  495. */
  496. insertChar(char: number): void;
  497. setPen(styles: Partial<PenStyles>): void;
  498. moveCursor(relPos: number): void;
  499. setCursor(absPos: number): void;
  500. setPAC(pacData: PACData): void;
  501. /**
  502. * Set background/extra foreground, but first do back_space, and then insert space (backwards compatibility).
  503. */
  504. setBkgData(bkgData: Partial<PenStyles>): void;
  505. setRollUpRows(nrRows: number | null): void;
  506. rollUp(): void;
  507. /**
  508. * Get all non-empty rows with as unicode text.
  509. */
  510. getDisplayText(asOneRow?: boolean): string;
  511. getTextAndFormat(): Row[];
  512. }
  513. declare class CaptionsLogger {
  514. time: number | null;
  515. verboseLevel: VerboseLevel;
  516. log(severity: VerboseLevel, msg: string | (() => string)): void;
  517. }
  518. export declare class ChunkMetadata {
  519. readonly level: number;
  520. readonly sn: number;
  521. readonly part: number;
  522. readonly id: number;
  523. readonly size: number;
  524. readonly partial: boolean;
  525. readonly transmuxing: HlsChunkPerformanceTiming;
  526. readonly buffering: {
  527. [key in SourceBufferName]: HlsChunkPerformanceTiming;
  528. };
  529. constructor(level: number, sn: number, id: number, size?: number, part?: number, partial?: boolean);
  530. }
  531. /**
  532. * Controller to deal with Common Media Client Data (CMCD)
  533. * @see https://cdn.cta.tech/cta/media/media/resources/standards/pdfs/cta-5004-final.pdf
  534. */
  535. export declare class CMCDController implements ComponentAPI {
  536. private hls;
  537. private config;
  538. private media?;
  539. private sid?;
  540. private cid?;
  541. private useHeaders;
  542. private includeKeys?;
  543. private initialized;
  544. private starved;
  545. private buffering;
  546. private audioBuffer?;
  547. private videoBuffer?;
  548. constructor(hls: Hls);
  549. private registerListeners;
  550. private unregisterListeners;
  551. destroy(): void;
  552. private onMediaAttached;
  553. private onMediaDetached;
  554. private onBufferCreated;
  555. private onWaiting;
  556. private onPlaying;
  557. /**
  558. * Create baseline CMCD data
  559. */
  560. private createData;
  561. /**
  562. * Apply CMCD data to a request.
  563. */
  564. private apply;
  565. /**
  566. * Apply CMCD data to a manifest request.
  567. */
  568. private applyPlaylistData;
  569. /**
  570. * Apply CMCD data to a segment request
  571. */
  572. private applyFragmentData;
  573. /**
  574. * The CMCD object type.
  575. */
  576. private getObjectType;
  577. /**
  578. * Get the highest bitrate.
  579. */
  580. private getTopBandwidth;
  581. /**
  582. * Get the buffer length for a media type in milliseconds
  583. */
  584. private getBufferLength;
  585. /**
  586. * Create a playlist loader
  587. */
  588. private createPlaylistLoader;
  589. /**
  590. * Create a playlist loader
  591. */
  592. private createFragmentLoader;
  593. }
  594. export declare type CMCDControllerConfig = {
  595. sessionId?: string;
  596. contentId?: string;
  597. useHeaders?: boolean;
  598. includeKeys?: string[];
  599. };
  600. export declare interface ComponentAPI {
  601. destroy(): void;
  602. }
  603. export declare class ContentSteeringController implements NetworkComponentAPI {
  604. private readonly hls;
  605. private log;
  606. private loader;
  607. private uri;
  608. private pathwayId;
  609. private pathwayPriority;
  610. private timeToLoad;
  611. private reloadTimer;
  612. private updated;
  613. private started;
  614. private enabled;
  615. private levels;
  616. private audioTracks;
  617. private subtitleTracks;
  618. private penalizedPathways;
  619. constructor(hls: Hls);
  620. private registerListeners;
  621. private unregisterListeners;
  622. startLoad(): void;
  623. stopLoad(): void;
  624. clearTimeout(): void;
  625. destroy(): void;
  626. removeLevel(levelToRemove: Level): void;
  627. private onManifestLoading;
  628. private onManifestLoaded;
  629. private onManifestParsed;
  630. private onError;
  631. filterParsedLevels(levels: Level[]): Level[];
  632. private getLevelsForPathway;
  633. private updatePathwayPriority;
  634. private getPathwayForGroupId;
  635. private clonePathways;
  636. private loadSteeringManifest;
  637. private scheduleRefresh;
  638. }
  639. export declare type ContentSteeringOptions = {
  640. uri: string;
  641. pathwayId: string;
  642. };
  643. export declare interface CuesInterface {
  644. newCue(track: TextTrack | null, startTime: number, endTime: number, captionScreen: CaptionScreen): VTTCue[];
  645. }
  646. export declare interface CuesParsedData {
  647. type: 'captions' | 'subtitles';
  648. cues: any;
  649. track: string;
  650. }
  651. export declare class DateRange {
  652. attr: AttrList;
  653. private _startDate;
  654. private _endDate?;
  655. private _badValueForSameId?;
  656. constructor(dateRangeAttr: AttrList, dateRangeWithSameId?: DateRange);
  657. get id(): string;
  658. get class(): string;
  659. get startDate(): Date;
  660. get endDate(): Date | null;
  661. get duration(): number | null;
  662. get plannedDuration(): number | null;
  663. get endOnNext(): boolean;
  664. get isValid(): boolean;
  665. }
  666. declare interface DecryptData {
  667. uri: string;
  668. method: string;
  669. keyFormat: string;
  670. keyFormatVersions: number[];
  671. iv: Uint8Array | null;
  672. key: Uint8Array | null;
  673. keyId: Uint8Array | null;
  674. pssh: Uint8Array | null;
  675. encrypted: boolean;
  676. isCommonEncryption: boolean;
  677. }
  678. declare class Decrypter {
  679. private logEnabled;
  680. private removePKCS7Padding;
  681. private subtle;
  682. private softwareDecrypter;
  683. private key;
  684. private fastAesKey;
  685. private remainderData;
  686. private currentIV;
  687. private currentResult;
  688. private useSoftware;
  689. constructor(config: HlsConfig, { removePKCS7Padding }?: {
  690. removePKCS7Padding?: boolean | undefined;
  691. });
  692. destroy(): void;
  693. isSync(): boolean;
  694. flush(): Uint8Array | null;
  695. reset(): void;
  696. decrypt(data: Uint8Array | ArrayBuffer, key: ArrayBuffer, iv: ArrayBuffer): Promise<ArrayBuffer>;
  697. softwareDecrypt(data: Uint8Array, key: ArrayBuffer, iv: ArrayBuffer): ArrayBuffer | null;
  698. webCryptoDecrypt(data: Uint8Array, key: ArrayBuffer, iv: ArrayBuffer): Promise<ArrayBuffer>;
  699. private onWebCryptoError;
  700. private getValidChunk;
  701. private logOnce;
  702. }
  703. declare type DRMSystemConfiguration = {
  704. licenseUrl: string;
  705. serverCertificateUrl?: string;
  706. generateRequest?: (this: Hls, initDataType: string, initData: ArrayBuffer | null, keyContext: MediaKeySessionContext) => {
  707. initDataType: string;
  708. initData: ArrayBuffer | null;
  709. } | undefined | never;
  710. };
  711. export declare type DRMSystemOptions = {
  712. audioRobustness?: string;
  713. videoRobustness?: string;
  714. audioEncryptionScheme?: string | null;
  715. videoEncryptionScheme?: string | null;
  716. persistentState?: MediaKeysRequirement;
  717. distinctiveIdentifier?: MediaKeysRequirement;
  718. sessionTypes?: string[];
  719. sessionType?: string;
  720. };
  721. export declare type DRMSystemsConfiguration = Partial<Record<KeySystems, DRMSystemConfiguration>>;
  722. export declare interface ElementaryStreamInfo {
  723. startPTS: number;
  724. endPTS: number;
  725. startDTS: number;
  726. endDTS: number;
  727. partial?: boolean;
  728. }
  729. export declare type ElementaryStreams = Record<ElementaryStreamTypes, ElementaryStreamInfo | null>;
  730. export declare const enum ElementaryStreamTypes {
  731. AUDIO = "audio",
  732. VIDEO = "video",
  733. AUDIOVIDEO = "audiovideo"
  734. }
  735. /**
  736. * Controller to deal with encrypted media extensions (EME)
  737. * @see https://developer.mozilla.org/en-US/docs/Web/API/Encrypted_Media_Extensions_API
  738. *
  739. * @class
  740. * @constructor
  741. */
  742. export declare class EMEController implements ComponentAPI {
  743. static CDMCleanupPromise: Promise<void> | void;
  744. private readonly hls;
  745. private readonly config;
  746. private media;
  747. private keyFormatPromise;
  748. private keySystemAccessPromises;
  749. private _requestLicenseFailureCount;
  750. private mediaKeySessions;
  751. private keyIdToKeySessionPromise;
  752. private setMediaKeysQueue;
  753. private onMediaEncrypted;
  754. private onWaitingForKey;
  755. private debug;
  756. private log;
  757. private warn;
  758. private error;
  759. constructor(hls: Hls);
  760. destroy(): void;
  761. private registerListeners;
  762. private unregisterListeners;
  763. private getLicenseServerUrl;
  764. private getServerCertificateUrl;
  765. private attemptKeySystemAccess;
  766. private requestMediaKeySystemAccess;
  767. private getMediaKeysPromise;
  768. private createMediaKeySessionContext;
  769. private renewKeySession;
  770. private getKeyIdString;
  771. private updateKeySession;
  772. selectKeySystemFormat(frag: Fragment): Promise<KeySystemFormats>;
  773. private getKeyFormatPromise;
  774. loadKey(data: KeyLoadedData): Promise<MediaKeySessionContext>;
  775. private throwIfDestroyed;
  776. private handleError;
  777. private getKeySystemForKeyPromise;
  778. private getKeySystemSelectionPromise;
  779. private _onMediaEncrypted;
  780. private _onWaitingForKey;
  781. private attemptSetMediaKeys;
  782. private generateRequestWithPreferredKeySession;
  783. private onKeyStatusChange;
  784. private fetchServerCertificate;
  785. private setMediaKeysServerCertificate;
  786. private renewLicense;
  787. private unpackPlayReadyKeyMessage;
  788. private setupLicenseXHR;
  789. private requestLicense;
  790. private onMediaAttached;
  791. private onMediaDetached;
  792. private onManifestLoading;
  793. private onManifestLoaded;
  794. private removeSession;
  795. }
  796. export declare type EMEControllerConfig = {
  797. licenseXhrSetup?: (this: Hls, xhr: XMLHttpRequest, url: string, keyContext: MediaKeySessionContext, licenseChallenge: Uint8Array) => void | Uint8Array | Promise<Uint8Array | void>;
  798. licenseResponseCallback?: (this: Hls, xhr: XMLHttpRequest, url: string, keyContext: MediaKeySessionContext) => ArrayBuffer;
  799. emeEnabled: boolean;
  800. widevineLicenseUrl?: string;
  801. drmSystems: DRMSystemsConfiguration;
  802. drmSystemOptions: DRMSystemOptions;
  803. requestMediaKeySystemAccessFunc: MediaKeyFunc | null;
  804. };
  805. export declare const enum ErrorActionFlags {
  806. None = 0,
  807. MoveAllAlternatesMatchingHost = 1,
  808. MoveAllAlternatesMatchingHDCP = 2,
  809. SwitchToSDR = 4
  810. }
  811. export declare class ErrorController implements NetworkComponentAPI {
  812. private readonly hls;
  813. private playlistError;
  814. private penalizedRenditions;
  815. private log;
  816. private warn;
  817. private error;
  818. constructor(hls: Hls);
  819. private registerListeners;
  820. private unregisterListeners;
  821. destroy(): void;
  822. startLoad(startPosition: number): void;
  823. stopLoad(): void;
  824. private getVariantLevelIndex;
  825. private onManifestLoading;
  826. private onLevelUpdated;
  827. private onError;
  828. private keySystemError;
  829. private getPlaylistRetryOrSwitchAction;
  830. private getFragRetryOrSwitchAction;
  831. private getLevelSwitchAction;
  832. onErrorOut(event: Events.ERROR, data: ErrorData): void;
  833. private sendAlternateToPenaltyBox;
  834. private switchLevel;
  835. }
  836. export declare interface ErrorData {
  837. type: ErrorTypes;
  838. details: ErrorDetails;
  839. error: Error;
  840. fatal: boolean;
  841. errorAction?: IErrorAction;
  842. buffer?: number;
  843. bytes?: number;
  844. chunkMeta?: ChunkMetadata;
  845. context?: PlaylistLoaderContext;
  846. event?: keyof HlsListeners | 'demuxerWorker';
  847. frag?: Fragment;
  848. part?: Part | null;
  849. level?: number | undefined;
  850. levelRetry?: boolean;
  851. loader?: Loader<LoaderContext>;
  852. networkDetails?: any;
  853. stats?: LoaderStats;
  854. mimeType?: string;
  855. reason?: string;
  856. response?: LoaderResponse;
  857. url?: string;
  858. parent?: PlaylistLevelType;
  859. sourceBufferName?: SourceBufferName;
  860. /**
  861. * @deprecated Use ErrorData.error
  862. */
  863. err?: {
  864. message: string;
  865. };
  866. }
  867. export declare enum ErrorDetails {
  868. KEY_SYSTEM_NO_KEYS = "keySystemNoKeys",
  869. KEY_SYSTEM_NO_ACCESS = "keySystemNoAccess",
  870. KEY_SYSTEM_NO_SESSION = "keySystemNoSession",
  871. KEY_SYSTEM_NO_CONFIGURED_LICENSE = "keySystemNoConfiguredLicense",
  872. KEY_SYSTEM_LICENSE_REQUEST_FAILED = "keySystemLicenseRequestFailed",
  873. KEY_SYSTEM_SERVER_CERTIFICATE_REQUEST_FAILED = "keySystemServerCertificateRequestFailed",
  874. KEY_SYSTEM_SERVER_CERTIFICATE_UPDATE_FAILED = "keySystemServerCertificateUpdateFailed",
  875. KEY_SYSTEM_SESSION_UPDATE_FAILED = "keySystemSessionUpdateFailed",
  876. KEY_SYSTEM_STATUS_OUTPUT_RESTRICTED = "keySystemStatusOutputRestricted",
  877. KEY_SYSTEM_STATUS_INTERNAL_ERROR = "keySystemStatusInternalError",
  878. MANIFEST_LOAD_ERROR = "manifestLoadError",
  879. MANIFEST_LOAD_TIMEOUT = "manifestLoadTimeOut",
  880. MANIFEST_PARSING_ERROR = "manifestParsingError",
  881. MANIFEST_INCOMPATIBLE_CODECS_ERROR = "manifestIncompatibleCodecsError",
  882. LEVEL_EMPTY_ERROR = "levelEmptyError",
  883. LEVEL_LOAD_ERROR = "levelLoadError",
  884. LEVEL_LOAD_TIMEOUT = "levelLoadTimeOut",
  885. LEVEL_PARSING_ERROR = "levelParsingError",
  886. LEVEL_SWITCH_ERROR = "levelSwitchError",
  887. AUDIO_TRACK_LOAD_ERROR = "audioTrackLoadError",
  888. AUDIO_TRACK_LOAD_TIMEOUT = "audioTrackLoadTimeOut",
  889. SUBTITLE_LOAD_ERROR = "subtitleTrackLoadError",
  890. SUBTITLE_TRACK_LOAD_TIMEOUT = "subtitleTrackLoadTimeOut",
  891. FRAG_LOAD_ERROR = "fragLoadError",
  892. FRAG_LOAD_TIMEOUT = "fragLoadTimeOut",
  893. FRAG_DECRYPT_ERROR = "fragDecryptError",
  894. FRAG_PARSING_ERROR = "fragParsingError",
  895. FRAG_GAP = "fragGap",
  896. REMUX_ALLOC_ERROR = "remuxAllocError",
  897. KEY_LOAD_ERROR = "keyLoadError",
  898. KEY_LOAD_TIMEOUT = "keyLoadTimeOut",
  899. BUFFER_ADD_CODEC_ERROR = "bufferAddCodecError",
  900. BUFFER_INCOMPATIBLE_CODECS_ERROR = "bufferIncompatibleCodecsError",
  901. BUFFER_APPEND_ERROR = "bufferAppendError",
  902. BUFFER_APPENDING_ERROR = "bufferAppendingError",
  903. BUFFER_STALLED_ERROR = "bufferStalledError",
  904. BUFFER_FULL_ERROR = "bufferFullError",
  905. BUFFER_SEEK_OVER_HOLE = "bufferSeekOverHole",
  906. BUFFER_NUDGE_ON_STALL = "bufferNudgeOnStall",
  907. INTERNAL_EXCEPTION = "internalException",
  908. INTERNAL_ABORTED = "aborted",
  909. UNKNOWN = "unknown"
  910. }
  911. export declare enum ErrorTypes {
  912. NETWORK_ERROR = "networkError",
  913. MEDIA_ERROR = "mediaError",
  914. KEY_SYSTEM_ERROR = "keySystemError",
  915. MUX_ERROR = "muxError",
  916. OTHER_ERROR = "otherError"
  917. }
  918. export declare enum Events {
  919. MEDIA_ATTACHING = "hlsMediaAttaching",
  920. MEDIA_ATTACHED = "hlsMediaAttached",
  921. MEDIA_DETACHING = "hlsMediaDetaching",
  922. MEDIA_DETACHED = "hlsMediaDetached",
  923. BUFFER_RESET = "hlsBufferReset",
  924. BUFFER_CODECS = "hlsBufferCodecs",
  925. BUFFER_CREATED = "hlsBufferCreated",
  926. BUFFER_APPENDING = "hlsBufferAppending",
  927. BUFFER_APPENDED = "hlsBufferAppended",
  928. BUFFER_EOS = "hlsBufferEos",
  929. BUFFER_FLUSHING = "hlsBufferFlushing",
  930. BUFFER_FLUSHED = "hlsBufferFlushed",
  931. MANIFEST_LOADING = "hlsManifestLoading",
  932. MANIFEST_LOADED = "hlsManifestLoaded",
  933. MANIFEST_PARSED = "hlsManifestParsed",
  934. LEVEL_SWITCHING = "hlsLevelSwitching",
  935. LEVEL_SWITCHED = "hlsLevelSwitched",
  936. LEVEL_LOADING = "hlsLevelLoading",
  937. LEVEL_LOADED = "hlsLevelLoaded",
  938. LEVEL_UPDATED = "hlsLevelUpdated",
  939. LEVEL_PTS_UPDATED = "hlsLevelPtsUpdated",
  940. LEVELS_UPDATED = "hlsLevelsUpdated",
  941. AUDIO_TRACKS_UPDATED = "hlsAudioTracksUpdated",
  942. AUDIO_TRACK_SWITCHING = "hlsAudioTrackSwitching",
  943. AUDIO_TRACK_SWITCHED = "hlsAudioTrackSwitched",
  944. AUDIO_TRACK_LOADING = "hlsAudioTrackLoading",
  945. AUDIO_TRACK_LOADED = "hlsAudioTrackLoaded",
  946. SUBTITLE_TRACKS_UPDATED = "hlsSubtitleTracksUpdated",
  947. SUBTITLE_TRACKS_CLEARED = "hlsSubtitleTracksCleared",
  948. SUBTITLE_TRACK_SWITCH = "hlsSubtitleTrackSwitch",
  949. SUBTITLE_TRACK_LOADING = "hlsSubtitleTrackLoading",
  950. SUBTITLE_TRACK_LOADED = "hlsSubtitleTrackLoaded",
  951. SUBTITLE_FRAG_PROCESSED = "hlsSubtitleFragProcessed",
  952. CUES_PARSED = "hlsCuesParsed",
  953. NON_NATIVE_TEXT_TRACKS_FOUND = "hlsNonNativeTextTracksFound",
  954. INIT_PTS_FOUND = "hlsInitPtsFound",
  955. FRAG_LOADING = "hlsFragLoading",
  956. FRAG_LOAD_EMERGENCY_ABORTED = "hlsFragLoadEmergencyAborted",
  957. FRAG_LOADED = "hlsFragLoaded",
  958. FRAG_DECRYPTED = "hlsFragDecrypted",
  959. FRAG_PARSING_INIT_SEGMENT = "hlsFragParsingInitSegment",
  960. FRAG_PARSING_USERDATA = "hlsFragParsingUserdata",
  961. FRAG_PARSING_METADATA = "hlsFragParsingMetadata",
  962. FRAG_PARSED = "hlsFragParsed",
  963. FRAG_BUFFERED = "hlsFragBuffered",
  964. FRAG_CHANGED = "hlsFragChanged",
  965. FPS_DROP = "hlsFpsDrop",
  966. FPS_DROP_LEVEL_CAPPING = "hlsFpsDropLevelCapping",
  967. MAX_AUTO_LEVEL_UPDATED = "hlsMaxAutoLevelUpdated",
  968. ERROR = "hlsError",
  969. DESTROYING = "hlsDestroying",
  970. KEY_LOADING = "hlsKeyLoading",
  971. KEY_LOADED = "hlsKeyLoaded",
  972. LIVE_BACK_BUFFER_REACHED = "hlsLiveBackBufferReached",
  973. BACK_BUFFER_REACHED = "hlsBackBufferReached",
  974. STEERING_MANIFEST_LOADED = "hlsSteeringManifestLoaded"
  975. }
  976. declare class EwmaBandWidthEstimator {
  977. private defaultEstimate_;
  978. private minWeight_;
  979. private minDelayMs_;
  980. private slow_;
  981. private fast_;
  982. private defaultTTFB_;
  983. private ttfb_;
  984. constructor(slow: number, fast: number, defaultEstimate: number, defaultTTFB?: number);
  985. update(slow: number, fast: number): void;
  986. sample(durationMs: number, numBytes: number): void;
  987. sampleTTFB(ttfb: number): void;
  988. canEstimate(): boolean;
  989. getEstimate(): number;
  990. getEstimateTTFB(): number;
  991. destroy(): void;
  992. }
  993. declare type ExtendedSourceBuffer = SourceBuffer & {
  994. ended?: boolean;
  995. ending?: boolean;
  996. changeType?: (type: string) => void;
  997. };
  998. export declare class FPSController implements ComponentAPI {
  999. private hls;
  1000. private isVideoPlaybackQualityAvailable;
  1001. private timer?;
  1002. private media;
  1003. private lastTime;
  1004. private lastDroppedFrames;
  1005. private lastDecodedFrames;
  1006. private streamController;
  1007. constructor(hls: Hls);
  1008. setStreamController(streamController: StreamController): void;
  1009. protected registerListeners(): void;
  1010. protected unregisterListeners(): void;
  1011. destroy(): void;
  1012. protected onMediaAttaching(event: Events.MEDIA_ATTACHING, data: MediaAttachingData): void;
  1013. checkFPS(video: HTMLVideoElement, decodedFrames: number, droppedFrames: number): void;
  1014. checkFPSInterval(): void;
  1015. }
  1016. export declare type FPSControllerConfig = {
  1017. capLevelOnFPSDrop: boolean;
  1018. fpsDroppedMonitoringPeriod: number;
  1019. fpsDroppedMonitoringThreshold: number;
  1020. };
  1021. export declare interface FPSDropData {
  1022. currentDropped: number;
  1023. currentDecoded: number;
  1024. totalDroppedFrames: number;
  1025. }
  1026. export declare interface FPSDropLevelCappingData {
  1027. droppedLevel: number;
  1028. level: number;
  1029. }
  1030. export declare interface FragBufferedData {
  1031. stats: LoadStats;
  1032. frag: Fragment;
  1033. part: Part | null;
  1034. id: string;
  1035. }
  1036. export declare interface FragChangedData {
  1037. frag: Fragment;
  1038. }
  1039. export declare interface FragDecryptedData {
  1040. frag: Fragment;
  1041. payload: ArrayBuffer;
  1042. stats: {
  1043. tstart: number;
  1044. tdecrypt: number;
  1045. };
  1046. }
  1047. export declare interface FragLoadedData {
  1048. frag: Fragment;
  1049. part: Part | null;
  1050. payload: ArrayBuffer;
  1051. networkDetails: unknown;
  1052. }
  1053. export declare interface FragLoadEmergencyAbortedData {
  1054. frag: Fragment;
  1055. part: Part | null;
  1056. stats: LoaderStats;
  1057. }
  1058. declare interface FragLoadFailResult extends ErrorData {
  1059. frag: Fragment;
  1060. part?: Part;
  1061. response?: {
  1062. data: any;
  1063. code: number;
  1064. text: string;
  1065. url: string;
  1066. };
  1067. networkDetails: any;
  1068. }
  1069. export declare interface FragLoadingData {
  1070. frag: Fragment;
  1071. part?: Part;
  1072. targetBufferTime: number | null;
  1073. }
  1074. /**
  1075. * Object representing parsed data from an HLS Segment. Found in {@link hls.js#LevelDetails.fragments}.
  1076. */
  1077. export declare class Fragment extends BaseSegment {
  1078. private _decryptdata;
  1079. rawProgramDateTime: string | null;
  1080. programDateTime: number | null;
  1081. tagList: Array<string[]>;
  1082. duration: number;
  1083. sn: number | 'initSegment';
  1084. levelkeys?: {
  1085. [key: string]: LevelKey;
  1086. };
  1087. readonly type: PlaylistLevelType;
  1088. loader: Loader<FragmentLoaderContext> | null;
  1089. keyLoader: Loader<KeyLoaderContext> | null;
  1090. level: number;
  1091. cc: number;
  1092. startPTS?: number;
  1093. endPTS?: number;
  1094. startDTS: number;
  1095. endDTS: number;
  1096. start: number;
  1097. deltaPTS?: number;
  1098. maxStartPTS?: number;
  1099. minEndPTS?: number;
  1100. stats: LoadStats;
  1101. data?: Uint8Array;
  1102. bitrateTest: boolean;
  1103. title: string | null;
  1104. initSegment: Fragment | null;
  1105. endList?: boolean;
  1106. gap?: boolean;
  1107. urlId: number;
  1108. constructor(type: PlaylistLevelType, baseurl: string);
  1109. get decryptdata(): LevelKey | null;
  1110. get end(): number;
  1111. get endProgramDateTime(): number | null;
  1112. get encrypted(): boolean;
  1113. setKeyFormat(keyFormat: KeySystemFormats): void;
  1114. abortRequests(): void;
  1115. setElementaryStreamInfo(type: ElementaryStreamTypes, startPTS: number, endPTS: number, startDTS: number, endDTS: number, partial?: boolean): void;
  1116. clearElementaryStreamInfo(): void;
  1117. }
  1118. declare class FragmentLoader {
  1119. private readonly config;
  1120. private loader;
  1121. private partLoadTimeout;
  1122. constructor(config: HlsConfig);
  1123. destroy(): void;
  1124. abort(): void;
  1125. load(frag: Fragment, onProgress?: FragmentLoadProgressCallback): Promise<FragLoadedData>;
  1126. loadPart(frag: Fragment, part: Part, onProgress: FragmentLoadProgressCallback): Promise<FragLoadedData>;
  1127. private updateStatsFromPart;
  1128. private resetLoader;
  1129. }
  1130. /**
  1131. * @deprecated use fragLoadPolicy.default
  1132. */
  1133. export declare type FragmentLoaderConfig = {
  1134. fragLoadingTimeOut: number;
  1135. fragLoadingMaxRetry: number;
  1136. fragLoadingRetryDelay: number;
  1137. fragLoadingMaxRetryTimeout: number;
  1138. };
  1139. export declare interface FragmentLoaderConstructor {
  1140. new (confg: HlsConfig): Loader<FragmentLoaderContext>;
  1141. }
  1142. export declare interface FragmentLoaderContext extends LoaderContext {
  1143. frag: Fragment;
  1144. part: Part | null;
  1145. resetIV?: boolean;
  1146. }
  1147. declare type FragmentLoadProgressCallback = (result: FragLoadedData | PartsLoadedData) => void;
  1148. declare const enum FragmentState {
  1149. NOT_LOADED = "NOT_LOADED",
  1150. APPENDING = "APPENDING",
  1151. PARTIAL = "PARTIAL",
  1152. OK = "OK"
  1153. }
  1154. declare class FragmentTracker implements ComponentAPI {
  1155. private activePartLists;
  1156. private endListFragments;
  1157. private fragments;
  1158. private timeRanges;
  1159. private bufferPadding;
  1160. private hls;
  1161. private hasGaps;
  1162. constructor(hls: Hls);
  1163. private _registerListeners;
  1164. private _unregisterListeners;
  1165. destroy(): void;
  1166. /**
  1167. * Return a Fragment or Part with an appended range that matches the position and levelType
  1168. * Otherwise, return null
  1169. */
  1170. getAppendedFrag(position: number, levelType: PlaylistLevelType): Fragment | Part | null;
  1171. /**
  1172. * Return a buffered Fragment that matches the position and levelType.
  1173. * A buffered Fragment is one whose loading, parsing and appending is done (completed or "partial" meaning aborted).
  1174. * If not found any Fragment, return null
  1175. */
  1176. getBufferedFrag(position: number, levelType: PlaylistLevelType): Fragment | null;
  1177. /**
  1178. * Partial fragments effected by coded frame eviction will be removed
  1179. * The browser will unload parts of the buffer to free up memory for new buffer data
  1180. * 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)
  1181. */
  1182. detectEvictedFragments(elementaryStream: SourceBufferName, timeRange: TimeRanges, playlistType: PlaylistLevelType, appendedPart?: Part | null): void;
  1183. /**
  1184. * Checks if the fragment passed in is loaded in the buffer properly
  1185. * Partially loaded fragments will be registered as a partial fragment
  1186. */
  1187. detectPartialFragments(data: FragBufferedData): void;
  1188. private removeParts;
  1189. fragBuffered(frag: Fragment, force?: true): void;
  1190. private getBufferedTimes;
  1191. /**
  1192. * Gets the partial fragment for a certain time
  1193. */
  1194. getPartialFragment(time: number): Fragment | null;
  1195. isEndListAppended(type: PlaylistLevelType): boolean;
  1196. getState(fragment: Fragment): FragmentState;
  1197. private isTimeBuffered;
  1198. private onFragLoaded;
  1199. private onBufferAppended;
  1200. private onFragBuffered;
  1201. private hasFragment;
  1202. hasParts(type: PlaylistLevelType): boolean;
  1203. removeFragmentsInRange(start: number, end: number, playlistType: PlaylistLevelType, withGapOnly?: boolean, unbufferedOnly?: boolean): void;
  1204. removeFragment(fragment: Fragment): void;
  1205. removeAllFragments(): void;
  1206. }
  1207. export declare interface FragParsedData {
  1208. frag: Fragment;
  1209. part: Part | null;
  1210. }
  1211. export declare interface FragParsingInitSegmentData {
  1212. }
  1213. export declare interface FragParsingMetadataData {
  1214. id: string;
  1215. frag: Fragment;
  1216. details: LevelDetails;
  1217. samples: MetadataSample[];
  1218. }
  1219. export declare interface FragParsingUserdataData {
  1220. id: string;
  1221. frag: Fragment;
  1222. details: LevelDetails;
  1223. samples: UserdataSample[];
  1224. }
  1225. export declare type HdcpLevel = (typeof HdcpLevels)[number];
  1226. declare const HdcpLevels: readonly ["NONE", "TYPE-0", "TYPE-1", null];
  1227. /**
  1228. * The `Hls` class is the core of the HLS.js library used to instantiate player instances.
  1229. * @public
  1230. */
  1231. declare class Hls implements HlsEventEmitter {
  1232. private static defaultConfig;
  1233. /**
  1234. * The runtime configuration used by the player. At instantiation this is combination of `hls.userConfig` merged over `Hls.DefaultConfig`.
  1235. */
  1236. readonly config: HlsConfig;
  1237. /**
  1238. * The configuration object provided on player instantiation.
  1239. */
  1240. readonly userConfig: Partial<HlsConfig>;
  1241. private coreComponents;
  1242. private networkControllers;
  1243. private started;
  1244. private _emitter;
  1245. private _autoLevelCapping;
  1246. private _maxHdcpLevel;
  1247. private abrController;
  1248. private bufferController;
  1249. private capLevelController;
  1250. private latencyController;
  1251. private levelController;
  1252. private streamController;
  1253. private audioTrackController;
  1254. private subtitleTrackController;
  1255. private emeController;
  1256. private cmcdController;
  1257. private _media;
  1258. private url;
  1259. private triggeringException?;
  1260. /**
  1261. * Get the video-dev/hls.js package version.
  1262. */
  1263. static get version(): string;
  1264. /**
  1265. * Check if the required MediaSource Extensions are available.
  1266. */
  1267. static isMSESupported(): boolean;
  1268. /**
  1269. * Check if MediaSource Extensions are available and isTypeSupported checks pass for any baseline codecs.
  1270. */
  1271. static isSupported(): boolean;
  1272. /**
  1273. * Get the MediaSource global used for MSE playback (ManagedMediaSource, MediaSource, or WebKitMediaSource).
  1274. */
  1275. static getMediaSource(): typeof MediaSource | undefined;
  1276. static get Events(): typeof Events;
  1277. static get ErrorTypes(): typeof ErrorTypes;
  1278. static get ErrorDetails(): typeof ErrorDetails;
  1279. /**
  1280. * Get the default configuration applied to new instances.
  1281. */
  1282. static get DefaultConfig(): HlsConfig;
  1283. /**
  1284. * Replace the default configuration applied to new instances.
  1285. */
  1286. static set DefaultConfig(defaultConfig: HlsConfig);
  1287. /**
  1288. * Creates an instance of an HLS client that can attach to exactly one `HTMLMediaElement`.
  1289. * @param userConfig - Configuration options applied over `Hls.DefaultConfig`
  1290. */
  1291. constructor(userConfig?: Partial<HlsConfig>);
  1292. createController(ControllerClass: any, components: any): any;
  1293. on<E extends keyof HlsListeners, Context = undefined>(event: E, listener: HlsListeners[E], context?: Context): void;
  1294. once<E extends keyof HlsListeners, Context = undefined>(event: E, listener: HlsListeners[E], context?: Context): void;
  1295. removeAllListeners<E extends keyof HlsListeners>(event?: E | undefined): void;
  1296. off<E extends keyof HlsListeners, Context = undefined>(event: E, listener?: HlsListeners[E] | undefined, context?: Context, once?: boolean | undefined): void;
  1297. listeners<E extends keyof HlsListeners>(event: E): HlsListeners[E][];
  1298. emit<E extends keyof HlsListeners>(event: E, name: E, eventObject: Parameters<HlsListeners[E]>[1]): boolean;
  1299. trigger<E extends keyof HlsListeners>(event: E, eventObject: Parameters<HlsListeners[E]>[1]): boolean;
  1300. listenerCount<E extends keyof HlsListeners>(event: E): number;
  1301. /**
  1302. * Dispose of the instance
  1303. */
  1304. destroy(): void;
  1305. /**
  1306. * Attaches Hls.js to a media element
  1307. */
  1308. attachMedia(media: HTMLMediaElement): void;
  1309. /**
  1310. * Detach Hls.js from the media
  1311. */
  1312. detachMedia(): void;
  1313. /**
  1314. * Set the source URL. Can be relative or absolute.
  1315. */
  1316. loadSource(url: string): void;
  1317. /**
  1318. * Start loading data from the stream source.
  1319. * Depending on default config, client starts loading automatically when a source is set.
  1320. *
  1321. * @param startPosition - Set the start position to stream from.
  1322. * Defaults to -1 (None: starts from earliest point)
  1323. */
  1324. startLoad(startPosition?: number): void;
  1325. /**
  1326. * Stop loading of any stream data.
  1327. */
  1328. stopLoad(): void;
  1329. /**
  1330. * Resumes stream controller segment loading if previously started.
  1331. */
  1332. resumeBuffering(): void;
  1333. /**
  1334. * Stops stream controller segment loading without changing 'started' state like stopLoad().
  1335. * This allows for media buffering to be paused without interupting playlist loading.
  1336. */
  1337. pauseBuffering(): void;
  1338. /**
  1339. * Swap through possible audio codecs in the stream (for example to switch from stereo to 5.1)
  1340. */
  1341. swapAudioCodec(): void;
  1342. /**
  1343. * When the media-element fails, this allows to detach and then re-attach it
  1344. * as one call (convenience method).
  1345. *
  1346. * Automatic recovery of media-errors by this process is configurable.
  1347. */
  1348. recoverMediaError(): void;
  1349. removeLevel(levelIndex: number): void;
  1350. /**
  1351. * @returns an array of levels (variants) sorted by HDCP-LEVEL, RESOLUTION (height), FRAME-RATE, CODECS, VIDEO-RANGE, and BANDWIDTH
  1352. */
  1353. get levels(): Level[];
  1354. /**
  1355. * Index of quality level (variant) currently played
  1356. */
  1357. get currentLevel(): number;
  1358. /**
  1359. * 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.
  1360. */
  1361. set currentLevel(newLevel: number);
  1362. /**
  1363. * Index of next quality level loaded as scheduled by stream controller.
  1364. */
  1365. get nextLevel(): number;
  1366. /**
  1367. * Set quality level index for next loaded data.
  1368. * This will switch the video quality asap, without interrupting playback.
  1369. * May abort current loading of data, and flush parts of buffer (outside currently played fragment region).
  1370. * @param newLevel - Pass -1 for automatic level selection
  1371. */
  1372. set nextLevel(newLevel: number);
  1373. /**
  1374. * Return the quality level of the currently or last (of none is loaded currently) segment
  1375. */
  1376. get loadLevel(): number;
  1377. /**
  1378. * Set quality level index for next loaded data in a conservative way.
  1379. * This will switch the quality without flushing, but interrupt current loading.
  1380. * Thus the moment when the quality switch will appear in effect will only be after the already existing buffer.
  1381. * @param newLevel - Pass -1 for automatic level selection
  1382. */
  1383. set loadLevel(newLevel: number);
  1384. /**
  1385. * get next quality level loaded
  1386. */
  1387. get nextLoadLevel(): number;
  1388. /**
  1389. * Set quality level of next loaded segment in a fully "non-destructive" way.
  1390. * Same as `loadLevel` but will wait for next switch (until current loading is done).
  1391. */
  1392. set nextLoadLevel(level: number);
  1393. /**
  1394. * Return "first level": like a default level, if not set,
  1395. * falls back to index of first level referenced in manifest
  1396. */
  1397. get firstLevel(): number;
  1398. /**
  1399. * Sets "first-level", see getter.
  1400. */
  1401. set firstLevel(newLevel: number);
  1402. /**
  1403. * Return the desired start level for the first fragment that will be loaded.
  1404. * The default value of -1 indicates automatic start level selection.
  1405. * Setting hls.nextAutoLevel without setting a startLevel will result in
  1406. * the nextAutoLevel value being used for one fragment load.
  1407. */
  1408. get startLevel(): number;
  1409. /**
  1410. * set start level (level of first fragment that will be played back)
  1411. * if not overrided by user, first level appearing in manifest will be used as start level
  1412. * if -1 : automatic start level selection, playback will start from level matching download bandwidth
  1413. * (determined from download of first segment)
  1414. */
  1415. set startLevel(newLevel: number);
  1416. /**
  1417. * Whether level capping is enabled.
  1418. * Default value is set via `config.capLevelToPlayerSize`.
  1419. */
  1420. get capLevelToPlayerSize(): boolean;
  1421. /**
  1422. * Enables or disables level capping. If disabled after previously enabled, `nextLevelSwitch` will be immediately called.
  1423. */
  1424. set capLevelToPlayerSize(shouldStartCapping: boolean);
  1425. /**
  1426. * Capping/max level value that should be used by automatic level selection algorithm (`ABRController`)
  1427. */
  1428. get autoLevelCapping(): number;
  1429. /**
  1430. * Returns the current bandwidth estimate in bits per second, when available. Otherwise, `NaN` is returned.
  1431. */
  1432. get bandwidthEstimate(): number;
  1433. set bandwidthEstimate(abrEwmaDefaultEstimate: number);
  1434. /**
  1435. * get time to first byte estimate
  1436. * @type {number}
  1437. */
  1438. get ttfbEstimate(): number;
  1439. /**
  1440. * Capping/max level value that should be used by automatic level selection algorithm (`ABRController`)
  1441. */
  1442. set autoLevelCapping(newLevel: number);
  1443. get maxHdcpLevel(): HdcpLevel;
  1444. set maxHdcpLevel(value: HdcpLevel);
  1445. /**
  1446. * True when automatic level selection enabled
  1447. */
  1448. get autoLevelEnabled(): boolean;
  1449. /**
  1450. * Level set manually (if any)
  1451. */
  1452. get manualLevel(): number;
  1453. /**
  1454. * min level selectable in auto mode according to config.minAutoBitrate
  1455. */
  1456. get minAutoLevel(): number;
  1457. /**
  1458. * max level selectable in auto mode according to autoLevelCapping
  1459. */
  1460. get maxAutoLevel(): number;
  1461. get firstAutoLevel(): number;
  1462. /**
  1463. * next automatically selected quality level
  1464. */
  1465. get nextAutoLevel(): number;
  1466. /**
  1467. * this setter is used to force next auto level.
  1468. * this is useful to force a switch down in auto mode:
  1469. * in case of load error on level N, hls.js can set nextAutoLevel to N-1 for example)
  1470. * forced value is valid for one fragment. upon successful frag loading at forced level,
  1471. * this value will be resetted to -1 by ABR controller.
  1472. */
  1473. set nextAutoLevel(nextLevel: number);
  1474. /**
  1475. * get the datetime value relative to media.currentTime for the active level Program Date Time if present
  1476. */
  1477. get playingDate(): Date | null;
  1478. get mainForwardBufferInfo(): BufferInfo | null;
  1479. /**
  1480. * Find and select the best matching audio track, making a level switch when a Group change is necessary.
  1481. * Updates `hls.config.audioPreference`. Returns the selected track, or null when no matching track is found.
  1482. */
  1483. setAudioOption(audioOption: MediaPlaylist | AudioSelectionOption | undefined): MediaPlaylist | null;
  1484. /**
  1485. * Find and select the best matching subtitle track, making a level switch when a Group change is necessary.
  1486. * Updates `hls.config.subtitlePreference`. Returns the selected track, or null when no matching track is found.
  1487. */
  1488. setSubtitleOption(subtitleOption: MediaPlaylist | SubtitleSelectionOption | undefined): MediaPlaylist | null;
  1489. /**
  1490. * Get the complete list of audio tracks across all media groups
  1491. */
  1492. get allAudioTracks(): Array<MediaPlaylist>;
  1493. /**
  1494. * Get the list of selectable audio tracks
  1495. */
  1496. get audioTracks(): Array<MediaPlaylist>;
  1497. /**
  1498. * index of the selected audio track (index in audio track lists)
  1499. */
  1500. get audioTrack(): number;
  1501. /**
  1502. * selects an audio track, based on its index in audio track lists
  1503. */
  1504. set audioTrack(audioTrackId: number);
  1505. /**
  1506. * get the complete list of subtitle tracks across all media groups
  1507. */
  1508. get allSubtitleTracks(): Array<MediaPlaylist>;
  1509. /**
  1510. * get alternate subtitle tracks list from playlist
  1511. */
  1512. get subtitleTracks(): Array<MediaPlaylist>;
  1513. /**
  1514. * index of the selected subtitle track (index in subtitle track lists)
  1515. */
  1516. get subtitleTrack(): number;
  1517. get media(): HTMLMediaElement | null;
  1518. /**
  1519. * select an subtitle track, based on its index in subtitle track lists
  1520. */
  1521. set subtitleTrack(subtitleTrackId: number);
  1522. /**
  1523. * Whether subtitle display is enabled or not
  1524. */
  1525. get subtitleDisplay(): boolean;
  1526. /**
  1527. * Enable/disable subtitle display rendering
  1528. */
  1529. set subtitleDisplay(value: boolean);
  1530. /**
  1531. * get mode for Low-Latency HLS loading
  1532. */
  1533. get lowLatencyMode(): boolean;
  1534. /**
  1535. * Enable/disable Low-Latency HLS part playlist and segment loading, and start live streams at playlist PART-HOLD-BACK rather than HOLD-BACK.
  1536. */
  1537. set lowLatencyMode(mode: boolean);
  1538. /**
  1539. * Position (in seconds) of live sync point (ie edge of live position minus safety delay defined by ```hls.config.liveSyncDuration```)
  1540. * @returns null prior to loading live Playlist
  1541. */
  1542. get liveSyncPosition(): number | null;
  1543. /**
  1544. * Estimated position (in seconds) of live edge (ie edge of live playlist plus time sync playlist advanced)
  1545. * @returns 0 before first playlist is loaded
  1546. */
  1547. get latency(): number;
  1548. /**
  1549. * maximum distance from the edge before the player seeks forward to ```hls.liveSyncPosition```
  1550. * configured using ```liveMaxLatencyDurationCount``` (multiple of target duration) or ```liveMaxLatencyDuration```
  1551. * @returns 0 before first playlist is loaded
  1552. */
  1553. get maxLatency(): number;
  1554. /**
  1555. * target distance from the edge as calculated by the latency controller
  1556. */
  1557. get targetLatency(): number | null;
  1558. /**
  1559. * the rate at which the edge of the current live playlist is advancing or 1 if there is none
  1560. */
  1561. get drift(): number | null;
  1562. /**
  1563. * set to true when startLoad is called before MANIFEST_PARSED event
  1564. */
  1565. get forceStartLoad(): boolean;
  1566. }
  1567. export default Hls;
  1568. export declare interface HlsChunkPerformanceTiming extends HlsPerformanceTiming {
  1569. executeStart: number;
  1570. executeEnd: number;
  1571. }
  1572. export declare type HlsConfig = {
  1573. debug: boolean | ILogger;
  1574. enableWorker: boolean;
  1575. workerPath: null | string;
  1576. enableSoftwareAES: boolean;
  1577. minAutoBitrate: number;
  1578. ignoreDevicePixelRatio: boolean;
  1579. preferManagedMediaSource: boolean;
  1580. loader: {
  1581. new (confg: HlsConfig): Loader<LoaderContext>;
  1582. };
  1583. fLoader?: FragmentLoaderConstructor;
  1584. pLoader?: PlaylistLoaderConstructor;
  1585. fetchSetup?: (context: LoaderContext, initParams: any) => Request;
  1586. xhrSetup?: (xhr: XMLHttpRequest, url: string) => Promise<void> | void;
  1587. audioStreamController?: typeof AudioStreamController;
  1588. audioTrackController?: typeof AudioTrackController;
  1589. subtitleStreamController?: typeof SubtitleStreamController;
  1590. subtitleTrackController?: typeof SubtitleTrackController;
  1591. timelineController?: typeof TimelineController;
  1592. emeController?: typeof EMEController;
  1593. cmcd?: CMCDControllerConfig;
  1594. cmcdController?: typeof CMCDController;
  1595. contentSteeringController?: typeof ContentSteeringController;
  1596. useMediaCapabilities: boolean;
  1597. abrController: typeof AbrController;
  1598. bufferController: typeof BufferController;
  1599. capLevelController: typeof CapLevelController;
  1600. errorController: typeof ErrorController;
  1601. fpsController: typeof FPSController;
  1602. progressive: boolean;
  1603. lowLatencyMode: boolean;
  1604. } & ABRControllerConfig & BufferControllerConfig & CapLevelControllerConfig & EMEControllerConfig & FPSControllerConfig & LevelControllerConfig & MP4RemuxerConfig & StreamControllerConfig & SelectionPreferences & LatencyControllerConfig & MetadataControllerConfig & TimelineControllerConfig & TSDemuxerConfig & HlsLoadPolicies & FragmentLoaderConfig & PlaylistLoaderConfig;
  1605. export declare interface HlsEventEmitter {
  1606. on<E extends keyof HlsListeners, Context = undefined>(event: E, listener: HlsListeners[E], context?: Context): void;
  1607. once<E extends keyof HlsListeners, Context = undefined>(event: E, listener: HlsListeners[E], context?: Context): void;
  1608. removeAllListeners<E extends keyof HlsListeners>(event?: E): void;
  1609. off<E extends keyof HlsListeners, Context = undefined>(event: E, listener?: HlsListeners[E], context?: Context, once?: boolean): void;
  1610. listeners<E extends keyof HlsListeners>(event: E): HlsListeners[E][];
  1611. emit<E extends keyof HlsListeners>(event: E, name: E, eventObject: Parameters<HlsListeners[E]>[1]): boolean;
  1612. listenerCount<E extends keyof HlsListeners>(event: E): number;
  1613. }
  1614. /**
  1615. * Defines each Event type and payload by Event name. Used in {@link hls.js#HlsEventEmitter} to strongly type the event listener API.
  1616. */
  1617. export declare interface HlsListeners {
  1618. [Events.MEDIA_ATTACHING]: (event: Events.MEDIA_ATTACHING, data: MediaAttachingData) => void;
  1619. [Events.MEDIA_ATTACHED]: (event: Events.MEDIA_ATTACHED, data: MediaAttachedData) => void;
  1620. [Events.MEDIA_DETACHING]: (event: Events.MEDIA_DETACHING) => void;
  1621. [Events.MEDIA_DETACHED]: (event: Events.MEDIA_DETACHED) => void;
  1622. [Events.BUFFER_RESET]: (event: Events.BUFFER_RESET) => void;
  1623. [Events.BUFFER_CODECS]: (event: Events.BUFFER_CODECS, data: BufferCodecsData) => void;
  1624. [Events.BUFFER_CREATED]: (event: Events.BUFFER_CREATED, data: BufferCreatedData) => void;
  1625. [Events.BUFFER_APPENDING]: (event: Events.BUFFER_APPENDING, data: BufferAppendingData) => void;
  1626. [Events.BUFFER_APPENDED]: (event: Events.BUFFER_APPENDED, data: BufferAppendedData) => void;
  1627. [Events.BUFFER_EOS]: (event: Events.BUFFER_EOS, data: BufferEOSData) => void;
  1628. [Events.BUFFER_FLUSHING]: (event: Events.BUFFER_FLUSHING, data: BufferFlushingData) => void;
  1629. [Events.BUFFER_FLUSHED]: (event: Events.BUFFER_FLUSHED, data: BufferFlushedData) => void;
  1630. [Events.MANIFEST_LOADING]: (event: Events.MANIFEST_LOADING, data: ManifestLoadingData) => void;
  1631. [Events.MANIFEST_LOADED]: (event: Events.MANIFEST_LOADED, data: ManifestLoadedData) => void;
  1632. [Events.MANIFEST_PARSED]: (event: Events.MANIFEST_PARSED, data: ManifestParsedData) => void;
  1633. [Events.LEVEL_SWITCHING]: (event: Events.LEVEL_SWITCHING, data: LevelSwitchingData) => void;
  1634. [Events.LEVEL_SWITCHED]: (event: Events.LEVEL_SWITCHED, data: LevelSwitchedData) => void;
  1635. [Events.LEVEL_LOADING]: (event: Events.LEVEL_LOADING, data: LevelLoadingData) => void;
  1636. [Events.LEVEL_LOADED]: (event: Events.LEVEL_LOADED, data: LevelLoadedData) => void;
  1637. [Events.LEVEL_UPDATED]: (event: Events.LEVEL_UPDATED, data: LevelUpdatedData) => void;
  1638. [Events.LEVEL_PTS_UPDATED]: (event: Events.LEVEL_PTS_UPDATED, data: LevelPTSUpdatedData) => void;
  1639. [Events.LEVELS_UPDATED]: (event: Events.LEVELS_UPDATED, data: LevelsUpdatedData) => void;
  1640. [Events.AUDIO_TRACKS_UPDATED]: (event: Events.AUDIO_TRACKS_UPDATED, data: AudioTracksUpdatedData) => void;
  1641. [Events.AUDIO_TRACK_SWITCHING]: (event: Events.AUDIO_TRACK_SWITCHING, data: AudioTrackSwitchingData) => void;
  1642. [Events.AUDIO_TRACK_SWITCHED]: (event: Events.AUDIO_TRACK_SWITCHED, data: AudioTrackSwitchedData) => void;
  1643. [Events.AUDIO_TRACK_LOADING]: (event: Events.AUDIO_TRACK_LOADING, data: TrackLoadingData) => void;
  1644. [Events.AUDIO_TRACK_LOADED]: (event: Events.AUDIO_TRACK_LOADED, data: AudioTrackLoadedData) => void;
  1645. [Events.SUBTITLE_TRACKS_UPDATED]: (event: Events.SUBTITLE_TRACKS_UPDATED, data: SubtitleTracksUpdatedData) => void;
  1646. [Events.SUBTITLE_TRACKS_CLEARED]: (event: Events.SUBTITLE_TRACKS_CLEARED) => void;
  1647. [Events.SUBTITLE_TRACK_SWITCH]: (event: Events.SUBTITLE_TRACK_SWITCH, data: SubtitleTrackSwitchData) => void;
  1648. [Events.SUBTITLE_TRACK_LOADING]: (event: Events.SUBTITLE_TRACK_LOADING, data: TrackLoadingData) => void;
  1649. [Events.SUBTITLE_TRACK_LOADED]: (event: Events.SUBTITLE_TRACK_LOADED, data: SubtitleTrackLoadedData) => void;
  1650. [Events.SUBTITLE_FRAG_PROCESSED]: (event: Events.SUBTITLE_FRAG_PROCESSED, data: SubtitleFragProcessedData) => void;
  1651. [Events.CUES_PARSED]: (event: Events.CUES_PARSED, data: CuesParsedData) => void;
  1652. [Events.NON_NATIVE_TEXT_TRACKS_FOUND]: (event: Events.NON_NATIVE_TEXT_TRACKS_FOUND, data: NonNativeTextTracksData) => void;
  1653. [Events.INIT_PTS_FOUND]: (event: Events.INIT_PTS_FOUND, data: InitPTSFoundData) => void;
  1654. [Events.FRAG_LOADING]: (event: Events.FRAG_LOADING, data: FragLoadingData) => void;
  1655. [Events.FRAG_LOAD_EMERGENCY_ABORTED]: (event: Events.FRAG_LOAD_EMERGENCY_ABORTED, data: FragLoadEmergencyAbortedData) => void;
  1656. [Events.FRAG_LOADED]: (event: Events.FRAG_LOADED, data: FragLoadedData) => void;
  1657. [Events.FRAG_DECRYPTED]: (event: Events.FRAG_DECRYPTED, data: FragDecryptedData) => void;
  1658. [Events.FRAG_PARSING_INIT_SEGMENT]: (event: Events.FRAG_PARSING_INIT_SEGMENT, data: FragParsingInitSegmentData) => void;
  1659. [Events.FRAG_PARSING_USERDATA]: (event: Events.FRAG_PARSING_USERDATA, data: FragParsingUserdataData) => void;
  1660. [Events.FRAG_PARSING_METADATA]: (event: Events.FRAG_PARSING_METADATA, data: FragParsingMetadataData) => void;
  1661. [Events.FRAG_PARSED]: (event: Events.FRAG_PARSED, data: FragParsedData) => void;
  1662. [Events.FRAG_BUFFERED]: (event: Events.FRAG_BUFFERED, data: FragBufferedData) => void;
  1663. [Events.FRAG_CHANGED]: (event: Events.FRAG_CHANGED, data: FragChangedData) => void;
  1664. [Events.FPS_DROP]: (event: Events.FPS_DROP, data: FPSDropData) => void;
  1665. [Events.FPS_DROP_LEVEL_CAPPING]: (event: Events.FPS_DROP_LEVEL_CAPPING, data: FPSDropLevelCappingData) => void;
  1666. [Events.MAX_AUTO_LEVEL_UPDATED]: (event: Events.MAX_AUTO_LEVEL_UPDATED, data: MaxAutoLevelUpdatedData) => void;
  1667. [Events.ERROR]: (event: Events.ERROR, data: ErrorData) => void;
  1668. [Events.DESTROYING]: (event: Events.DESTROYING) => void;
  1669. [Events.KEY_LOADING]: (event: Events.KEY_LOADING, data: KeyLoadingData) => void;
  1670. [Events.KEY_LOADED]: (event: Events.KEY_LOADED, data: KeyLoadedData) => void;
  1671. [Events.LIVE_BACK_BUFFER_REACHED]: (event: Events.LIVE_BACK_BUFFER_REACHED, data: LiveBackBufferData) => void;
  1672. [Events.BACK_BUFFER_REACHED]: (event: Events.BACK_BUFFER_REACHED, data: BackBufferData) => void;
  1673. [Events.STEERING_MANIFEST_LOADED]: (event: Events.STEERING_MANIFEST_LOADED, data: SteeringManifestLoadedData) => void;
  1674. }
  1675. export declare type HlsLoadPolicies = {
  1676. fragLoadPolicy: LoadPolicy;
  1677. keyLoadPolicy: LoadPolicy;
  1678. certLoadPolicy: LoadPolicy;
  1679. playlistLoadPolicy: LoadPolicy;
  1680. manifestLoadPolicy: LoadPolicy;
  1681. steeringManifestLoadPolicy: LoadPolicy;
  1682. };
  1683. export declare interface HlsPerformanceTiming {
  1684. start: number;
  1685. end: number;
  1686. }
  1687. export declare interface HlsProgressivePerformanceTiming extends HlsPerformanceTiming {
  1688. first: number;
  1689. }
  1690. export declare const enum HlsSkip {
  1691. No = "",
  1692. Yes = "YES",
  1693. v2 = "v2"
  1694. }
  1695. export declare class HlsUrlParameters {
  1696. msn?: number;
  1697. part?: number;
  1698. skip?: HlsSkip;
  1699. constructor(msn?: number, part?: number, skip?: HlsSkip);
  1700. addDirectives(uri: string): string | never;
  1701. }
  1702. export declare type IErrorAction = {
  1703. action: NetworkErrorAction;
  1704. flags: ErrorActionFlags;
  1705. retryCount?: number;
  1706. retryConfig?: RetryConfig;
  1707. hdcpLevel?: HdcpLevel;
  1708. nextAutoLevel?: number;
  1709. resolved?: boolean;
  1710. };
  1711. declare interface ILogFunction {
  1712. (message?: any, ...optionalParams: any[]): void;
  1713. }
  1714. export declare interface ILogger {
  1715. trace: ILogFunction;
  1716. debug: ILogFunction;
  1717. log: ILogFunction;
  1718. warn: ILogFunction;
  1719. info: ILogFunction;
  1720. error: ILogFunction;
  1721. }
  1722. export declare interface InitPTSFoundData {
  1723. id: string;
  1724. frag: Fragment;
  1725. initPTS: number;
  1726. timescale: number;
  1727. }
  1728. declare interface InitSegmentData {
  1729. tracks?: TrackSet;
  1730. initPTS: number | undefined;
  1731. timescale: number | undefined;
  1732. }
  1733. export declare interface KeyLoadedData {
  1734. frag: Fragment;
  1735. keyInfo: KeyLoaderInfo;
  1736. }
  1737. declare class KeyLoader implements ComponentAPI {
  1738. private readonly config;
  1739. keyUriToKeyInfo: {
  1740. [keyuri: string]: KeyLoaderInfo;
  1741. };
  1742. emeController: EMEController | null;
  1743. constructor(config: HlsConfig);
  1744. abort(type?: PlaylistLevelType): void;
  1745. detach(): void;
  1746. destroy(): void;
  1747. createKeyLoadError(frag: Fragment, details: ErrorDetails | undefined, error: Error, networkDetails?: any, response?: {
  1748. url: string;
  1749. data: undefined;
  1750. code: number;
  1751. text: string;
  1752. }): LoadError;
  1753. loadClear(loadingFrag: Fragment, encryptedFragments: Fragment[]): void | Promise<void>;
  1754. load(frag: Fragment): Promise<KeyLoadedData>;
  1755. loadInternal(frag: Fragment, keySystemFormat?: KeySystemFormats): Promise<KeyLoadedData>;
  1756. loadKeyEME(keyInfo: KeyLoaderInfo, frag: Fragment): Promise<KeyLoadedData>;
  1757. loadKeyHTTP(keyInfo: KeyLoaderInfo, frag: Fragment): Promise<KeyLoadedData>;
  1758. private resetLoader;
  1759. }
  1760. declare interface KeyLoaderContext extends LoaderContext {
  1761. keyInfo: KeyLoaderInfo;
  1762. frag: Fragment;
  1763. }
  1764. declare interface KeyLoaderInfo {
  1765. decryptdata: LevelKey;
  1766. keyLoadPromise: Promise<KeyLoadedData> | null;
  1767. loader: Loader<KeyLoaderContext> | null;
  1768. mediaKeySessionContext: MediaKeySessionContext | null;
  1769. }
  1770. export declare interface KeyLoadingData {
  1771. frag: Fragment;
  1772. }
  1773. export declare const enum KeySystemFormats {
  1774. CLEARKEY = "org.w3.clearkey",
  1775. FAIRPLAY = "com.apple.streamingkeydelivery",
  1776. PLAYREADY = "com.microsoft.playready",
  1777. WIDEVINE = "urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"
  1778. }
  1779. /**
  1780. * @see https://developer.mozilla.org/en-US/docs/Web/API/Navigator/requestMediaKeySystemAccess
  1781. */
  1782. export declare const enum KeySystems {
  1783. CLEARKEY = "org.w3.clearkey",
  1784. FAIRPLAY = "com.apple.fps",
  1785. PLAYREADY = "com.microsoft.playready",
  1786. WIDEVINE = "com.widevine.alpha"
  1787. }
  1788. export declare type LatencyControllerConfig = {
  1789. liveSyncDurationCount: number;
  1790. liveMaxLatencyDurationCount: number;
  1791. liveSyncDuration?: number;
  1792. liveMaxLatencyDuration?: number;
  1793. maxLiveSyncPlaybackRate: number;
  1794. };
  1795. export declare class Level {
  1796. readonly _attrs: LevelAttributes[];
  1797. readonly audioCodec: string | undefined;
  1798. readonly bitrate: number;
  1799. readonly codecSet: string;
  1800. readonly url: string[];
  1801. readonly frameRate: number;
  1802. readonly height: number;
  1803. readonly id: number;
  1804. readonly name: string;
  1805. readonly videoCodec: string | undefined;
  1806. readonly width: number;
  1807. details?: LevelDetails;
  1808. fragmentError: number;
  1809. loadError: number;
  1810. loaded?: {
  1811. bytes: number;
  1812. duration: number;
  1813. };
  1814. realBitrate: number;
  1815. supportedPromise?: Promise<MediaDecodingInfo>;
  1816. supportedResult?: MediaDecodingInfo;
  1817. private _avgBitrate;
  1818. private _audioGroups?;
  1819. private _subtitleGroups?;
  1820. private readonly _urlId;
  1821. constructor(data: LevelParsed | MediaPlaylist);
  1822. get maxBitrate(): number;
  1823. get averageBitrate(): number;
  1824. get attrs(): LevelAttributes;
  1825. get codecs(): string;
  1826. get pathwayId(): string;
  1827. get videoRange(): VideoRange;
  1828. get score(): number;
  1829. get uri(): string;
  1830. hasAudioGroup(groupId: string | undefined): boolean;
  1831. hasSubtitleGroup(groupId: string | undefined): boolean;
  1832. get audioGroups(): (string | undefined)[] | undefined;
  1833. get subtitleGroups(): (string | undefined)[] | undefined;
  1834. addGroupId(type: string, groupId: string | undefined): void;
  1835. get urlId(): number;
  1836. set urlId(value: number);
  1837. get audioGroupIds(): (string | undefined)[] | undefined;
  1838. get textGroupIds(): (string | undefined)[] | undefined;
  1839. get audioGroupId(): string | undefined;
  1840. get textGroupId(): string | undefined;
  1841. addFallback(): void;
  1842. }
  1843. export declare interface LevelAttributes extends AttrList {
  1844. 'ALLOWED-CPC'?: string;
  1845. AUDIO?: string;
  1846. 'AVERAGE-BANDWIDTH'?: string;
  1847. BANDWIDTH?: string;
  1848. 'CLOSED-CAPTIONS'?: string;
  1849. CODECS?: string;
  1850. 'FRAME-RATE'?: string;
  1851. 'HDCP-LEVEL'?: 'TYPE-0' | 'TYPE-1' | 'NONE';
  1852. 'PATHWAY-ID'?: string;
  1853. RESOLUTION?: string;
  1854. SCORE?: string;
  1855. 'STABLE-VARIANT-ID'?: string;
  1856. SUBTITLES?: string;
  1857. 'SUPPLEMENTAL-CODECS'?: string;
  1858. VIDEO?: string;
  1859. 'VIDEO-RANGE'?: VideoRange;
  1860. }
  1861. export declare type LevelControllerConfig = {
  1862. startLevel?: number;
  1863. };
  1864. /**
  1865. * Object representing parsed data from an HLS Media Playlist. Found in {@link hls.js#Level.details}.
  1866. */
  1867. export declare class LevelDetails {
  1868. PTSKnown: boolean;
  1869. alignedSliding: boolean;
  1870. averagetargetduration?: number;
  1871. endCC: number;
  1872. endSN: number;
  1873. fragments: Fragment[];
  1874. fragmentHint?: Fragment;
  1875. partList: Part[] | null;
  1876. dateRanges: Record<string, DateRange>;
  1877. live: boolean;
  1878. ageHeader: number;
  1879. advancedDateTime?: number;
  1880. updated: boolean;
  1881. advanced: boolean;
  1882. availabilityDelay?: number;
  1883. misses: number;
  1884. startCC: number;
  1885. startSN: number;
  1886. startTimeOffset: number | null;
  1887. targetduration: number;
  1888. totalduration: number;
  1889. type: string | null;
  1890. url: string;
  1891. m3u8: string;
  1892. version: number | null;
  1893. canBlockReload: boolean;
  1894. canSkipUntil: number;
  1895. canSkipDateRanges: boolean;
  1896. skippedSegments: number;
  1897. recentlyRemovedDateranges?: string[];
  1898. partHoldBack: number;
  1899. holdBack: number;
  1900. partTarget: number;
  1901. preloadHint?: AttrList;
  1902. renditionReports?: AttrList[];
  1903. tuneInGoal: number;
  1904. deltaUpdateFailed?: boolean;
  1905. driftStartTime: number;
  1906. driftEndTime: number;
  1907. driftStart: number;
  1908. driftEnd: number;
  1909. encryptedFragments: Fragment[];
  1910. playlistParsingError: Error | null;
  1911. variableList: VariableMap | null;
  1912. hasVariableRefs: boolean;
  1913. constructor(baseUrl: string);
  1914. reloaded(previous: LevelDetails | undefined): void;
  1915. get hasProgramDateTime(): boolean;
  1916. get levelTargetDuration(): number;
  1917. get drift(): number;
  1918. get edge(): number;
  1919. get partEnd(): number;
  1920. get fragmentEnd(): number;
  1921. get age(): number;
  1922. get lastPartIndex(): number;
  1923. get lastPartSn(): number;
  1924. }
  1925. export declare class LevelKey implements DecryptData {
  1926. readonly uri: string;
  1927. readonly method: string;
  1928. readonly keyFormat: string;
  1929. readonly keyFormatVersions: number[];
  1930. readonly encrypted: boolean;
  1931. readonly isCommonEncryption: boolean;
  1932. iv: Uint8Array | null;
  1933. key: Uint8Array | null;
  1934. keyId: Uint8Array | null;
  1935. pssh: Uint8Array | null;
  1936. static clearKeyUriToKeyIdMap(): void;
  1937. constructor(method: string, uri: string, format: string, formatversions?: number[], iv?: Uint8Array | null);
  1938. isSupported(): boolean;
  1939. getDecryptData(sn: number | 'initSegment'): LevelKey | null;
  1940. }
  1941. export declare interface LevelLoadedData {
  1942. details: LevelDetails;
  1943. id: number;
  1944. level: number;
  1945. networkDetails: any;
  1946. stats: LoaderStats;
  1947. deliveryDirectives: HlsUrlParameters | null;
  1948. }
  1949. export declare interface LevelLoadingData {
  1950. id: number;
  1951. level: number;
  1952. pathwayId: string | undefined;
  1953. url: string;
  1954. deliveryDirectives: HlsUrlParameters | null;
  1955. }
  1956. export declare interface LevelParsed {
  1957. attrs: LevelAttributes;
  1958. audioCodec?: string;
  1959. bitrate: number;
  1960. details?: LevelDetails;
  1961. height?: number;
  1962. id?: number;
  1963. name: string;
  1964. textCodec?: string;
  1965. unknownCodecs?: string[];
  1966. url: string;
  1967. videoCodec?: string;
  1968. width?: number;
  1969. }
  1970. export declare interface LevelPTSUpdatedData {
  1971. details: LevelDetails;
  1972. level: Level;
  1973. drift: number;
  1974. type: string;
  1975. frag: Fragment;
  1976. start: number;
  1977. end: number;
  1978. }
  1979. export declare interface LevelsUpdatedData {
  1980. levels: Array<Level>;
  1981. }
  1982. export declare interface LevelSwitchedData {
  1983. level: number;
  1984. }
  1985. export declare interface LevelSwitchingData {
  1986. level: number;
  1987. attrs: LevelAttributes;
  1988. details: LevelDetails | undefined;
  1989. bitrate: number;
  1990. averageBitrate: number;
  1991. maxBitrate: number;
  1992. realBitrate: number;
  1993. width: number;
  1994. height: number;
  1995. codecSet: string;
  1996. audioCodec: string | undefined;
  1997. videoCodec: string | undefined;
  1998. audioGroups: (string | undefined)[] | undefined;
  1999. subtitleGroups: (string | undefined)[] | undefined;
  2000. loaded: {
  2001. bytes: number;
  2002. duration: number;
  2003. } | undefined;
  2004. loadError: number;
  2005. fragmentError: number;
  2006. name: string | undefined;
  2007. id: number;
  2008. uri: string;
  2009. url: string[];
  2010. urlId: 0;
  2011. audioGroupIds: (string | undefined)[] | undefined;
  2012. textGroupIds: (string | undefined)[] | undefined;
  2013. }
  2014. export declare interface LevelUpdatedData {
  2015. details: LevelDetails;
  2016. level: number;
  2017. }
  2018. /**
  2019. * @deprecated Use BackBufferData
  2020. */
  2021. export declare interface LiveBackBufferData extends BackBufferData {
  2022. }
  2023. export declare interface Loader<T extends LoaderContext> {
  2024. destroy(): void;
  2025. abort(): void;
  2026. load(context: T, config: LoaderConfiguration, callbacks: LoaderCallbacks<T>): void;
  2027. /**
  2028. * `getCacheAge()` is called by hls.js to get the duration that a given object
  2029. * has been sitting in a cache proxy when playing live. If implemented,
  2030. * this should return a value in seconds.
  2031. *
  2032. * For HTTP based loaders, this should return the contents of the "age" header.
  2033. *
  2034. * @returns time object being lodaded
  2035. */
  2036. getCacheAge?: () => number | null;
  2037. getResponseHeader?: (name: string) => string | null;
  2038. context: T | null;
  2039. stats: LoaderStats;
  2040. }
  2041. export declare interface LoaderCallbacks<T extends LoaderContext> {
  2042. onSuccess: LoaderOnSuccess<T>;
  2043. onError: LoaderOnError<T>;
  2044. onTimeout: LoaderOnTimeout<T>;
  2045. onAbort?: LoaderOnAbort<T>;
  2046. onProgress?: LoaderOnProgress<T>;
  2047. }
  2048. export declare type LoaderConfig = {
  2049. maxTimeToFirstByteMs: number;
  2050. maxLoadTimeMs: number;
  2051. timeoutRetry: RetryConfig | null;
  2052. errorRetry: RetryConfig | null;
  2053. };
  2054. export declare interface LoaderConfiguration {
  2055. loadPolicy: LoaderConfig;
  2056. /**
  2057. * @deprecated use LoaderConfig timeoutRetry and errorRetry maxNumRetry
  2058. */
  2059. maxRetry: number;
  2060. /**
  2061. * @deprecated use LoaderConfig maxTimeToFirstByteMs and maxLoadTimeMs
  2062. */
  2063. timeout: number;
  2064. /**
  2065. * @deprecated use LoaderConfig timeoutRetry and errorRetry retryDelayMs
  2066. */
  2067. retryDelay: number;
  2068. /**
  2069. * @deprecated use LoaderConfig timeoutRetry and errorRetry maxRetryDelayMs
  2070. */
  2071. maxRetryDelay: number;
  2072. highWaterMark?: number;
  2073. }
  2074. export declare interface LoaderContext {
  2075. url: string;
  2076. responseType: string;
  2077. headers?: Record<string, string>;
  2078. rangeStart?: number;
  2079. rangeEnd?: number;
  2080. progressData?: boolean;
  2081. }
  2082. export declare type LoaderOnAbort<T extends LoaderContext> = (stats: LoaderStats, context: T, networkDetails: any) => void;
  2083. export declare type LoaderOnError<T extends LoaderContext> = (error: {
  2084. code: number;
  2085. text: string;
  2086. }, context: T, networkDetails: any, stats: LoaderStats) => void;
  2087. export declare type LoaderOnProgress<T extends LoaderContext> = (stats: LoaderStats, context: T, data: string | ArrayBuffer, networkDetails: any) => void;
  2088. export declare type LoaderOnSuccess<T extends LoaderContext> = (response: LoaderResponse, stats: LoaderStats, context: T, networkDetails: any) => void;
  2089. export declare type LoaderOnTimeout<T extends LoaderContext> = (stats: LoaderStats, context: T, networkDetails: any) => void;
  2090. export declare interface LoaderResponse {
  2091. url: string;
  2092. data?: string | ArrayBuffer | Object;
  2093. code?: number;
  2094. text?: string;
  2095. }
  2096. declare class LoadError extends Error {
  2097. readonly data: FragLoadFailResult;
  2098. constructor(data: FragLoadFailResult);
  2099. }
  2100. export declare interface LoaderStats {
  2101. aborted: boolean;
  2102. loaded: number;
  2103. retry: number;
  2104. total: number;
  2105. chunkCount: number;
  2106. bwEstimate: number;
  2107. loading: HlsProgressivePerformanceTiming;
  2108. parsing: HlsPerformanceTiming;
  2109. buffering: HlsProgressivePerformanceTiming;
  2110. }
  2111. export declare type LoadPolicy = {
  2112. default: LoaderConfig;
  2113. };
  2114. export declare class LoadStats implements LoaderStats {
  2115. aborted: boolean;
  2116. loaded: number;
  2117. retry: number;
  2118. total: number;
  2119. chunkCount: number;
  2120. bwEstimate: number;
  2121. loading: HlsProgressivePerformanceTiming;
  2122. parsing: HlsPerformanceTiming;
  2123. buffering: HlsProgressivePerformanceTiming;
  2124. }
  2125. export declare type MainPlaylistType = AudioPlaylistType | 'VIDEO';
  2126. export declare interface ManifestLoadedData {
  2127. audioTracks: MediaPlaylist[];
  2128. captions?: MediaPlaylist[];
  2129. contentSteering: ContentSteeringOptions | null;
  2130. levels: LevelParsed[];
  2131. networkDetails: any;
  2132. sessionData: Record<string, AttrList> | null;
  2133. sessionKeys: LevelKey[] | null;
  2134. startTimeOffset: number | null;
  2135. stats: LoaderStats;
  2136. subtitles?: MediaPlaylist[];
  2137. url: string;
  2138. variableList: VariableMap | null;
  2139. }
  2140. export declare interface ManifestLoadingData {
  2141. url: string;
  2142. }
  2143. export declare interface ManifestParsedData {
  2144. levels: Level[];
  2145. audioTracks: MediaPlaylist[];
  2146. subtitleTracks: MediaPlaylist[];
  2147. sessionData: Record<string, AttrList> | null;
  2148. sessionKeys: LevelKey[] | null;
  2149. firstLevel: number;
  2150. stats: LoaderStats;
  2151. audio: boolean;
  2152. video: boolean;
  2153. altAudio: boolean;
  2154. }
  2155. declare interface MaxAutoLevelUpdatedData {
  2156. autoLevelCapping: number;
  2157. levels: Level[] | null;
  2158. maxAutoLevel: number;
  2159. minAutoLevel: number;
  2160. maxHdcpLevel: HdcpLevel;
  2161. }
  2162. export declare interface MediaAttachedData {
  2163. media: HTMLMediaElement;
  2164. mediaSource?: MediaSource;
  2165. }
  2166. export declare interface MediaAttachingData {
  2167. media: HTMLMediaElement;
  2168. }
  2169. export declare interface MediaAttributes extends AttrList {
  2170. 'ASSOC-LANGUAGE'?: string;
  2171. AUTOSELECT?: 'YES' | 'NO';
  2172. CHANNELS?: string;
  2173. CHARACTERISTICS?: string;
  2174. DEFAULT?: 'YES' | 'NO';
  2175. FORCED?: 'YES' | 'NO';
  2176. 'GROUP-ID': string;
  2177. 'INSTREAM-ID'?: string;
  2178. LANGUAGE?: string;
  2179. NAME: string;
  2180. 'PATHWAY-ID'?: string;
  2181. 'STABLE-RENDITION-ID'?: string;
  2182. TYPE?: 'AUDIO' | 'VIDEO' | 'SUBTITLES' | 'CLOSED-CAPTIONS';
  2183. URI?: string;
  2184. }
  2185. export declare type MediaDecodingInfo = {
  2186. supported: boolean;
  2187. configurations: readonly MediaDecodingConfiguration[];
  2188. decodingInfoResults: readonly MediaCapabilitiesDecodingInfo[];
  2189. error?: Error;
  2190. };
  2191. export declare type MediaKeyFunc = (keySystem: KeySystems, supportedConfigurations: MediaKeySystemConfiguration[]) => Promise<MediaKeySystemAccess>;
  2192. export declare interface MediaKeySessionContext {
  2193. keySystem: KeySystems;
  2194. mediaKeys: MediaKeys;
  2195. decryptdata: LevelKey;
  2196. mediaKeysSession: MediaKeySession;
  2197. keyStatus: MediaKeyStatus;
  2198. licenseXhr?: XMLHttpRequest;
  2199. _onmessage?: (this: MediaKeySession, ev: MediaKeyMessageEvent) => any;
  2200. _onkeystatuseschange?: (this: MediaKeySession, ev: Event) => any;
  2201. }
  2202. export declare interface MediaPlaylist {
  2203. attrs: MediaAttributes;
  2204. audioCodec?: string;
  2205. autoselect: boolean;
  2206. bitrate: number;
  2207. channels?: string;
  2208. characteristics?: string;
  2209. details?: LevelDetails;
  2210. height?: number;
  2211. default: boolean;
  2212. forced: boolean;
  2213. groupId: string;
  2214. id: number;
  2215. instreamId?: string;
  2216. lang?: string;
  2217. assocLang?: string;
  2218. name: string;
  2219. textCodec?: string;
  2220. unknownCodecs?: string[];
  2221. type: MediaPlaylistType | 'main';
  2222. url: string;
  2223. videoCodec?: string;
  2224. width?: number;
  2225. }
  2226. export declare type MediaPlaylistType = MainPlaylistType | SubtitlePlaylistType;
  2227. export declare type MetadataControllerConfig = {
  2228. enableDateRangeMetadataCues: boolean;
  2229. enableEmsgMetadataCues: boolean;
  2230. enableID3MetadataCues: boolean;
  2231. };
  2232. export declare interface MetadataSample {
  2233. pts: number;
  2234. dts: number;
  2235. duration: number;
  2236. len?: number;
  2237. data: Uint8Array;
  2238. type: MetadataSchema;
  2239. }
  2240. export declare const enum MetadataSchema {
  2241. audioId3 = "org.id3",
  2242. dateRange = "com.apple.quicktime.HLS",
  2243. emsg = "https://aomedia.org/emsg/ID3"
  2244. }
  2245. export declare type MP4RemuxerConfig = {
  2246. stretchShortVideoTrack: boolean;
  2247. maxAudioFramesDrift: number;
  2248. };
  2249. export declare interface NetworkComponentAPI extends ComponentAPI {
  2250. startLoad(startPosition: number): void;
  2251. stopLoad(): void;
  2252. }
  2253. export declare const enum NetworkErrorAction {
  2254. DoNothing = 0,
  2255. SendEndCallback = 1,// Reserved for future use
  2256. SendAlternateToPenaltyBox = 2,
  2257. RemoveAlternatePermanently = 3,// Reserved for future use
  2258. InsertDiscontinuity = 4,// Reserved for future use
  2259. RetryRequest = 5
  2260. }
  2261. export declare interface NonNativeTextTrack {
  2262. _id?: string;
  2263. label: any;
  2264. kind: string;
  2265. default: boolean;
  2266. closedCaptions?: MediaPlaylist;
  2267. subtitleTrack?: MediaPlaylist;
  2268. }
  2269. export declare interface NonNativeTextTracksData {
  2270. tracks: Array<NonNativeTextTrack>;
  2271. }
  2272. declare interface PACData {
  2273. row: number;
  2274. indent: number | null;
  2275. color: string | null;
  2276. underline: boolean;
  2277. italics: boolean;
  2278. }
  2279. /**
  2280. * Object representing parsed data from an HLS Partial Segment. Found in {@link hls.js#LevelDetails.partList}.
  2281. */
  2282. export declare class Part extends BaseSegment {
  2283. readonly fragOffset: number;
  2284. readonly duration: number;
  2285. readonly gap: boolean;
  2286. readonly independent: boolean;
  2287. readonly relurl: string;
  2288. readonly fragment: Fragment;
  2289. readonly index: number;
  2290. stats: LoadStats;
  2291. constructor(partAttrs: AttrList, frag: Fragment, baseurl: string, index: number, previous?: Part);
  2292. get start(): number;
  2293. get end(): number;
  2294. get loaded(): boolean;
  2295. }
  2296. declare interface PartsLoadedData {
  2297. frag: Fragment;
  2298. part: Part | null;
  2299. partsLoaded?: FragLoadedData[];
  2300. }
  2301. export declare type PathwayClone = {
  2302. 'BASE-ID': string;
  2303. ID: string;
  2304. 'URI-REPLACEMENT': UriReplacement;
  2305. };
  2306. declare class PenState {
  2307. foreground: string;
  2308. underline: boolean;
  2309. italics: boolean;
  2310. background: string;
  2311. flash: boolean;
  2312. reset(): void;
  2313. setStyles(styles: Partial<PenStyles>): void;
  2314. isDefault(): boolean;
  2315. equals(other: PenState): boolean;
  2316. copy(newPenState: PenState): void;
  2317. toString(): string;
  2318. }
  2319. declare type PenStyles = {
  2320. foreground: string | null;
  2321. underline: boolean;
  2322. italics: boolean;
  2323. background: string;
  2324. flash: boolean;
  2325. };
  2326. export declare const enum PlaylistContextType {
  2327. MANIFEST = "manifest",
  2328. LEVEL = "level",
  2329. AUDIO_TRACK = "audioTrack",
  2330. SUBTITLE_TRACK = "subtitleTrack"
  2331. }
  2332. export declare const enum PlaylistLevelType {
  2333. MAIN = "main",
  2334. AUDIO = "audio",
  2335. SUBTITLE = "subtitle"
  2336. }
  2337. /**
  2338. * @deprecated use manifestLoadPolicy.default and playlistLoadPolicy.default
  2339. */
  2340. export declare type PlaylistLoaderConfig = {
  2341. manifestLoadingTimeOut: number;
  2342. manifestLoadingMaxRetry: number;
  2343. manifestLoadingRetryDelay: number;
  2344. manifestLoadingMaxRetryTimeout: number;
  2345. levelLoadingTimeOut: number;
  2346. levelLoadingMaxRetry: number;
  2347. levelLoadingRetryDelay: number;
  2348. levelLoadingMaxRetryTimeout: number;
  2349. };
  2350. export declare interface PlaylistLoaderConstructor {
  2351. new (confg: HlsConfig): Loader<PlaylistLoaderContext>;
  2352. }
  2353. export declare interface PlaylistLoaderContext extends LoaderContext {
  2354. type: PlaylistContextType;
  2355. level: number | null;
  2356. id: number | null;
  2357. groupId?: string;
  2358. pathwayId?: string;
  2359. levelDetails?: LevelDetails;
  2360. deliveryDirectives: HlsUrlParameters | null;
  2361. }
  2362. declare type RationalTimestamp = {
  2363. baseTime: number;
  2364. timescale: number;
  2365. };
  2366. declare interface RemuxedMetadata {
  2367. samples: MetadataSample[];
  2368. }
  2369. declare interface RemuxedTrack {
  2370. data1: Uint8Array;
  2371. data2?: Uint8Array;
  2372. startPTS: number;
  2373. endPTS: number;
  2374. startDTS: number;
  2375. endDTS: number;
  2376. type: SourceBufferName;
  2377. hasAudio: boolean;
  2378. hasVideo: boolean;
  2379. independent?: boolean;
  2380. firstKeyFrame?: number;
  2381. firstKeyFramePTS?: number;
  2382. nb: number;
  2383. transferredData1?: ArrayBuffer;
  2384. transferredData2?: ArrayBuffer;
  2385. dropped?: number;
  2386. }
  2387. declare interface RemuxedUserdata {
  2388. samples: UserdataSample[];
  2389. }
  2390. declare interface RemuxerResult {
  2391. audio?: RemuxedTrack;
  2392. video?: RemuxedTrack;
  2393. text?: RemuxedUserdata;
  2394. id3?: RemuxedMetadata;
  2395. initSegment?: InitSegmentData;
  2396. independent?: boolean;
  2397. }
  2398. export declare type RetryConfig = {
  2399. maxNumRetry: number;
  2400. retryDelayMs: number;
  2401. maxRetryDelayMs: number;
  2402. backoff?: 'exponential' | 'linear';
  2403. shouldRetry?: (retryConfig: RetryConfig | null | undefined, retryCount: number, isTimeout: boolean, loaderResponse: LoaderResponse | undefined, retry: boolean) => boolean;
  2404. };
  2405. /**
  2406. * CEA-608 row consisting of NR_COLS instances of StyledUnicodeChar.
  2407. * @constructor
  2408. */
  2409. declare class Row {
  2410. chars: StyledUnicodeChar[];
  2411. pos: number;
  2412. currPenState: PenState;
  2413. cueStartTime: number | null;
  2414. private logger;
  2415. constructor(logger: CaptionsLogger);
  2416. equals(other: Row): boolean;
  2417. copy(other: Row): void;
  2418. isEmpty(): boolean;
  2419. /**
  2420. * Set the cursor to a valid column.
  2421. */
  2422. setCursor(absPos: number): void;
  2423. /**
  2424. * Move the cursor relative to current position.
  2425. */
  2426. moveCursor(relPos: number): void;
  2427. /**
  2428. * Backspace, move one step back and clear character.
  2429. */
  2430. backSpace(): void;
  2431. insertChar(byte: number): void;
  2432. clearFromPos(startPos: number): void;
  2433. clear(): void;
  2434. clearToEndOfRow(): void;
  2435. getTextString(): string;
  2436. setPenStyles(styles: Partial<PenStyles>): void;
  2437. }
  2438. export declare type SelectionPreferences = {
  2439. videoPreference?: VideoSelectionOption;
  2440. audioPreference?: AudioSelectionOption;
  2441. subtitlePreference?: SubtitleSelectionOption;
  2442. };
  2443. export declare type SourceBufferName = 'video' | 'audio' | 'audiovideo';
  2444. declare type SourceBuffers = Partial<Record<SourceBufferName, ExtendedSourceBuffer>>;
  2445. export declare type SteeringManifest = {
  2446. VERSION: 1;
  2447. TTL: number;
  2448. 'RELOAD-URI'?: string;
  2449. 'PATHWAY-PRIORITY': string[];
  2450. 'PATHWAY-CLONES'?: PathwayClone[];
  2451. };
  2452. export declare interface SteeringManifestLoadedData {
  2453. steeringManifest: SteeringManifest;
  2454. url: string;
  2455. }
  2456. declare class StreamController extends BaseStreamController implements NetworkComponentAPI {
  2457. private audioCodecSwap;
  2458. private gapController;
  2459. private level;
  2460. private _forceStartLoad;
  2461. private altAudio;
  2462. private audioOnly;
  2463. private fragPlaying;
  2464. private onvplaying;
  2465. private onvseeked;
  2466. private fragLastKbps;
  2467. private couldBacktrack;
  2468. private backtrackFragment;
  2469. private audioCodecSwitch;
  2470. private videoBuffer;
  2471. constructor(hls: Hls, fragmentTracker: FragmentTracker, keyLoader: KeyLoader);
  2472. private _registerListeners;
  2473. protected _unregisterListeners(): void;
  2474. protected onHandlerDestroying(): void;
  2475. startLoad(startPosition: number): void;
  2476. stopLoad(): void;
  2477. protected doTick(): void;
  2478. protected onTickEnd(): void;
  2479. private doTickIdle;
  2480. protected loadFragment(frag: Fragment, level: Level, targetBufferTime: number): void;
  2481. private getBufferedFrag;
  2482. private followingBufferedFrag;
  2483. immediateLevelSwitch(): void;
  2484. /**
  2485. * try to switch ASAP without breaking video playback:
  2486. * in order to ensure smooth but quick level switching,
  2487. * we need to find the next flushable buffer range
  2488. * we should take into account new segment fetch time
  2489. */
  2490. nextLevelSwitch(): void;
  2491. private abortCurrentFrag;
  2492. protected flushMainBuffer(startOffset: number, endOffset: number): void;
  2493. protected onMediaAttached(event: Events.MEDIA_ATTACHED, data: MediaAttachedData): void;
  2494. protected onMediaDetaching(): void;
  2495. private onMediaPlaying;
  2496. private onMediaSeeked;
  2497. private onManifestLoading;
  2498. private onManifestParsed;
  2499. private onLevelLoading;
  2500. private onLevelLoaded;
  2501. protected _handleFragmentLoadProgress(data: FragLoadedData): void;
  2502. private onAudioTrackSwitching;
  2503. private onAudioTrackSwitched;
  2504. private onBufferCreated;
  2505. private onFragBuffered;
  2506. private onError;
  2507. private checkBuffer;
  2508. private onFragLoadEmergencyAborted;
  2509. private onBufferFlushed;
  2510. private onLevelsUpdated;
  2511. swapAudioCodec(): void;
  2512. /**
  2513. * Seeks to the set startPosition if not equal to the mediaElement's current time.
  2514. */
  2515. protected seekToStartPos(): void;
  2516. private _getAudioCodec;
  2517. private _loadBitrateTestFrag;
  2518. private _handleTransmuxComplete;
  2519. private _bufferInitSegment;
  2520. getMainFwdBufferInfo(): BufferInfo | null;
  2521. private backtrack;
  2522. private checkFragmentChanged;
  2523. get nextLevel(): number;
  2524. get currentFrag(): Fragment | null;
  2525. get currentProgramDateTime(): Date | null;
  2526. get currentLevel(): number;
  2527. get nextBufferedFrag(): Fragment | null;
  2528. get forceStartLoad(): boolean;
  2529. }
  2530. export declare type StreamControllerConfig = {
  2531. autoStartLoad: boolean;
  2532. startPosition: number;
  2533. defaultAudioCodec?: string;
  2534. initialLiveManifestSize: number;
  2535. maxBufferLength: number;
  2536. maxBufferSize: number;
  2537. maxBufferHole: number;
  2538. highBufferWatchdogPeriod: number;
  2539. nudgeOffset: number;
  2540. nudgeMaxRetry: number;
  2541. maxFragLookUpTolerance: number;
  2542. maxMaxBufferLength: number;
  2543. startFragPrefetch: boolean;
  2544. testBandwidth: boolean;
  2545. };
  2546. /**
  2547. * Unicode character with styling and background.
  2548. * @constructor
  2549. */
  2550. declare class StyledUnicodeChar {
  2551. uchar: string;
  2552. penState: PenState;
  2553. reset(): void;
  2554. setChar(uchar: string, newPenState: PenState): void;
  2555. setPenState(newPenState: PenState): void;
  2556. equals(other: StyledUnicodeChar): boolean;
  2557. copy(newChar: StyledUnicodeChar): void;
  2558. isEmpty(): boolean;
  2559. }
  2560. declare interface SubtitleFragProcessed {
  2561. success: boolean;
  2562. frag: Fragment;
  2563. }
  2564. export declare interface SubtitleFragProcessedData {
  2565. success: boolean;
  2566. frag: Fragment;
  2567. error?: Error;
  2568. }
  2569. export declare type SubtitlePlaylistType = 'SUBTITLES' | 'CLOSED-CAPTIONS';
  2570. export declare type SubtitleSelectionOption = {
  2571. lang?: string;
  2572. assocLang?: string;
  2573. characteristics?: string;
  2574. name?: string;
  2575. groupId?: string;
  2576. default?: boolean;
  2577. forced?: boolean;
  2578. };
  2579. export declare class SubtitleStreamController extends BaseStreamController implements NetworkComponentAPI {
  2580. private currentTrackId;
  2581. private tracksBuffered;
  2582. private mainDetails;
  2583. constructor(hls: Hls, fragmentTracker: FragmentTracker, keyLoader: KeyLoader);
  2584. protected onHandlerDestroying(): void;
  2585. private _registerListeners;
  2586. private _unregisterListeners;
  2587. startLoad(startPosition: number): void;
  2588. onManifestLoading(): void;
  2589. onMediaDetaching(): void;
  2590. onLevelLoaded(event: Events.LEVEL_LOADED, data: LevelLoadedData): void;
  2591. onSubtitleFragProcessed(event: Events.SUBTITLE_FRAG_PROCESSED, data: SubtitleFragProcessed): void;
  2592. onBufferFlushing(event: Events.BUFFER_FLUSHING, data: BufferFlushingData): void;
  2593. onFragBuffered(event: Events.FRAG_BUFFERED, data: FragBufferedData): void;
  2594. onError(event: Events.ERROR, data: ErrorData): void;
  2595. onSubtitleTracksUpdated(event: Events.SUBTITLE_TRACKS_UPDATED, { subtitleTracks }: SubtitleTracksUpdatedData): void;
  2596. onSubtitleTrackSwitch(event: Events.SUBTITLE_TRACK_SWITCH, data: TrackSwitchedData): void;
  2597. onSubtitleTrackLoaded(event: Events.SUBTITLE_TRACK_LOADED, data: TrackLoadedData): void;
  2598. _handleFragmentLoadComplete(fragLoadedData: FragLoadedData): void;
  2599. doTick(): void;
  2600. protected getMaxBufferLength(mainBufferLength?: number): number;
  2601. protected loadFragment(frag: Fragment, level: Level, targetBufferTime: number): void;
  2602. get mediaBufferTimeRanges(): Bufferable;
  2603. }
  2604. export declare class SubtitleTrackController extends BasePlaylistController {
  2605. private media;
  2606. private tracks;
  2607. private groupIds;
  2608. private tracksInGroup;
  2609. private trackId;
  2610. private currentTrack;
  2611. private selectDefaultTrack;
  2612. private queuedDefaultTrack;
  2613. private asyncPollTrackChange;
  2614. private useTextTrackPolling;
  2615. private subtitlePollingInterval;
  2616. private _subtitleDisplay;
  2617. constructor(hls: Hls);
  2618. destroy(): void;
  2619. get subtitleDisplay(): boolean;
  2620. set subtitleDisplay(value: boolean);
  2621. private registerListeners;
  2622. private unregisterListeners;
  2623. protected onMediaAttached(event: Events.MEDIA_ATTACHED, data: MediaAttachedData): void;
  2624. private pollTrackChange;
  2625. protected onMediaDetaching(): void;
  2626. protected onManifestLoading(): void;
  2627. protected onManifestParsed(event: Events.MANIFEST_PARSED, data: ManifestParsedData): void;
  2628. protected onSubtitleTrackLoaded(event: Events.SUBTITLE_TRACK_LOADED, data: TrackLoadedData): void;
  2629. protected onLevelLoading(event: Events.LEVEL_LOADING, data: LevelLoadingData): void;
  2630. protected onLevelSwitching(event: Events.LEVEL_SWITCHING, data: LevelSwitchingData): void;
  2631. private switchLevel;
  2632. private findTrackId;
  2633. private findTrackForTextTrack;
  2634. protected onError(event: Events.ERROR, data: ErrorData): void;
  2635. get allSubtitleTracks(): MediaPlaylist[];
  2636. /** get alternate subtitle tracks list from playlist **/
  2637. get subtitleTracks(): MediaPlaylist[];
  2638. /** get/set index of the selected subtitle track (based on index in subtitle track lists) **/
  2639. get subtitleTrack(): number;
  2640. set subtitleTrack(newId: number);
  2641. setSubtitleOption(subtitleOption: MediaPlaylist | SubtitleSelectionOption | undefined): MediaPlaylist | null;
  2642. protected loadPlaylist(hlsUrlParameters?: HlsUrlParameters): void;
  2643. /**
  2644. * Disables the old subtitleTrack and sets current mode on the next subtitleTrack.
  2645. * This operates on the DOM textTracks.
  2646. * A value of -1 will disable all subtitle tracks.
  2647. */
  2648. private toggleTrackModes;
  2649. /**
  2650. * This method is responsible for validating the subtitle index and periodically reloading if live.
  2651. * Dispatches the SUBTITLE_TRACK_SWITCH event, which instructs the subtitle-stream-controller to load the selected track.
  2652. */
  2653. private setSubtitleTrack;
  2654. private onTextTracksChanged;
  2655. }
  2656. export declare interface SubtitleTrackLoadedData extends TrackLoadedData {
  2657. }
  2658. export declare interface SubtitleTracksUpdatedData {
  2659. subtitleTracks: MediaPlaylist[];
  2660. }
  2661. export declare interface SubtitleTrackSwitchData {
  2662. id: number;
  2663. name?: string;
  2664. groupId?: string;
  2665. type?: MediaPlaylistType | 'main';
  2666. url?: string;
  2667. }
  2668. /**
  2669. * @ignore
  2670. * Sub-class specialization of EventHandler base class.
  2671. *
  2672. * TaskLoop allows to schedule a task function being called (optionnaly repeatedly) on the main loop,
  2673. * scheduled asynchroneously, avoiding recursive calls in the same tick.
  2674. *
  2675. * The task itself is implemented in `doTick`. It can be requested and called for single execution
  2676. * using the `tick` method.
  2677. *
  2678. * It will be assured that the task execution method (`tick`) only gets called once per main loop "tick",
  2679. * no matter how often it gets requested for execution. Execution in further ticks will be scheduled accordingly.
  2680. *
  2681. * If further execution requests have already been scheduled on the next tick, it can be checked with `hasNextTick`,
  2682. * and cancelled with `clearNextTick`.
  2683. *
  2684. * The task can be scheduled as an interval repeatedly with a period as parameter (see `setInterval`, `clearInterval`).
  2685. *
  2686. * Sub-classes need to implement the `doTick` method which will effectively have the task execution routine.
  2687. *
  2688. * Further explanations:
  2689. *
  2690. * The baseclass has a `tick` method that will schedule the doTick call. It may be called synchroneously
  2691. * only for a stack-depth of one. On re-entrant calls, sub-sequent calls are scheduled for next main loop ticks.
  2692. *
  2693. * When the task execution (`tick` method) is called in re-entrant way this is detected and
  2694. * we are limiting the task execution per call stack to exactly one, but scheduling/post-poning further
  2695. * task processing on the next main loop iteration (also known as "next tick" in the Node/JS runtime lingo).
  2696. */
  2697. declare class TaskLoop {
  2698. private readonly _boundTick;
  2699. private _tickTimer;
  2700. private _tickInterval;
  2701. private _tickCallCount;
  2702. constructor();
  2703. destroy(): void;
  2704. protected onHandlerDestroying(): void;
  2705. protected onHandlerDestroyed(): void;
  2706. hasInterval(): boolean;
  2707. hasNextTick(): boolean;
  2708. /**
  2709. * @param millis - Interval time (ms)
  2710. * @eturns True when interval has been scheduled, false when already scheduled (no effect)
  2711. */
  2712. setInterval(millis: number): boolean;
  2713. /**
  2714. * @returns True when interval was cleared, false when none was set (no effect)
  2715. */
  2716. clearInterval(): boolean;
  2717. /**
  2718. * @returns True when timeout was cleared, false when none was set (no effect)
  2719. */
  2720. clearNextTick(): boolean;
  2721. /**
  2722. * Will call the subclass doTick implementation in this main loop tick
  2723. * or in the next one (via setTimeout(,0)) in case it has already been called
  2724. * in this tick (in case this is a re-entrant call).
  2725. */
  2726. tick(): void;
  2727. tickImmediate(): void;
  2728. /**
  2729. * For subclass to implement task logic
  2730. * @abstract
  2731. */
  2732. protected doTick(): void;
  2733. }
  2734. export declare class TimelineController implements ComponentAPI {
  2735. private hls;
  2736. private media;
  2737. private config;
  2738. private enabled;
  2739. private Cues;
  2740. private textTracks;
  2741. private tracks;
  2742. private initPTS;
  2743. private unparsedVttFrags;
  2744. private captionsTracks;
  2745. private nonNativeCaptionsTracks;
  2746. private cea608Parser1?;
  2747. private cea608Parser2?;
  2748. private lastCc;
  2749. private lastSn;
  2750. private lastPartIndex;
  2751. private prevCC;
  2752. private vttCCs;
  2753. private captionsProperties;
  2754. constructor(hls: Hls);
  2755. destroy(): void;
  2756. private initCea608Parsers;
  2757. addCues(trackName: string, startTime: number, endTime: number, screen: CaptionScreen, cueRanges: Array<[number, number]>): void;
  2758. private onInitPtsFound;
  2759. private getExistingTrack;
  2760. createCaptionsTrack(trackName: string): void;
  2761. private createNativeTrack;
  2762. private createNonNativeTrack;
  2763. private createTextTrack;
  2764. private onMediaAttaching;
  2765. private onMediaDetaching;
  2766. private onManifestLoading;
  2767. private _cleanTracks;
  2768. private onSubtitleTracksUpdated;
  2769. private onManifestLoaded;
  2770. private closedCaptionsForLevel;
  2771. private onFragLoading;
  2772. private onFragLoaded;
  2773. private _parseIMSC1;
  2774. private _parseVTTs;
  2775. private _fallbackToIMSC1;
  2776. private _appendCues;
  2777. private onFragDecrypted;
  2778. private onSubtitleTracksCleared;
  2779. private onFragParsingUserdata;
  2780. onBufferFlushing(event: Events.BUFFER_FLUSHING, { startOffset, endOffset, endOffsetSubtitles, type }: BufferFlushingData): void;
  2781. private extractCea608Data;
  2782. }
  2783. export declare type TimelineControllerConfig = {
  2784. cueHandler: CuesInterface;
  2785. enableWebVTT: boolean;
  2786. enableIMSC1: boolean;
  2787. enableCEA708Captions: boolean;
  2788. captionsTextTrack1Label: string;
  2789. captionsTextTrack1LanguageCode: string;
  2790. captionsTextTrack2Label: string;
  2791. captionsTextTrack2LanguageCode: string;
  2792. captionsTextTrack3Label: string;
  2793. captionsTextTrack3LanguageCode: string;
  2794. captionsTextTrack4Label: string;
  2795. captionsTextTrack4LanguageCode: string;
  2796. renderTextTracksNatively: boolean;
  2797. };
  2798. export declare interface Track {
  2799. id: 'audio' | 'main';
  2800. buffer?: SourceBuffer;
  2801. container: string;
  2802. codec?: string;
  2803. initSegment?: Uint8Array;
  2804. levelCodec?: string;
  2805. metadata?: any;
  2806. }
  2807. export declare interface TrackLoadedData {
  2808. details: LevelDetails;
  2809. id: number;
  2810. groupId: string;
  2811. networkDetails: any;
  2812. stats: LoaderStats;
  2813. deliveryDirectives: HlsUrlParameters | null;
  2814. }
  2815. export declare interface TrackLoadingData {
  2816. id: number;
  2817. groupId: string;
  2818. url: string;
  2819. deliveryDirectives: HlsUrlParameters | null;
  2820. }
  2821. export declare interface TrackSet {
  2822. audio?: Track;
  2823. video?: Track;
  2824. audiovideo?: Track;
  2825. }
  2826. declare interface TrackSwitchedData {
  2827. id: number;
  2828. }
  2829. declare class TransmuxerInterface {
  2830. error: Error | null;
  2831. private hls;
  2832. private id;
  2833. private observer;
  2834. private frag;
  2835. private part;
  2836. private useWorker;
  2837. private workerContext;
  2838. private onwmsg?;
  2839. private transmuxer;
  2840. private onTransmuxComplete;
  2841. private onFlush;
  2842. constructor(hls: Hls, id: PlaylistLevelType, onTransmuxComplete: (transmuxResult: TransmuxerResult) => void, onFlush: (chunkMeta: ChunkMetadata) => void);
  2843. resetWorker(): void;
  2844. destroy(): void;
  2845. push(data: ArrayBuffer, initSegmentData: Uint8Array | undefined, audioCodec: string | undefined, videoCodec: string | undefined, frag: Fragment, part: Part | null, duration: number, accurateTimeOffset: boolean, chunkMeta: ChunkMetadata, defaultInitPTS?: RationalTimestamp): void;
  2846. flush(chunkMeta: ChunkMetadata): void;
  2847. private transmuxerError;
  2848. private handleFlushResult;
  2849. private onWorkerMessage;
  2850. private configureTransmuxer;
  2851. private handleTransmuxComplete;
  2852. }
  2853. declare interface TransmuxerResult {
  2854. remuxResult: RemuxerResult;
  2855. chunkMeta: ChunkMetadata;
  2856. }
  2857. export declare type TSDemuxerConfig = {
  2858. forceKeyFrameOnDiscontinuity: boolean;
  2859. };
  2860. export declare type UriReplacement = {
  2861. HOST?: string;
  2862. PARAMS?: {
  2863. [queryParameter: string]: string;
  2864. };
  2865. 'PER-VARIANT-URIS'?: {
  2866. [stableVariantId: string]: string;
  2867. };
  2868. 'PER-RENDITION-URIS'?: {
  2869. [stableRenditionId: string]: string;
  2870. };
  2871. };
  2872. export declare interface UserdataSample {
  2873. pts: number;
  2874. bytes?: Uint8Array;
  2875. type?: number;
  2876. payloadType?: number;
  2877. uuid?: string;
  2878. userData?: string;
  2879. userDataBytes?: Uint8Array;
  2880. }
  2881. export declare type VariableMap = Record<string, string>;
  2882. declare const enum VerboseLevel {
  2883. ERROR = 0,
  2884. TEXT = 1,
  2885. WARNING = 2,
  2886. INFO = 2,
  2887. DEBUG = 3,
  2888. DATA = 3
  2889. }
  2890. declare type VideoRange = (typeof VideoRangeValues)[number];
  2891. declare const VideoRangeValues: readonly ["SDR", "PQ", "HLG"];
  2892. export declare type VideoSelectionOption = {
  2893. preferHDR?: boolean;
  2894. allowedVideoRanges?: Array<VideoRange>;
  2895. };
  2896. export { }