hls.js
Version:
JavaScript HLS client using MediaSourceExtension
1,446 lines (1,357 loc) • 137 kB
text/typescript
export declare interface AbrComponentAPI extends ComponentAPI {
firstAutoLevel: number;
forcedAutoLevel: number;
nextAutoLevel: number;
readonly bwEstimator?: EwmaBandWidthEstimator;
resetEstimator(abrEwmaDefaultEstimate: number): any;
}
export declare class AbrController extends Logger implements AbrComponentAPI {
protected hls: Hls;
private lastLevelLoadSec;
private lastLoadedFragLevel;
private firstSelection;
private _nextAutoLevel;
private nextAutoLevelKey;
private audioTracksByGroup;
private codecTiers;
private timer;
private fragCurrent;
private partCurrent;
private bitrateTestDelay;
private rebufferNotice;
private supportedCache;
bwEstimator: EwmaBandWidthEstimator;
constructor(hls: Hls);
resetEstimator(abrEwmaDefaultEstimate?: number): void;
private initEstimator;
protected registerListeners(): void;
protected unregisterListeners(): void;
destroy(): void;
protected onManifestLoading(event: Events.MANIFEST_LOADING, data: ManifestLoadingData): void;
private onLevelsUpdated;
private onMaxAutoLevelUpdated;
protected onFragLoading(event: Events.FRAG_LOADING, data: FragLoadingData): void;
protected onLevelSwitching(event: Events.LEVEL_SWITCHING, data: LevelSwitchingData): void;
protected onError(event: Events.ERROR, data: ErrorData): void;
private getTimeToLoadFrag;
protected onLevelLoaded(event: Events.LEVEL_LOADED, data: LevelLoadedData): void;
private _abandonRulesCheck;
protected onFragLoaded(event: Events.FRAG_LOADED, { frag, part }: FragLoadedData): void;
protected onFragBuffered(event: Events.FRAG_BUFFERED, data: FragBufferedData): void;
private ignoreFragment;
clearTimer(): void;
get firstAutoLevel(): number;
get forcedAutoLevel(): number;
get nextAutoLevel(): number;
private getAutoLevelKey;
private getNextABRAutoLevel;
private getStarvationDelay;
private getBwEstimate;
private findBestLevel;
set nextAutoLevel(nextLevel: number);
protected deriveNextAutoLevel(nextLevel: number): number;
}
export declare type ABRControllerConfig = {
abrEwmaFastLive: number;
abrEwmaSlowLive: number;
abrEwmaFastVoD: number;
abrEwmaSlowVoD: number;
/**
* Default bandwidth estimate in bits/s prior to collecting fragment bandwidth samples
*/
abrEwmaDefaultEstimate: number;
abrEwmaDefaultEstimateMax: number;
abrBandWidthFactor: number;
abrBandWidthUpFactor: number;
abrMaxWithRealBitrate: boolean;
maxStarvationDelay: number;
maxLoadingDelay: number;
};
export declare type AssetListJSON = {
ASSETS: Array<{
URI: string;
DURATION: string;
}>;
};
export declare interface AssetListLoadedData {
event: InterstitialEventWithAssetList;
assetListResponse: AssetListJSON;
networkDetails: any;
}
export declare interface AssetListLoadingData {
event: InterstitialEventWithAssetList;
}
export declare type AttachMediaSourceData = {
media: HTMLMediaElement;
mediaSource: MediaSource | null;
tracks: SourceBufferTrackSet;
};
export declare class AttrList {
[key: string]: any;
constructor(attrs: string | Record<string, any>, parsed?: Pick<ParsedMultivariantPlaylist | LevelDetails, 'variableList' | 'hasVariableRefs' | 'playlistParsingError'>);
get clientAttrs(): string[];
decimalInteger(attrName: string): number;
hexadecimalInteger(attrName: string): Uint8Array<ArrayBuffer> | null;
hexadecimalIntegerAsNumber(attrName: string): number;
decimalFloatingPoint(attrName: string): number;
optionalFloat(attrName: string, defaultValue: number): number;
enumeratedString(attrName: string): string | undefined;
enumeratedStringList<T extends {
[key: string]: boolean;
}>(attrName: string, dict: T): {
[key in keyof T]: boolean;
};
bool(attrName: string): boolean;
decimalResolution(attrName: string): {
width: number;
height: number;
} | undefined;
static parseAttrList(input: string, parsed?: Pick<ParsedMultivariantPlaylist | LevelDetails, 'variableList' | 'hasVariableRefs' | 'playlistParsingError'>): Record<string, string>;
}
export declare type AudioPlaylistType = 'AUDIO';
export declare type AudioSelectionOption = {
lang?: string;
assocLang?: string;
characteristics?: string;
channels?: string;
name?: string;
audioCodec?: string;
groupId?: string;
default?: boolean;
};
export declare class AudioStreamController extends BaseStreamController implements NetworkComponentAPI {
private mainAnchor;
private mainFragLoading;
private audioOnly;
private bufferedTrack;
private switchingTrack;
private trackId;
private waitingData;
private mainDetails;
private flushing;
private bufferFlushed;
private cachedTrackLoadedData;
constructor(hls: Hls, fragmentTracker: FragmentTracker, keyLoader: KeyLoader);
protected onHandlerDestroying(): void;
private resetItem;
protected registerListeners(): void;
protected unregisterListeners(): void;
onInitPtsFound(event: Events.INIT_PTS_FOUND, { frag, id, initPTS, timescale, trackId }: InitPTSFoundData): void;
protected getLoadPosition(): number;
private syncWithAnchor;
startLoad(startPosition: number, skipSeekToStartPosition?: boolean): void;
doTick(): void;
protected resetLoadingState(): void;
protected onTickEnd(): void;
private doTickIdle;
protected onMediaDetaching(event: Events.MEDIA_DETACHING, data: MediaDetachingData): void;
private onAudioTracksUpdated;
private onAudioTrackSwitching;
protected onManifestLoading(): void;
private onLevelLoaded;
private onAudioTrackLoaded;
_handleFragmentLoadProgress(data: FragLoadedData): void;
protected _handleFragmentLoadComplete(fragLoadedData: FragLoadedData): void;
private onBufferReset;
private onBufferCreated;
private onFragLoading;
private onFragBuffered;
protected onError(event: Events.ERROR, data: ErrorData): void;
private onBufferFlushing;
private onBufferFlushed;
private _handleTransmuxComplete;
private _bufferInitSegment;
protected loadFragment(frag: Fragment, track: Level, targetBufferTime: number): void;
private flushAudioIfNeeded;
private completeAudioSwitch;
}
export declare class AudioTrackController extends BasePlaylistController {
private tracks;
private groupIds;
private tracksInGroup;
private trackId;
private currentTrack;
private selectDefaultTrack;
constructor(hls: Hls);
private registerListeners;
private unregisterListeners;
destroy(): void;
protected onManifestLoading(): void;
protected onManifestParsed(event: Events.MANIFEST_PARSED, data: ManifestParsedData): void;
protected onAudioTrackLoaded(event: Events.AUDIO_TRACK_LOADED, data: AudioTrackLoadedData): void;
protected onLevelLoading(event: Events.LEVEL_LOADING, data: LevelLoadingData): void;
protected onLevelSwitching(event: Events.LEVEL_SWITCHING, data: LevelSwitchingData): void;
private switchLevel;
protected onError(event: Events.ERROR, data: ErrorData): void;
get allAudioTracks(): MediaPlaylist[];
get audioTracks(): MediaPlaylist[];
get audioTrack(): number;
set audioTrack(newId: number);
setAudioOption(audioOption: MediaPlaylist | AudioSelectionOption | undefined): MediaPlaylist | null;
private setAudioTrack;
private findTrackId;
protected loadPlaylist(hlsUrlParameters?: HlsUrlParameters): void;
protected loadingPlaylist(audioTrack: MediaPlaylist, hlsUrlParameters: HlsUrlParameters | undefined): void;
}
export declare interface AudioTrackLoadedData extends TrackLoadedData {
}
export declare interface AudioTracksUpdatedData {
audioTracks: MediaPlaylist[];
}
export declare interface AudioTrackSwitchedData extends MediaPlaylist {
}
export declare interface AudioTrackSwitchingData extends MediaPlaylist {
}
export declare interface AudioTrackUpdatedData {
details: LevelDetails;
id: number;
groupId: string;
}
export declare interface BackBufferData {
bufferEnd: number;
}
declare type Base = {
url: string;
};
export declare type BaseData = {
url: string;
};
export declare class BasePlaylistController extends Logger implements NetworkComponentAPI {
protected hls: Hls;
protected canLoad: boolean;
private timer;
constructor(hls: Hls, logPrefix: string);
destroy(): void;
private clearTimer;
startLoad(): void;
stopLoad(): void;
protected switchParams(playlistUri: string, previous: LevelDetails | undefined, current: LevelDetails | undefined): HlsUrlParameters | undefined;
protected loadPlaylist(hlsUrlParameters?: HlsUrlParameters): void;
protected loadingPlaylist(playlist: Level | MediaPlaylist, hlsUrlParameters?: HlsUrlParameters): void;
protected shouldLoadPlaylist(playlist: Level | MediaPlaylist | null | undefined): playlist is Level | MediaPlaylist;
protected getUrlWithDirectives(uri: string, hlsUrlParameters: HlsUrlParameters | undefined): string;
protected playlistLoaded(index: number, data: LevelLoadedData | AudioTrackLoadedData | TrackLoadedData, previousDetails?: LevelDetails): void;
protected scheduleLoading(levelOrTrack: Level | MediaPlaylist, deliveryDirectives?: HlsUrlParameters, updatedDetails?: LevelDetails): void;
private getDeliveryDirectives;
protected checkRetry(errorEvent: ErrorData): boolean;
}
export declare class BaseSegment {
private _byteRange;
private _url;
private _stats;
private _streams;
readonly base: Base;
relurl?: string;
constructor(base: Base | string);
setByteRange(value: string, previous?: BaseSegment): void;
get baseurl(): string;
get byteRange(): [number, number] | [];
get byteRangeStartOffset(): number | undefined;
get byteRangeEndOffset(): number | undefined;
get elementaryStreams(): ElementaryStreams;
set elementaryStreams(value: ElementaryStreams);
get hasStats(): boolean;
get hasStreams(): boolean;
get stats(): LoadStats;
set stats(value: LoadStats);
get url(): string;
set url(value: string);
clearElementaryStreamInfo(): void;
}
export declare class BaseStreamController extends TaskLoop implements NetworkComponentAPI {
protected hls: Hls;
protected fragPrevious: MediaFragment | null;
protected fragCurrent: Fragment | null;
protected fragmentTracker: FragmentTracker;
protected transmuxer: TransmuxerInterface | null;
protected _state: (typeof State)[keyof typeof State];
protected playlistType: PlaylistLevelType;
protected media: HTMLMediaElement | null;
protected mediaBuffer: Bufferable | null;
protected config: HlsConfig;
protected bitrateTest: boolean;
protected lastCurrentTime: number;
protected nextLoadPosition: number;
protected startPosition: number;
protected startTimeOffset: number | null;
protected retryDate: number;
protected levels: Array<Level> | null;
protected fragmentLoader: FragmentLoader;
protected keyLoader: KeyLoader;
protected levelLastLoaded: Level | null;
protected startFragRequested: boolean;
protected decrypter: Decrypter;
protected initPTS: TimestampOffset[];
protected buffering: boolean;
protected loadingParts: boolean;
private loopSn?;
constructor(hls: Hls, fragmentTracker: FragmentTracker, keyLoader: KeyLoader, logPrefix: string, playlistType: PlaylistLevelType);
protected registerListeners(): void;
protected unregisterListeners(): void;
protected doTick(): void;
protected onTickEnd(): void;
startLoad(startPosition: number): void;
stopLoad(): void;
get startPositionValue(): number;
get bufferingEnabled(): boolean;
pauseBuffering(): void;
resumeBuffering(): void;
get inFlightFrag(): InFlightData;
protected _streamEnded(bufferInfo: BufferInfo, levelDetails: LevelDetails): boolean;
getLevelDetails(): LevelDetails | undefined;
protected get timelineOffset(): number;
protected onMediaAttached(event: Events.MEDIA_ATTACHED, data: MediaAttachedData): void;
protected onMediaDetaching(event: Events.MEDIA_DETACHING, data: MediaDetachingData): void;
protected onManifestLoading(): void;
protected onError(event: Events.ERROR, data: ErrorData): void;
protected onMediaSeeking: () => void;
protected onMediaEnded: () => void;
protected onManifestLoaded(event: Events.MANIFEST_LOADED, data: ManifestLoadedData): void;
protected onHandlerDestroying(): void;
protected onHandlerDestroyed(): void;
protected loadFragment(frag: MediaFragment, level: Level, targetBufferTime: number): void;
private _loadFragForPlayback;
protected clearTrackerIfNeeded(frag: Fragment): void;
protected checkLiveUpdate(details: LevelDetails): void;
protected waitForLive(levelInfo: Level): boolean | undefined;
protected flushMainBuffer(startOffset: number, endOffset: number, type?: SourceBufferName | null): void;
protected _loadInitSegment(fragment: Fragment, level: Level): void;
private completeInitSegmentLoad;
protected unhandledEncryptionError(initSegment: InitSegmentData, frag: Fragment): boolean;
protected fragContextChanged(frag: Fragment | null): boolean;
protected fragBufferedComplete(frag: Fragment, part: Part | null): void;
protected _handleFragmentLoadComplete(fragLoadedEndData: PartsLoadedData): void;
protected _handleFragmentLoadProgress(frag: PartsLoadedData | FragLoadedData): void;
protected _doFragLoad(frag: Fragment, level: Level, targetBufferTime?: number | null, progressCallback?: FragmentLoadProgressCallback): Promise<PartsLoadedData | FragLoadedData | null>;
private doFragPartsLoad;
private handleFragLoadError;
protected _handleTransmuxerFlush(chunkMeta: ChunkMetadata): void;
private shouldLoadParts;
protected getCurrentContext(chunkMeta: ChunkMetadata): {
frag: MediaFragment;
part: Part | null;
level: Level;
} | null;
protected bufferFragmentData(data: RemuxedTrack, frag: Fragment, part: Part | null, chunkMeta: ChunkMetadata, noBacktracking?: boolean): void;
protected flushBufferGap(frag: Fragment): void;
protected getFwdBufferInfo(bufferable: Bufferable | null, type: PlaylistLevelType): BufferInfo | null;
protected getFwdBufferInfoAtPos(bufferable: Bufferable | null, pos: number, type: PlaylistLevelType, maxBufferHole: number): BufferInfo | null;
protected getMaxBufferLength(levelBitrate?: number): number;
protected exceedsMaxBuffer(bufferInfo: BufferInfo, maxBufLen: number, selected: Fragment): boolean;
protected reduceMaxBufferLength(threshold: number, fragDuration: number): boolean;
protected getAppendedFrag(position: number, playlistType?: PlaylistLevelType): Fragment | null;
protected getNextFragment(pos: number, levelDetails: LevelDetails): Fragment | null;
protected isLoopLoading(frag: Fragment, targetBufferTime: number): boolean;
protected getNextFragmentLoopLoading(frag: Fragment, levelDetails: LevelDetails, bufferInfo: BufferInfo, playlistType: PlaylistLevelType, maxBufLen: number): Fragment | null;
protected get primaryPrefetch(): boolean;
protected filterReplacedPrimary(frag: MediaFragment | null, details: LevelDetails | undefined): MediaFragment | null;
mapToInitFragWhenRequired(frag: Fragment | null): typeof frag;
getNextPart(partList: Part[], frag: Fragment, targetBufferTime: number): number;
private loadedEndOfParts;
protected getInitialLiveFragment(levelDetails: LevelDetails): MediaFragment | null;
protected getFragmentAtPosition(bufferEnd: number, end: number, levelDetails: LevelDetails): MediaFragment | null;
protected alignPlaylists(details: LevelDetails, previousDetails: LevelDetails | undefined, switchDetails: LevelDetails | undefined): number;
protected waitForCdnTuneIn(details: LevelDetails): boolean | 0;
protected setStartPosition(details: LevelDetails, sliding: number): void;
protected getLoadPosition(): number;
private handleFragLoadAborted;
protected resetFragmentLoading(frag: Fragment): void;
protected onFragmentOrKeyLoadError(filterType: PlaylistLevelType, data: ErrorData): void;
protected checkRetryDate(): void;
protected reduceLengthAndFlushBuffer(data: ErrorData): boolean;
protected resetFragmentErrors(filterType: PlaylistLevelType): void;
protected afterBufferFlushed(media: Bufferable, bufferType: SourceBufferName, playlistType: PlaylistLevelType): void;
protected resetLoadingState(): void;
private resetStartWhenNotLoaded;
protected resetWhenMissingContext(chunkMeta: ChunkMetadata | Fragment): void;
protected removeUnbufferedFrags(start?: number): void;
private updateLevelTiming;
private playlistLabel;
private fragInfo;
private treatAsGap;
protected resetTransmuxer(): void;
protected recoverWorkerError(data: ErrorData): void;
set state(nextState: (typeof State)[keyof typeof State]);
get state(): (typeof State)[keyof typeof State];
}
export declare interface BaseTrack {
id: 'audio' | 'main';
container: string;
codec?: string;
supplemental?: string;
encrypted?: boolean;
levelCodec?: string;
pendingCodec?: string;
metadata?: {
channelCount?: number;
width?: number;
height?: number;
};
}
export declare type BaseTrackSet = Partial<Record<SourceBufferName, BaseTrack>>;
export declare type Bufferable = {
buffered: TimeRanges;
};
export declare interface BufferAppendedData {
type: SourceBufferName;
frag: Fragment;
part: Part | null;
chunkMeta: ChunkMetadata;
parent: PlaylistLevelType;
timeRanges: Partial<Record<SourceBufferName, TimeRanges>>;
}
export declare interface BufferAppendingData {
type: SourceBufferName;
frag: Fragment;
part: Part | null;
chunkMeta: ChunkMetadata;
offset?: number | undefined;
parent: PlaylistLevelType;
data: Uint8Array<ArrayBuffer>;
}
export declare interface BufferCodecsData {
video?: ParsedTrack;
audio?: ParsedTrack;
audiovideo?: ParsedTrack;
tracks?: BaseTrackSet;
}
export declare class BufferController extends Logger implements ComponentAPI {
private hls;
private fragmentTracker;
private details;
private _objectUrl;
private operationQueue;
private bufferCodecEventsTotal;
private media;
private mediaSource;
private lastMpegAudioChunk;
private blockedAudioAppend;
private lastVideoAppendEnd;
private appendSource;
private transferData?;
private overrides?;
private appendErrors;
private tracks;
private sourceBuffers;
constructor(hls: Hls, fragmentTracker: FragmentTracker);
hasSourceTypes(): boolean;
destroy(): void;
private registerListeners;
private unregisterListeners;
transferMedia(): AttachMediaSourceData | null;
private initTracks;
private onManifestLoading;
private onManifestParsed;
private onMediaAttaching;
private assignMediaSource;
private attachTransferred;
private get mediaSourceOpenOrEnded();
private _onEndStreaming;
private _onStartStreaming;
private onMediaDetaching;
private onBufferReset;
private resetBuffer;
private removeBuffer;
private resetQueue;
private onBufferCodecs;
get sourceBufferTracks(): BaseTrackSet;
private appendChangeType;
private blockAudio;
private unblockAudio;
private onBufferAppending;
private getFlushOp;
private onBufferFlushing;
private onFragParsed;
private onFragChanged;
get bufferedToEnd(): boolean;
private onBufferEos;
private tracksEnded;
private onLevelUpdated;
private updateDuration;
private onError;
private resetAppendErrors;
private trimBuffers;
private flushBackBuffer;
private flushFrontBuffer;
/**
* Update Media Source duration to current level duration or override to Infinity if configuration parameter
* 'liveDurationInfinity` is set to `true`
* More details: https://github.com/video-dev/hls.js/issues/355
*/
private getDurationAndRange;
private updateMediaSource;
private get tracksReady();
private checkPendingTracks;
private bufferCreated;
private createSourceBuffers;
private getTrackCodec;
private trackSourceBuffer;
private _onMediaSourceOpen;
private _onMediaSourceClose;
private _onMediaSourceEnded;
private _onMediaEmptied;
private get mediaSrc();
private onSBUpdateStart;
private onSBUpdateEnd;
private onSBUpdateError;
private updateTimestampOffset;
private removeExecutor;
private appendExecutor;
private blockUntilOpen;
private isUpdating;
private isQueued;
private isPending;
private blockBuffers;
private stepOperationQueue;
private append;
private appendBlocker;
private currentOp;
private executeNext;
private shiftAndExecuteNext;
private get pendingTrackCount();
private get sourceBufferCount();
private get sourceBufferTypes();
private addBufferListener;
private removeBufferListeners;
}
export declare type BufferControllerConfig = {
appendErrorMaxRetry: number;
backBufferLength: number;
frontBufferFlushThreshold: number;
liveDurationInfinity: boolean;
/**
* @deprecated use backBufferLength
*/
liveBackBufferLength: number | null;
};
export declare interface BufferCreatedData {
tracks: BufferCreatedTrackSet;
}
export declare interface BufferCreatedTrack extends BaseTrack {
buffer: ExtendedSourceBuffer;
}
export declare type BufferCreatedTrackSet = Partial<Record<SourceBufferName, BufferCreatedTrack>>;
export declare interface BufferEOSData {
type?: SourceBufferName;
}
export declare interface BufferFlushedData {
type: SourceBufferName;
}
export declare interface BufferFlushingData {
startOffset: number;
endOffset: number;
endOffsetSubtitles?: number;
type: SourceBufferName | null;
}
export declare type BufferInfo = {
len: number;
start: number;
end: number;
nextStart?: number;
buffered?: BufferTimeRange[];
bufferedIndex: number;
};
/**
* Provides methods dealing with buffer length retrieval for example.
*
* In general, a helper around HTML5 MediaElement TimeRanges gathered from `buffered` property.
*
* Also @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/buffered
*/
export declare type BufferTimeRange = {
start: number;
end: number;
};
export declare class CapLevelController implements ComponentAPI {
private hls;
private autoLevelCapping;
private firstLevel;
private media;
private restrictedLevels;
private timer;
private clientRect;
private streamController?;
constructor(hls: Hls);
setStreamController(streamController: StreamController): void;
destroy(): void;
protected registerListeners(): void;
protected unregisterListener(): void;
protected onFpsDropLevelCapping(event: Events.FPS_DROP_LEVEL_CAPPING, data: FPSDropLevelCappingData): void;
protected onMediaAttaching(event: Events.MEDIA_ATTACHING, data: MediaAttachingData): void;
protected onManifestParsed(event: Events.MANIFEST_PARSED, data: ManifestParsedData): void;
private onLevelsUpdated;
protected onBufferCodecs(event: Events.BUFFER_CODECS, data: BufferCodecsData): void;
protected onMediaDetaching(): void;
detectPlayerSize(): void;
getMaxLevel(capLevelIndex: number): number;
startCapping(): void;
stopCapping(): void;
getDimensions(): {
width: number;
height: number;
};
get mediaWidth(): number;
get mediaHeight(): number;
get contentScaleFactor(): number;
private isLevelAllowed;
static getMaxLevelByMediaSize(levels: Array<Level>, width: number, height: number): number;
}
export declare type CapLevelControllerConfig = {
capLevelToPlayerSize: boolean;
};
/**
* Keep a CEA-608 screen of 32x15 styled characters
* @constructor
*/
export declare class CaptionScreen {
rows: Row[];
currRow: number;
nrRollUpRows: number | null;
lastOutputScreen: CaptionScreen | null;
logger: CaptionsLogger;
constructor(logger: CaptionsLogger);
reset(): void;
equals(other: CaptionScreen): boolean;
copy(other: CaptionScreen): void;
isEmpty(): boolean;
backSpace(): void;
clearToEndOfRow(): void;
/**
* Insert a character (without styling) in the current row.
*/
insertChar(char: number): void;
setPen(styles: Partial<PenStyles>): void;
moveCursor(relPos: number): void;
setCursor(absPos: number): void;
setPAC(pacData: PACData): void;
/**
* Set background/extra foreground, but first do back_space, and then insert space (backwards compatibility).
*/
setBkgData(bkgData: Partial<PenStyles>): void;
setRollUpRows(nrRows: number | null): void;
rollUp(): void;
/**
* Get all non-empty rows with as unicode text.
*/
getDisplayText(asOneRow?: boolean): string;
getTextAndFormat(): Row[];
}
declare class CaptionsLogger {
time: number | null;
verboseLevel: VerboseLevel;
log(severity: VerboseLevel, msg: string | (() => string)): void;
}
export declare class ChunkMetadata {
readonly level: number;
readonly sn: number;
readonly part: number;
readonly id: number;
readonly size: number;
readonly partial: boolean;
readonly transmuxing: HlsChunkPerformanceTiming;
readonly buffering: {
[key in SourceBufferName]: HlsChunkPerformanceTiming;
};
constructor(level: number, sn: number, id: number, size?: number, part?: number, partial?: boolean);
}
/**
* Controller to deal with Common Media Client Data (CMCD)
* @see https://cdn.cta.tech/cta/media/media/resources/standards/pdfs/cta-5004-final.pdf
*/
export declare class CMCDController implements ComponentAPI {
private hls;
private config;
private media?;
private sid?;
private cid?;
private useHeaders;
private includeKeys?;
private initialized;
private starved;
private buffering;
private audioBuffer?;
private videoBuffer?;
constructor(hls: Hls);
private registerListeners;
private unregisterListeners;
destroy(): void;
private onMediaAttached;
private onMediaDetached;
private onBufferCreated;
private onWaiting;
private onPlaying;
/**
* Create baseline CMCD data
*/
private createData;
/**
* Apply CMCD data to a request.
*/
private apply;
/**
* Apply CMCD data to a manifest request.
*/
private applyPlaylistData;
/**
* Apply CMCD data to a segment request
*/
private applyFragmentData;
private getNextFrag;
private getNextPart;
/**
* The CMCD object type.
*/
private getObjectType;
/**
* Get the highest bitrate.
*/
private getTopBandwidth;
/**
* Get the buffer length for a media type in milliseconds
*/
private getBufferLength;
/**
* Create a playlist loader
*/
private createPlaylistLoader;
/**
* Create a playlist loader
*/
private createFragmentLoader;
}
export declare type CMCDControllerConfig = {
sessionId?: string;
contentId?: string;
useHeaders?: boolean;
includeKeys?: string[];
};
export declare interface CodecsParsed {
audioCodec?: string;
videoCodec?: string;
textCodec?: string;
unknownCodecs?: string[];
}
export declare interface ComponentAPI {
destroy(): void;
}
export declare class ContentSteeringController extends Logger implements NetworkComponentAPI {
private readonly hls;
private loader;
private uri;
private pathwayId;
private _pathwayPriority;
private timeToLoad;
private reloadTimer;
private updated;
private started;
private enabled;
private levels;
private audioTracks;
private subtitleTracks;
private penalizedPathways;
constructor(hls: Hls);
private registerListeners;
private unregisterListeners;
pathways(): string[];
get pathwayPriority(): string[] | null;
set pathwayPriority(pathwayPriority: string[]);
startLoad(): void;
stopLoad(): void;
clearTimeout(): void;
destroy(): void;
removeLevel(levelToRemove: Level): void;
private onManifestLoading;
private onManifestLoaded;
private onManifestParsed;
private onError;
filterParsedLevels(levels: Level[]): Level[];
private getLevelsForPathway;
private updatePathwayPriority;
private getPathwayForGroupId;
private clonePathways;
private loadSteeringManifest;
private scheduleRefresh;
}
export declare type ContentSteeringOptions = {
uri: string;
pathwayId: string;
};
export declare const Cues: CuesInterface;
export declare interface CuesInterface {
newCue(track: TextTrack | null, startTime: number, endTime: number, captionScreen: CaptionScreen): VTTCue[];
}
export declare interface CuesParsedData {
type: 'captions' | 'subtitles';
cues: any;
track: string;
}
export declare class DateRange {
attr: AttrList;
tagAnchor: MediaFragmentRef | null;
tagOrder: number;
private _startDate;
private _endDate?;
private _dateAtEnd?;
private _cue?;
private _badValueForSameId?;
constructor(dateRangeAttr: AttrList, dateRangeWithSameId?: DateRange | undefined, tagCount?: number);
get id(): string;
get class(): string;
get cue(): DateRangeCue;
get startTime(): number;
get startDate(): Date;
get endDate(): Date | null;
get duration(): number | null;
get plannedDuration(): number | null;
get endOnNext(): boolean;
get isInterstitial(): boolean;
get isValid(): boolean;
}
export declare type DateRangeCue = {
pre: boolean;
post: boolean;
once: boolean;
};
export declare interface DecryptData {
uri: string;
method: string;
keyFormat: string;
keyFormatVersions: number[];
iv: Uint8Array<ArrayBuffer> | null;
key: Uint8Array<ArrayBuffer> | null;
keyId: Uint8Array<ArrayBuffer> | null;
pssh: Uint8Array<ArrayBuffer> | null;
encrypted: boolean;
isCommonEncryption: boolean;
}
export declare class Decrypter {
private logEnabled;
private removePKCS7Padding;
private subtle;
private softwareDecrypter;
private key;
private fastAesKey;
private remainderData;
private currentIV;
private currentResult;
private useSoftware;
private enableSoftwareAES;
constructor(config: HlsConfig, { removePKCS7Padding }?: {
removePKCS7Padding?: boolean | undefined;
});
destroy(): void;
isSync(): boolean;
flush(): Uint8Array<ArrayBuffer> | null;
reset(): void;
decrypt(data: Uint8Array | ArrayBuffer, key: ArrayBuffer, iv: ArrayBuffer, aesMode: DecrypterAesMode): Promise<ArrayBuffer>;
softwareDecrypt(data: Uint8Array, key: ArrayBuffer, iv: ArrayBuffer, aesMode: DecrypterAesMode): ArrayBuffer | null;
webCryptoDecrypt(data: Uint8Array<ArrayBuffer>, key: ArrayBuffer, iv: ArrayBuffer, aesMode: DecrypterAesMode): Promise<ArrayBuffer>;
private onWebCryptoError;
private getValidChunk;
private logOnce;
}
export declare const enum DecrypterAesMode {
cbc = 0,
ctr = 1
}
export declare type DRMSystemConfiguration = {
licenseUrl: string;
serverCertificateUrl?: string;
generateRequest?: (this: Hls, initDataType: string, initData: ArrayBuffer | null, keyContext: MediaKeySessionContext) => {
initDataType: string;
initData: ArrayBuffer | null;
} | undefined | never;
};
export declare type DRMSystemOptions = {
audioRobustness?: string;
videoRobustness?: string;
audioEncryptionScheme?: string | null;
videoEncryptionScheme?: string | null;
persistentState?: MediaKeysRequirement;
distinctiveIdentifier?: MediaKeysRequirement;
sessionTypes?: string[];
sessionType?: string;
};
export declare type DRMSystemsConfiguration = Partial<Record<KeySystems, DRMSystemConfiguration>>;
export declare interface ElementaryStreamInfo {
startPTS: number;
endPTS: number;
startDTS: number;
endDTS: number;
partial?: boolean;
}
export declare type ElementaryStreams = Record<ElementaryStreamTypes, ElementaryStreamInfo | null>;
export declare const enum ElementaryStreamTypes {
AUDIO = "audio",
VIDEO = "video",
AUDIOVIDEO = "audiovideo"
}
/**
* Controller to deal with encrypted media extensions (EME)
* @see https://developer.mozilla.org/en-US/docs/Web/API/Encrypted_Media_Extensions_API
*
* @class
* @constructor
*/
export declare class EMEController extends Logger implements ComponentAPI {
static CDMCleanupPromise: Promise<void> | void;
private readonly hls;
private readonly config;
private media;
private mediaResolved?;
private keyFormatPromise;
private keySystemAccessPromises;
private _requestLicenseFailureCount;
private mediaKeySessions;
private keyIdToKeySessionPromise;
private mediaKeys;
private setMediaKeysQueue;
private bannedKeyIds;
constructor(hls: Hls);
destroy(): void;
private registerListeners;
private unregisterListeners;
private getLicenseServerUrl;
private getLicenseServerUrlOrThrow;
private getServerCertificateUrl;
private attemptKeySystemAccess;
private requestMediaKeySystemAccess;
private getMediaKeysPromise;
private createMediaKeySessionContext;
private renewKeySession;
private updateKeySession;
getSelectedKeySystemFormats(): KeySystemFormats[];
getKeySystemAccess(keySystemsToAttempt: KeySystems[]): Promise<void>;
selectKeySystem(keySystemsToAttempt: KeySystems[]): Promise<KeySystemFormats>;
selectKeySystemFormat(frag: Fragment): Promise<KeySystemFormats>;
private getKeyFormatPromise;
getKeyStatus(decryptdata: LevelKey): MediaKeyStatus | undefined;
loadKey(data: KeyLoadedData): Promise<MediaKeySessionContext>;
private throwIfDestroyed;
private handleError;
private getKeySystemForKeyPromise;
private getKeySystemSelectionPromise;
private onMediaEncrypted;
private onWaitingForKey;
private attemptSetMediaKeys;
private generateRequestWithPreferredKeySession;
private getKeyStatuses;
private fetchServerCertificate;
private setMediaKeysServerCertificate;
private renewLicense;
private unpackPlayReadyKeyMessage;
private setupLicenseXHR;
private requestLicense;
private onDestroying;
private onMediaAttached;
private onMediaDetached;
private _clear;
private onManifestLoading;
private onManifestLoaded;
private removeSession;
}
export declare type EMEControllerConfig = {
licenseXhrSetup?: (this: Hls, xhr: XMLHttpRequest, url: string, keyContext: MediaKeySessionContext, licenseChallenge: Uint8Array) => void | Uint8Array | Promise<Uint8Array | void>;
licenseResponseCallback?: (this: Hls, xhr: XMLHttpRequest, url: string, keyContext: MediaKeySessionContext) => ArrayBuffer;
emeEnabled: boolean;
widevineLicenseUrl?: string;
drmSystems: DRMSystemsConfiguration | undefined;
drmSystemOptions: DRMSystemOptions | undefined;
requestMediaKeySystemAccessFunc: MediaKeyFunc | null;
requireKeySystemAccessOnStart: boolean;
};
export declare const enum ErrorActionFlags {
None = 0,
MoveAllAlternatesMatchingHost = 1,
MoveAllAlternatesMatchingHDCP = 2,
MoveAllAlternatesMatchingKey = 4,
SwitchToSDR = 8
}
export declare class ErrorController extends Logger implements NetworkComponentAPI {
private readonly hls;
private playlistError;
constructor(hls: Hls);
private registerListeners;
private unregisterListeners;
destroy(): void;
startLoad(startPosition: number): void;
stopLoad(): void;
private getVariantLevelIndex;
private getVariantIndex;
private variantHasKey;
private onManifestLoading;
private onLevelUpdated;
private onError;
private getPlaylistRetryOrSwitchAction;
private getFragRetryOrSwitchAction;
private getLevelSwitchAction;
onErrorOut(event: Events.ERROR, data: ErrorData): void;
private sendAlternateToPenaltyBox;
private switchLevel;
}
export declare interface ErrorData {
type: ErrorTypes;
details: ErrorDetails;
error: Error;
fatal: boolean;
errorAction?: IErrorAction;
buffer?: number;
bufferInfo?: BufferInfo;
bytes?: number;
chunkMeta?: ChunkMetadata;
context?: PlaylistLoaderContext;
decryptdata?: LevelKey;
event?: keyof HlsListeners | 'demuxerWorker';
frag?: Fragment;
part?: Part | null;
level?: number | undefined;
levelRetry?: boolean;
loader?: Loader<LoaderContext>;
networkDetails?: any;
stalled?: {
start: number;
};
stats?: LoaderStats;
mimeType?: string;
reason?: string;
response?: LoaderResponse;
url?: string;
parent?: PlaylistLevelType;
sourceBufferName?: SourceBufferName;
interstitial?: InterstitialEvent;
/**
* @deprecated Use ErrorData.error
*/
err?: {
message: string;
};
}
export declare enum ErrorDetails {
KEY_SYSTEM_NO_KEYS = "keySystemNoKeys",
KEY_SYSTEM_NO_ACCESS = "keySystemNoAccess",
KEY_SYSTEM_NO_SESSION = "keySystemNoSession",
KEY_SYSTEM_NO_CONFIGURED_LICENSE = "keySystemNoConfiguredLicense",
KEY_SYSTEM_LICENSE_REQUEST_FAILED = "keySystemLicenseRequestFailed",
KEY_SYSTEM_SERVER_CERTIFICATE_REQUEST_FAILED = "keySystemServerCertificateRequestFailed",
KEY_SYSTEM_SERVER_CERTIFICATE_UPDATE_FAILED = "keySystemServerCertificateUpdateFailed",
KEY_SYSTEM_SESSION_UPDATE_FAILED = "keySystemSessionUpdateFailed",
KEY_SYSTEM_STATUS_OUTPUT_RESTRICTED = "keySystemStatusOutputRestricted",
KEY_SYSTEM_STATUS_INTERNAL_ERROR = "keySystemStatusInternalError",
KEY_SYSTEM_DESTROY_MEDIA_KEYS_ERROR = "keySystemDestroyMediaKeysError",
KEY_SYSTEM_DESTROY_CLOSE_SESSION_ERROR = "keySystemDestroyCloseSessionError",
KEY_SYSTEM_DESTROY_REMOVE_SESSION_ERROR = "keySystemDestroyRemoveSessionError",
MANIFEST_LOAD_ERROR = "manifestLoadError",
MANIFEST_LOAD_TIMEOUT = "manifestLoadTimeOut",
MANIFEST_PARSING_ERROR = "manifestParsingError",
MANIFEST_INCOMPATIBLE_CODECS_ERROR = "manifestIncompatibleCodecsError",
LEVEL_EMPTY_ERROR = "levelEmptyError",
LEVEL_LOAD_ERROR = "levelLoadError",
LEVEL_LOAD_TIMEOUT = "levelLoadTimeOut",
LEVEL_PARSING_ERROR = "levelParsingError",
LEVEL_SWITCH_ERROR = "levelSwitchError",
AUDIO_TRACK_LOAD_ERROR = "audioTrackLoadError",
AUDIO_TRACK_LOAD_TIMEOUT = "audioTrackLoadTimeOut",
SUBTITLE_LOAD_ERROR = "subtitleTrackLoadError",
SUBTITLE_TRACK_LOAD_TIMEOUT = "subtitleTrackLoadTimeOut",
FRAG_LOAD_ERROR = "fragLoadError",
FRAG_LOAD_TIMEOUT = "fragLoadTimeOut",
FRAG_DECRYPT_ERROR = "fragDecryptError",
FRAG_PARSING_ERROR = "fragParsingError",
FRAG_GAP = "fragGap",
REMUX_ALLOC_ERROR = "remuxAllocError",
KEY_LOAD_ERROR = "keyLoadError",
KEY_LOAD_TIMEOUT = "keyLoadTimeOut",
BUFFER_ADD_CODEC_ERROR = "bufferAddCodecError",
BUFFER_INCOMPATIBLE_CODECS_ERROR = "bufferIncompatibleCodecsError",
BUFFER_APPEND_ERROR = "bufferAppendError",
BUFFER_APPENDING_ERROR = "bufferAppendingError",
BUFFER_STALLED_ERROR = "bufferStalledError",
BUFFER_FULL_ERROR = "bufferFullError",
BUFFER_SEEK_OVER_HOLE = "bufferSeekOverHole",
BUFFER_NUDGE_ON_STALL = "bufferNudgeOnStall",
ASSET_LIST_LOAD_ERROR = "assetListLoadError",
ASSET_LIST_LOAD_TIMEOUT = "assetListLoadTimeout",
ASSET_LIST_PARSING_ERROR = "assetListParsingError",
INTERSTITIAL_ASSET_ITEM_ERROR = "interstitialAssetItemError",
INTERNAL_EXCEPTION = "internalException",
INTERNAL_ABORTED = "aborted",
ATTACH_MEDIA_ERROR = "attachMediaError",
UNKNOWN = "unknown"
}
export declare enum ErrorTypes {
NETWORK_ERROR = "networkError",
MEDIA_ERROR = "mediaError",
KEY_SYSTEM_ERROR = "keySystemError",
MUX_ERROR = "muxError",
OTHER_ERROR = "otherError"
}
export declare enum Events {
MEDIA_ATTACHING = "hlsMediaAttaching",
MEDIA_ATTACHED = "hlsMediaAttached",
MEDIA_DETACHING = "hlsMediaDetaching",
MEDIA_DETACHED = "hlsMediaDetached",
MEDIA_ENDED = "hlsMediaEnded",
STALL_RESOLVED = "hlsStallResolved",
BUFFER_RESET = "hlsBufferReset",
BUFFER_CODECS = "hlsBufferCodecs",
BUFFER_CREATED = "hlsBufferCreated",
BUFFER_APPENDING = "hlsBufferAppending",
BUFFER_APPENDED = "hlsBufferAppended",
BUFFER_EOS = "hlsBufferEos",
BUFFERED_TO_END = "hlsBufferedToEnd",
BUFFER_FLUSHING = "hlsBufferFlushing",
BUFFER_FLUSHED = "hlsBufferFlushed",
MANIFEST_LOADING = "hlsManifestLoading",
MANIFEST_LOADED = "hlsManifestLoaded",
MANIFEST_PARSED = "hlsManifestParsed",
LEVEL_SWITCHING = "hlsLevelSwitching",
LEVEL_SWITCHED = "hlsLevelSwitched",
LEVEL_LOADING = "hlsLevelLoading",
LEVEL_LOADED = "hlsLevelLoaded",
LEVEL_UPDATED = "hlsLevelUpdated",
LEVEL_PTS_UPDATED = "hlsLevelPtsUpdated",
LEVELS_UPDATED = "hlsLevelsUpdated",
AUDIO_TRACKS_UPDATED = "hlsAudioTracksUpdated",
AUDIO_TRACK_SWITCHING = "hlsAudioTrackSwitching",
AUDIO_TRACK_SWITCHED = "hlsAudioTrackSwitched",
AUDIO_TRACK_LOADING = "hlsAudioTrackLoading",
AUDIO_TRACK_LOADED = "hlsAudioTrackLoaded",
AUDIO_TRACK_UPDATED = "hlsAudioTrackUpdated",
SUBTITLE_TRACKS_UPDATED = "hlsSubtitleTracksUpdated",
SUBTITLE_TRACKS_CLEARED = "hlsSubtitleTracksCleared",
SUBTITLE_TRACK_SWITCH = "hlsSubtitleTrackSwitch",
SUBTITLE_TRACK_LOADING = "hlsSubtitleTrackLoading",
SUBTITLE_TRACK_LOADED = "hlsSubtitleTrackLoaded",
SUBTITLE_TRACK_UPDATED = "hlsSubtitleTrackUpdated",
SUBTITLE_FRAG_PROCESSED = "hlsSubtitleFragProcessed",
CUES_PARSED = "hlsCuesParsed",
NON_NATIVE_TEXT_TRACKS_FOUND = "hlsNonNativeTextTracksFound",
INIT_PTS_FOUND = "hlsInitPtsFound",
FRAG_LOADING = "hlsFragLoading",
FRAG_LOAD_EMERGENCY_ABORTED = "hlsFragLoadEmergencyAborted",
FRAG_LOADED = "hlsFragLoaded",
FRAG_DECRYPTED = "hlsFragDecrypted",
FRAG_PARSING_INIT_SEGMENT = "hlsFragParsingInitSegment",
FRAG_PARSING_USERDATA = "hlsFragParsingUserdata",
FRAG_PARSING_METADATA = "hlsFragParsingMetadata",
FRAG_PARSED = "hlsFragParsed",
FRAG_BUFFERED = "hlsFragBuffered",
FRAG_CHANGED = "hlsFragChanged",
FPS_DROP = "hlsFpsDrop",
FPS_DROP_LEVEL_CAPPING = "hlsFpsDropLevelCapping",
MAX_AUTO_LEVEL_UPDATED = "hlsMaxAutoLevelUpdated",
ERROR = "hlsError",
DESTROYING = "hlsDestroying",
KEY_LOADING = "hlsKeyLoading",
KEY_LOADED = "hlsKeyLoaded",
LIVE_BACK_BUFFER_REACHED = "hlsLiveBackBufferReached",
BACK_BUFFER_REACHED = "hlsBackBufferReached",
STEERING_MANIFEST_LOADED = "hlsSteeringManifestLoaded",
ASSET_LIST_LOADING = "hlsAssetListLoading",
ASSET_LIST_LOADED = "hlsAssetListLoaded",
INTERSTITIALS_UPDATED = "hlsInterstitialsUpdated",
INTERSTITIALS_BUFFERED_TO_BOUNDARY = "hlsInterstitialsBufferedToBoundary",
INTERSTITIAL_ASSET_PLAYER_CREATED = "hlsInterstitialAssetPlayerCreated",
INTERSTITIAL_STARTED = "hlsInterstitialStarted",
INTERSTITIAL_ASSET_STARTED = "hlsInterstitialAssetStarted",
INTERSTITIAL_ASSET_ENDED = "hlsInterstitialAssetEnded",
INTERSTITIAL_ASSET_ERROR = "hlsInterstitialAssetError",
INTERSTITIAL_ENDED = "hlsInterstitialEnded",
INTERSTITIALS_PRIMARY_RESUMED = "hlsInterstitialsPrimaryResumed",
PLAYOUT_LIMIT_REACHED = "hlsPlayoutLimitReached",
EVENT_CUE_ENTER = "hlsEventCueEnter"
}
export declare class EwmaBandWidthEstimator {
private defaultEstimate_;
private minWeight_;
private minDelayMs_;
private slow_;
private fast_;
private defaultTTFB_;
private ttfb_;
constructor(slow: number, fast: number, defaultEstimate: number, defaultTTFB?: number);
update(slow: number, fast: number): void;
sample(durationMs: number, numBytes: number): void;
sampleTTFB(ttfb: number): void;
canEstimate(): boolean;
getEstimate(): number;
getEstimateTTFB(): number;
get defaultEstimate(): number;
destroy(): void;
}
export declare type ExtendedSourceBuffer = SourceBuffer & {
onbufferedchange?: ((this: SourceBuffer, ev: Event) => any) | null;
};
export declare class FetchLoader implements Loader<LoaderContext> {
private fetchSetup;
private requestTimeout?;
private request;
private response;
private controller;
context: LoaderContext | null;
private config;
private callbacks;
stats: LoaderStats;
private loader;
constructor(config: HlsConfig);
destroy(): void;
abortInternal(): void;
abort(): void;
load(context: LoaderContext, config: LoaderConfiguration, callbacks: LoaderCallbacks<LoaderContext>): void;
getCacheAge(): number | null;
getResponseHeader(name: string): string | null;
private loadProgressively;
}
export declare class FPSController implements ComponentAPI {
private hls;
private isVideoPlaybackQualityAvailable;
private timer?;
private media;
private lastTime;
private lastDroppedFrames;
private lastDecodedFrames;
private streamController;
constructor(hls: Hls);
setStreamController(streamController: StreamController): void;
protected registerListeners(): void;
protected unregisterListeners(): void;
destroy(): void;
protected onMediaAttaching(event: Events.MEDIA_ATTACHING, data: MediaAttachingData): void;
private onMediaDetaching;
checkFPS(video: HTMLVideoElement, decodedFrames: number, droppedFrames: number): void;
checkFPSInterval(): void;
}
export declare type FPSControllerConfig = {
capLevelOnFPSDrop: boolean;
fpsDroppedMonitoringPeriod: number;
fpsDroppedMonitoringThreshold: number;
};
export declare interface FPSDropData {
currentDropped: number;
currentDecoded: number;
totalDroppedFrames: number;
}
export declare interface FPSDropLevelCappingData {
droppedLevel: number;
level: number;
}
export declare interface FragBufferedData {
stats: LoadStats;
frag: Fragment;
part: Part | null;
id: string;
}
export declare interface FragChangedData {
frag: Fragment;
}
export declare interface FragDecryptedData {
frag: Fragment;
payload: ArrayBuffer;
stats: {
tstart: number;
tdecrypt: number;
};
}
export declare interface FragLoadedData {
frag: Fragment;
part: Part | null;
payload: ArrayBuffer;
networkDetails: unknown;
}
export declare interface FragLoadEmergencyAbortedData {
frag: Fragment;
part: Part | null;
stats: LoaderStats;
}
export declare interface FragLoadFailResult extends ErrorData {
frag: Fragment;
part?: Part;
response?: {
data: any;
code: number;
text: string;
url: string;
};
networkDetails: any;
}
export declare interface FragLoadingData {
frag: Fragment;
part?: Part;
targetBufferTime: number | null;
}
/**
* Object representing parsed data from an HLS Segment. Found in {@link hls.js#LevelDetails.fragments}.
*/
export declare class Fragment extends BaseSegment {
private _decryptdata;
private _programDateTime;
private _ref;
private _bitrate?;
rawProgramDateTime: string | null;
tagList: Array<string[]>;
duration: number;
sn: number | 'initSegment';
levelkeys?: {
[key: string]: LevelKey | undefined;
};
readonly type: PlaylistLevelType;
loader: Loader<FragmentLoaderContext> | null;
keyLoader: Loader<KeyLoaderContext> | null;
level: number;
cc: number;
startPTS?: number;
endPTS?: number;
startDTS?: number;
endDTS?: number;
start: number;
playlistOffset: number;
deltaPTS?: number;
maxStartPTS?: number;
minEndPTS?: number;
data?: Uint8Array;
bitrateTest: boolean;
title: string | null;
initSegment: Fragment | null;
endList?: boolean;
gap?: boolean;
urlId: number;
constructor(type: PlaylistLevelType, base: Base | string);
get byteLength(): number | null;
get bitrate(): number | null;
set bitrate(value: number);
get decryptdata(): LevelKey | null;
get end(): number;
get endProgramDateTime(): number | null;
get encrypted(): boolean;
get programDateTime(): number | null;
set programDateTime(value: number | null);
get ref(): MediaFragmentRef | null;
addStart(value: number): void;
setStart(value: number): void;
setDuration(value: number): void;
setKeyFormat(keyFormat: KeySystemFormats): void;
abortRequests(): void;
setElementaryStreamInfo(type: ElementaryStreamTypes, startPTS: number, endPTS: number, startDTS: number, endDTS: number, partial?: boolean): void;
}
export declare class FragmentLoader {
private readonly config;
private loader;
private partLoadTimeout;
constructor(config: HlsConfig);
destroy(): void;
abort(): void;
load(frag: Fragment, onProgress?: FragmentLoadProgressCallback): Promise<FragLoadedData>;
loadPart(frag: Fragment, part: Part, onProgress: FragmentLoadProgressCallback): Promise<FragLoadedData>;
private updateStatsFromPart;
private resetLoader;
}
/**
* @deprecated use fragLoadPolicy.default
*/
export declare type FragmentLoaderConfig = {
fragLoadingTimeOut: number;
fragLoadingMaxRetry: number;
fragLoadingRetryDelay: number;
fragLoadingMaxRetryTimeout: number;
};
export declare in