UNPKG

dashjs

Version:

A reference client implementation for the playback of MPEG DASH via Javascript and compliant browsers.

1,541 lines (1,075 loc) 136 kB
export = dashjs; export as namespace dashjs; declare namespace dashjs { /** * Core */ interface Debug { getLogger(): Logger; setLogTimestampVisible(flag: boolean): void; setCalleeNameVisible(flag: boolean): void; } interface EventBus { on(type: string, listener: any, scope: any, options?: object): void; off(type: string, listener: any, scope: any): void; trigger(type: string, payload?: object, filters?: object): void; reset(): void; } export interface FactoryMaker { extend(name: string, childInstance: object, override: boolean, context: object): void; getSingletonInstance(context: object, className: string): any, setSingletonInstance(context: object, className: string, instance: object): void; deleteSingletonInstances(context: object): void; getFactoryByName(name: string, factoriesArray: Factory[]): Factory; updateFactory(name: string, factoriesArray: Factory[]): void; getSingletonFactory(classConstructor: ClassConstructor): SingletonFactory, getSingletonFactoryByName(name: string): SingletonFactory; updateSingletonFactory(name: string, factory: SingletonFactory): void; getClassFactory(classConstructor: ClassConstructor): Factory; getClassFactoryByName(name: string): Factory; updateClassFactory(name: string, factory: Factory): void; } interface Logger { debug(...params: any[]): void; info(...params: any[]): void; warn(...params: any[]): void; error(...params: any[]): void; fatal(...params: any[]): void; } export function Version(): string; const enum LogLevel { LOG_LEVEL_NONE = 0, LOG_LEVEL_FATAL = 1, LOG_LEVEL_ERROR = 2, LOG_LEVEL_WARNING = 3, LOG_LEVEL_INFO = 4, LOG_LEVEL_DEBUG = 5 } /** * Dash - Controllers **/ export interface ContentSteeringController { reset(): void; setConfig(config: object): void; loadSteeringData(): Promise<any>; getCurrentSteeringResponseData() : ContentSteeringResponse; shouldQueryBeforeStart() : boolean; getSteeringDataFromManifest(): ContentSteering[]; stopSteeringRequestTimer(): void; getSynthesizedBaseUrlElements(referenceElements: BaseURL[]): BaseURL[]; getSynthesizedLocationElements(referenceElements: MpdLocation[]) : MpdLocation; initialize(): void } export interface RepresentationController { getStreamId(): string; getType(): string; getDate(): AdaptationSet; isUpdating(): boolean; updateData(newRealAdaptation: object, availableRepresentations: object[], type: string, isFragmented: boolean, quality: number): any; //Promise.all(iterable) can be solved promise, asynchronous promise, pending promise getCurrentRepresentation(): object; getCurrentRepresentationInfo(): RepresentationInfo; getRepresentationForQuality(quality: number): object | null; prepareQualityChange(newQuality: number): void; reset(): void; } export interface SegmentBaseController { initialize(): void; getSegmentBaseInitSegment(data: any): Promise<any>; getSegmentList(e: object): Promise<any>; reset(): void; } export interface SegmentsController { initialize(isDynamic: boolean): void; updateInitData(voRepresentation: Representation, hasInitialization: boolean): Promise<any>; updateSegmentData(voRepresentation: Representation, hasSegments: boolean): Promise<any>; getSegmentByIndex(representation: Representation, index: number, lastSegmentTime: number): any; getSegmentByTime(representation: Representation, time: number): any; getMediaFinishedInformation(representation: Representation): any; } /** * Dash - Models **/ export interface DashManifestModel { getIsTypeOf(adaptation: object, type: string): boolean; getIsFragmented(adaptation: object): boolean; getIsAudio(adaptation: object): boolean; getIsVideo(adaptation: object): boolean; getIsText(adaptation: object): boolean; getIsMuxed(adaptation: object): boolean; getIsImage(adaptation: object): boolean; getLanguageForAdaptation(adaptation: object): string; getViewpointForAdaptation(adaptation: object): DescriptorType[]; getRolesForAdaptation(adaptation: object): DescriptorType[]; getAccessibilityForAdaptation(adaptation: object): DescriptorType[]; getAudioChannelConfigurationForAdaptation(adaptation: object): DescriptorType[]; getAudioChannelConfigurationForRepresentation(adaptation: object): DescriptorType[]; getRepresentationSortFunction(): (a: object, b: object) => number; processAdaptation(realAdaptation: object): object; getRealAdaptations(manifest: object, periodIndex: number): any[]; getRealPeriods(manifest: object): any[]; getRealPeriodForIndex(index: number, manifest: object): any; getAdaptationForId(id: string, manifest: object, periodIndex: number): any; getAdaptationForIndex(index: number, manifest: object, periodIndex: number): any; getIndexForAdaptation(realAdaptation: object, manifest: object, periodIndex: number): number; getAdaptationsForType(manifest: object, periodIndex: number, type: string): any[]; getCodec(adaptation: object, representationId: number, addResolutionInfo: boolean): string; getMimeType(adaptation: object): object; // MimeType is deprecated as a type getKID(adaptation: object): any; getLabelsForAdaptation(adaptation: object): any[]; getContentProtectionData(adaptation: object): any[]; getIsDynamic(manifest: object): boolean; getId(manifest: object): string; hasProfile(manifest: object, profile: object): boolean; getDuration(manifest: object): number; getBandwidth(representation: object): number; getManifestUpdatePeriod(manifest: object, latencyOfLastUpdate?: number): number; getPublishTime(manifest: object): Date | null; getRepresentationCount(adaptation: object): number; getBitrateListForAdaptation(realAdaptation: object): {bandwidth: number, width: number, height: number, scanType: string | null, id: string | null}; getSelectionPriority(realAdaptation: object): number; getEssentialPropertiesForAdaptation(adaptation: object): object; getEssentialPropertiesAsArrayForAdaptation(adaptation: object): any[]; getEssentialPropertiesForRepresentation(realRepresentation: object): {schemeIdUri: string, value: string} getRepresentationFor(index: number, adaptation: object): object; getRealAdaptationFor(voAdaptation: object): object; getRepresentationsForAdaptation(voAdaptation: object): object[]; getAdaptationsForPeriod(voPeriod: Period): AdaptationSet[]; getRegularPeriods(mpd: Mpd): Period[]; getPeriodId(realPeriod: Period, i: number): string; getMpd(manifest: object): Mpd; getEndTimeForLastPeriod(voPeriod: Period): number; getEventsForPeriod(period: Period): any[]; getEventStreams(inbandStreams: EventStream[], representation: Representation): EventStream[]; getEventStreamForAdaptationSet(manifest: object, adaptation: object): EventStream[]; getEventStreamForRepresentation(manifest: object, representation: Representation): EventStream[]; getUTCTimingSources(manifest: object): any[]; getBaseURLsFromElement(node: object): BaseURL[]; getLoction(manifest: object): string | undefined; getSuggestedPresentationDelay(mpd: Mpd): number; getAvailabilityStartTime(mpd: Mpd): number; getServiceDescriptions(manifest: object): serviceDescriptions; getSegmentAlignment(adaptation: object): boolean; getSubSegmentAlignment(adaptation: object): boolean; getSupplementalPropertiesForAdaptation(adaptation: object): object; getSupplementalPropertiesAsArrayForAdaptation(adaptation: object): any[]; getSupplementalPropertiesForRepresentation(representation: Representation): object; getSupplementalPropertiesAsArrayForRepresentation(representation: Representation): any[]; setConfig(config: object): void; } export interface PatchManifestModel { getIsPatch(patch: object): boolean; getPublishTime(patch: object): number | null; getOriginalPublishTime(patch: object): number | null; getMpdId(patch: object): string | null; getPatchOperations(patch: object): PatchOperation | []; } /** * Dash - Parser - Maps **/ export class CommonProperty { constructor(name: string); } export class MapNode { constructor(name: string, properties: object, children: object); } export class RepresentationBaseValuesMap extends MapNode { } export class SegmentsValuesMap extends MapNode { } /** * Dash - Parser - Matchers **/ export class BaseMatcher { constructor(test: any, covnerter: any); } export class DateTimeMatcher extends BaseMatcher { } export class NumericMatcher extends BaseMatcher { } export class StringMatcher extends BaseMatcher { } /** * Dash - Parser **/ export interface DashParser { getMatchers(): any; getIron(): any; parse(data: any): any; } export interface objectiron { run(source: string): void; } /** * Dash - Utils **/ export interface SegmentBaseGetter { getMediaFinishedInformation(representation: Representation): MediaFinishedInformation; getSegmentByIndex(representation: Representation, index: number): any; getSegmentByTime(representation: Representation, requestedTime: number): any; } export interface TemplateSegmentsGetter { getMediaFinishedInformation(representation: Representation): MediaFinishedInformation; getSegmentByIndex(representation: Representation, index: number): any; getSegmentByTime(representation: Representation, requestedTime: number): any; } export interface TimelineConverter { initialize(): void; getClientTimeOffset(): number; setClientTimeOffset(): number; calcAvailabilityStartTimeFromPresentationTime(presentationEndTime: number, representation: Representation, isDynamic: boolean): number; calcAvailabilityEndTimeFromPresentationTime(presentationEndTime: number, representation: Representation, isDynamic: boolean, trueBool?: boolean): number; calcPresentationTimeFromWallTime(wallTime: number, period: Period): number; calcPresentationTimeFromMediaTime(mediaTime: number, representation: Representation): number; calcMediaTimeFromPresentationTime(presentationTime: number, representation: Representation): number; calcWallTimeForSegment(segment: any, isDynamic: boolean): number; calcTimeShiftBufferWindow(streams: any[], isDynamic: boolean): object; calcPeriodRelativeTimeFromMpdRelativeTime(representation: Representation, mpdRelativeTime: number): number; reset(): void; } export interface TimelineSegmentsGetter { getSegmentByIndex(representation: Representation, index: number, lastSegmentTime: number): Segment | null; getSegmentByTime(representation: Representation, requestedTime: number): Segment | null; getMediaFinishedInformation(representation: Representation): number | object; } /** * Dash - Vo **/ export class AdaptationSet { period: Period | null; index: number; type: string | null; } export interface BaseURL { url: string; serviceLocation: string; dvbPriority: number; dvbWeight: number; availabilityTimeOffset: number; availabilityTimeComplete: boolean; queryParams: object; } export class MpdLocation { url: string; serviceLocation: string; queryParams: object; } export class PatchLocation { url: string; serviceLocation: string; ttl: number; queryParams: object; } export interface Event { type: string; duration: number; presentationTime: number; id: string | number; messageData: string; eventStream: EventStream; presentationTimeDelta: number; } export interface EventStream { adaptationSet: AdaptationSet | null; representation: Representation | null; period: Period | null; timescale : number; value: string; schemeIdUri: string; presentationTimeOffset: number; } export interface IManifestInfo { dvrWindowSize: number; availableFrom: Date; duration: number; isDynamic: boolean; loadedTime: Date; maxFragmentDuration: number; minBufferTime: number; serviceDescriptions: serviceDescriptions[] protocol?: string; } export class MediaInfo { id: string | null; index: number | null; type: MediaType | null; streamInfo: StreamInfo | null; representationCount: number; labels: { text: string, lang?: string }[]; lang: string | null; viewpoint: any | undefined | null; viewpointsWithSchemeIdUri: DescriptorType[] | null; accessibility: any[] | null; accessibilitiesWithSchemeIdUri: DescriptorType[] | null; audioChannelConfiguration: any[] | null; audioChannelConfigurationsWithSchemeIdUri: DescriptorType[] | null; roles: string[] | null; rolesWithSchemeIdUri: DescriptorType[] | null; codec: string | null; mimeType: string | null; contentProtection: any | null; isText: boolean; KID: any | null; bitrateList: Bitrate[]; isFragmented: any | null; isEmbedded: any | null; selectionPriority: number; supplementalProperties: object; supplementalPropertiesAsArray: any[]; essentialProperties: object; essentialPropertiesAsArray: any[]; segmentAlignment: boolean; subSegmentAlignment: boolean; } export interface Mpd { manifest: object; suggestedPresentationDelay: number; availabiliyStartTime: number | null; availabilityEndTime: number; timeShiftBufferDepth: number; maxSegmentDuration: number; publishTime: number | null; minimumUpdatePeriod: number; mediaPresentationDuration: number; } export class PatchOperation { action: any; xpath: any; value: string; position: any | null; getMpdTarget(root: any): any; } export interface Period { id : string | null; index: number; duration: number; start: number; mpd: Mpd; nextPeriodId: string | null; } export interface Representation { id: string; index: number; //adaptation needs checking adaptation: AdaptationSet | null; segmentInfoType: string | null; initialization: object | null; codecs: string | null; mimeType: string | null; codecPrivateData: string | null; segmentDuration: number; timescale: number; startNumber: number; indexRange: string | null; range: Range | null; presentationTimeOffset: number; MSETimeOffset: number; mediaFinishedInformation: MediaFinishedInformation; availableSegmentsNumber: number; bandwidth: number; width: number; height: number; scanType: string; maxPlayoutRate: number; availabilityTimeOffset: number; availabilityTimeComplete: boolean; segments: any[]; frameRate: number; } export interface RepresentationInfo { id: string | null; quality: number | null; fragmentDuration: number | null; mediaInfo: MediaInfo | null; MSETimeOffset: number | null; } export interface Segment { indexRange: any; index: number | null; mediaRange: any; media: any; duration: number; replacementTime: number; replacementNumber: number; mediaStartTime: number; presentationStartTime: number; availabilityStartTime: number; availabilityEndTime: number; wallStartTime: number; representation: Representation | null; } export class SimpleXPath { constructor(selector: any); } export class StreamInfo { id: string; index: number; start: number; duration: number; manifestInfo: IManifestInfo; isLast: boolean; } export class UTCTiming { schemeIdUri: string; value: string; } export class DescriptorType { schemeIdUri: string; value: string; id: string; dvbUrl?: string; dvbMimeType?: string; dvbFontFamily?: string; } export class ContentSteeringResponse { version: number; ttl: number; reloadUri : string; pathwayPriority : string[]; pathwayClones : object[]; } export class ContentSteering { defaultServiceLocation: string; defaultServiceLocationArray: string[]; queryBeforeStart : boolean; serverUrl : string; clientRequirement : boolean; } /** * Dash **/ export interface DashAdapter { getMediaInfoForType(streamInfo: object, type: MediaType): MediaInfo | null; getIsMain(adaptation: object): boolean; getAdaptationForType(periodIndex: number, type: MediaType, streamInfo: object): object | null; areMediaInfosEqual(mInfoOne: MediaInfo, mInfoTwo: MediaInfo): boolean; getAllMediaInfoForType(streamInfo: object, type: MediaType, externalManifest?: object | null): any[]; getRealAdaptation(streamInfo: StreamInfo, mediaInfo: MediaInfo): object; getEssentialPropertiesForRepresentation(representation: Representation): any[]; getRealPeriodByIndex(index: number): object; getVoRepresentation(mediaInfo: MediaInfo): Representation[]; getUTCTimingSources(): any[]; getSuggestedPresentationDelay(): string; getAvailabilityStartTime(externalManifest: object): number; getIsDynamic(externalManifest: object): boolean; getDuration(externalManifest: object): number; getRegularPeriods(externalManifest: object): any[]; getMpd(externalManifest?: object): Mpd; getLocation(manifest: object): MpdLocation[]; getManifestUpdatePeriod(manifest: object, latencyOfLastUpdate?: number): number; getPublishTime(manifest: object): number | null; getPatchLocation(manifest: object): PatchLocation[]; getIsDVB(manifest: object): boolean; getIsPatch(manifest: object): boolean; getBaseURLsFromElement(node: object): BaseURL[]; getRepresentationSortFunction(): (a: object, b: object) => number; getCodec(adaptation: object, representationId: number, addResolutionInfo: boolean): string; getBandwidthForRepresentation(representationId: string, periodIdx: number): number; getIndexForRepresentation(representationId: string, periodIdx: number): number; /** * This method returns the current max index based on what is defined in the MPD. * * @param bufferType String 'audio' or 'video', * @param periodIdx Make sure this is the period index not id */ getMaxIndexForBufferType(bufferType: MediaType, periodIdx: number): number; getPeriodbyId(id: string): object | null; getIsTypeOf(adaptation: object, type: string): boolean; reset(): void; isPatchValid(manifest: object, patch: object): boolean; applyPatchToManifest(manifest: object, patch: object): void; } export interface DashHandler { initialize(isDynamic: boolean): void; getStreamId(): string; getType(): string; on(type: AdaptationSetRemovedNoCapabilitiesEvent['type'], listener: (e: AdaptationSetRemovedNoCapabilitiesEvent) => void, scope?: object): void; on(type: string, listener: (e: Event) => void, scope?: object): void; off(type: string, listener: (e: any) => void, scope?: object): void; getStreamInfo():StreamInfo; reset(): void; getInitRequest(mediaInfo: MediaInfo, representation: Representation): Request | null; isLastSegmentRequested(representation: Representation, bufferingTime: number): boolean; getSegmentRequestForTime(mediaInfo: MediaInfo, representation: Representation, time: number): Request; getNextSegmentRequestIdempotent(mediaInfo: MediaInfo, representation: Representation): FragmentRequest | null; getNextSegmentRequest(mediaInfo: MediaInfo, representation: Representation): FragmentRequest | null; repeatSegmentRequest(mediaInfo: MediaInfo, representation: Representation): FragmentRequest | null; getValidTimeCloseToTargetTime(time: number, mediaInfo: MediaInfo, representation: Representation, targetThreshold: number): number; getValidTimeAheadOfTargetTime(time: number, mediaInfo: MediaInfo, representation: Representation): number; getCurrentIndex(): number; } export interface DashMetrics { getCurrentRepresentationSwitch(type: MediaType): ICurrentRepresentationSwitch; addRepresentationSwitch(mediaType: MediaType, t: Date, mt: Date, to: string, lto: string): void; getCurrentBufferState(type: MediaType): IBufferState; getCurrentBufferLevel(type: MediaType): number; addBufferLevel(mediaType: MediaType, t: number, level: number): void; addBufferState(mediaType: MediaType, state: string, target: number): void; clearAllCurrentMetrics(): void; getCurrentHttpRequest(type: MediaType): object; getHttpRequests(type: MediaType): object[]; addRequestsQueue(mediaType: MediaType, loadingRequests: any[], executedRequests: any[]): void; getCurrent(metrics: MetricsList, metricName: string): IDroppedFrames; getCurrentDroppedFrames(): IDroppedFrames; addDroppedFrames(quality: number): void; getCurrentSchedulingInfo(type: MediaType): object; addSchedulingInfo(request: SchedulingInfo, state: string): void; getCurrentDVRInfo(type?: MediaType): IDVRInfo; addDVRInfo(mediaType: MediaType, currentTime: Date, mpd: Mpd, range: Range): void; getCurrentManifestUpdate(): any; updateManifestUpdateInfo(updateFields: any[]): void; addManifestUpdateStreamInfo(streamInfo: StreamInfo): void; addManifestUpdate(request: ManifestUpdate): void; addHttpRequest(request: HTTPRequest, responseURL: string, responseStatus: number, responseHeaders: object, traces: object): void; addManifestUpdateRepresentationInfo(representation: Representation, mediaType: MediaType): void; getCurrentLiveLatency(): number; getLatestFragmentRequestHeaderValueByID(id: string): string; addPlayList(): void; createPlaylistMetrics(mediaStartTime: number, startReason: string): void; createPlaylistTraceMetrics(representationId: number, mediaStartTime: number, speed: number): void; updatePlayListTraceMetrics(traceToUpdate: object): void; pushPlaylistTraceMetrics(endTime: number, reason: string): void; addDVBErrors(errors: object): void; getLatestMPDRequestHeaderValueByID(type: MediaType, id: string): string; resetInitialSettings(): void; } export interface SegmentBaseLoader { initialize(): void; setConfig(config: object): void; loadInitialization(representation: Representation, mediaType: MediaType): Promise<any>; loadSegments(representation: Representation, mediaType: MediaType, range: Range): Promise<any>; reset(): any; } export interface WebSegmentBaseLoader { initialize(): void; setConfig(config: object): void; loadInitialization(representation: Representation, mediaType: MediaType): Promise<any>; loadSegments(representation: Representation, mediaType: MediaType, range: Range): Promise<any>; reset(): any; } /** * MSS - Parser **/ export interface MssParser { setup(): void; getAttributeAsBoolean(node: object, attrName: string): boolean; // mapPeriod(smoothStreamingMedia: HTMLElement, timescale: number): Period; // mapAdaptationSet(streamIndex: HTMLElement, timescale: number): AdaptationSet; // mapRepresentation(qualityLevel: HTMLElement, streamIndex: HTMLElement): Representation; parse(data: any): object; getMatchers(): null; //Entire function consists of "return null" getIron(): null; reset(): void; } /** * MSS **/ export interface MssFragmentInfoController { initialize(): void; start(): void; reset(): void; //Calls stop() fragmentInfoLoaded(e: object): void; getType(): string; } export interface MssFragmentMoofProcessor { convertFragment(e: object, streamProcessor: any): void; updateSegmentList(e: object, streamProcessor: any): void; getType(): string; } export interface MssFragmentMoovProcessor { generateMoov(rep: Representation): ArrayBuffer; } export interface MssFragmentProcessor { generateMoov(rep: Representation): ArrayBuffer; processFragment(e: object, streamProcessor: any): void; } export interface MssHandler { reset(): void; createMssParser(): void; registerEvents(): void; } /** * Offline **/ export interface OfflineRecord { id: string; progress: number; url: string; originalUrl: string; status: string; } interface OfflineController { // // Download List Functions // getDownloadFromId(id: string): object; // createDownloadFromId(id: string): object; // createDownloadFromStorage(offline: any): object; // removeDownloadFromId(id: string): void; // generateManifestId(): number; // OfflineControllerAPI loadRecordsFromStorage(): Promise<void>; getAllRecords(): OfflineRecord[]; createRecord(manifestURL: string): Promise<string>; startRecord(id: string, mediaInfos: MediaInfo[]): void; stopRecord(id: string): void; resumeRecord(id: string): void; deleteRecord(id: string): void; getRecordProgression(id: string): number; resetRecords(): void; reset(): void; } export interface Bitrate { id?: string; width?: number; height?: number; bandwidth?: number; scanType?: string; } export type MediaType = 'video' | 'audio' | 'text' | 'image'; export class ProtectionMediaInfo { codec: string | null; contentProtection: any | null; } export class MediaPlayerSettingClass { debug?: { logLevel?: LogLevel; dispatchEvent?: boolean; }; streaming?: { abandonLoadTimeout?: number, wallclockTimeUpdateInterval?: number, manifestUpdateRetryInterval?: number, liveUpdateTimeThresholdInMilliseconds?: number, applyServiceDescription?: boolean, applyProducerReferenceTime?: boolean, applyContentSteering?: boolean, cacheInitSegments?: boolean, eventControllerRefreshDelay?: number, enableManifestDurationMismatchFix?: boolean, enableManifestTimescaleMismatchFix?: boolean, parseInbandPrft?: boolean, capabilities?: { filterUnsupportedEssentialProperties?: boolean, useMediaCapabilitiesApi?: boolean }, timeShiftBuffer?: { calcFromSegmentTimeline?: boolean fallbackToSegmentTimeline?: boolean }, metrics?: { maxListDepth?: number }, delay?: { liveDelayFragmentCount?: number, liveDelay?: number, useSuggestedPresentationDelay?: boolean }, protection?: { keepProtectionMediaKeys?: boolean, ignoreEmeEncryptedEvent?: boolean, detectPlayreadyMessageFormat?: boolean, }, buffer?: { enableSeekDecorrelationFix?: boolean, fastSwitchEnabled?: boolean, flushBufferAtTrackSwitch?: boolean, reuseExistingSourceBuffers?: boolean, bufferPruningInterval?: number, bufferToKeep?: number, bufferTimeAtTopQuality?: number, bufferTimeAtTopQualityLongForm?: number, initialBufferLevel?: number, stableBufferTime?: number, longFormContentDurationThreshold?: number, stallThreshold?: number, useAppendWindow?: boolean, setStallState?: boolean avoidCurrentTimeRangePruning?: boolean useChangeTypeForTrackSwitch?: boolean mediaSourceDurationInfinity?: boolean resetSourceBuffersForTrackSwitch?: boolean }, gaps?: { jumpGaps?: boolean, jumpLargeGaps?: boolean, smallGapLimit?: number, threshold?: number, enableSeekFix?: boolean, enableStallFix?: boolean, stallSeek?: number }, utcSynchronization?: { enabled?: boolean, useManifestDateHeaderTimeSource?: boolean, backgroundAttempts?: number, timeBetweenSyncAttempts?: number, maximumTimeBetweenSyncAttempts?: number, minimumTimeBetweenSyncAttempts?: number, timeBetweenSyncAttemptsAdjustmentFactor?: number, maximumAllowedDrift?: number, enableBackgroundSyncAfterSegmentDownloadError?: boolean, defaultTimingSource?: { scheme?: string, value?: string } }, scheduling?: { defaultTimeout?: number, lowLatencyTimeout?: number, scheduleWhilePaused?: boolean }, text?: { defaultEnabled?: boolean, dispatchForManualRendering?: boolean, extendSegmentedCues?: boolean, imsc?: { displayForcedOnlyMode?: boolean, enableRollUp?: boolean }, webvtt?: { customRenderingEnabled?: number } }, liveCatchup?: { maxDrift?: number; playbackRate?:{ min?: number, max?: number }, playbackBufferMin?: number, enabled?: boolean mode?: string } lastBitrateCachingInfo?: { enabled?: boolean; ttl?: number; }; lastMediaSettingsCachingInfo?: { enabled?: boolean; ttl?: number; }; saveLastMediaSettingsForCurrentStreamingSession?: boolean; cacheLoadThresholds?: { video?: number; audio?: number; }; trackSwitchMode?: { video?: TrackSwitchMode; audio?: TrackSwitchMode; } selectionModeForInitialTrack?: TrackSelectionMode fragmentRequestTimeout?: number; fragmentRequestProgressTimeout?: number; manifestRequestTimeout?: number; retryIntervals?: { 'MPD'?: number; 'XLinkExpansion'?: number; 'MediaSegment'?: number; 'InitializationSegment'?: number; 'BitstreamSwitchingSegment'?: number; 'IndexSegment'?: number; 'FragmentInfoSegment'?: number; 'license'?: number; 'other'?: number; 'lowLatencyReductionFactor'?: number; }; retryAttempts?: { 'MPD'?: number; 'XLinkExpansion'?: number; 'MediaSegment'?: number; 'InitializationSegment'?: number; 'BitstreamSwitchingSegment'?: number; 'IndexSegment'?: number; 'FragmentInfoSegment'?: number; 'license'?: number; 'other'?: number; 'lowLatencyMultiplyFactor'?: number; }; abr?: { movingAverageMethod?: 'slidingWindow' | 'ewma'; ABRStrategy?: 'abrDynamic' | 'abrBola' | 'abrL2A' | 'abrLoLP' | 'abrThroughput'; additionalAbrRules?: { insufficientBufferRule?: boolean, switchHistoryRule?: boolean, droppedFramesRule?: boolean, abandonRequestsRule?: boolean }, abrRulesParameters?: { abandonRequestsRule: { graceTimeThreshold: number, abandonMultiplier: number, minLengthToAverage: number } }, bandwidthSafetyFactor?: number; useDefaultABRRules?: boolean; useDeadTimeLatency?: boolean; limitBitrateByPortal?: boolean; usePixelRatioInLimitBitrateByPortal?: boolean; maxBitrate?: { audio?: number; video?: number; }; minBitrate?: { audio?: number; video?: number; }; maxRepresentationRatio?: { audio?: number; video?: number; }; initialBitrate?: { audio?: number; video?: number; }; initialRepresentationRatio?: { audio?: number; video?: number; }; autoSwitchBitrate?: { audio?: boolean; video?: boolean; }, fetchThroughputCalculationMode?: string; }, cmcd?: { enabled?: boolean, sid?: string | null, cid?: string | null, rtp?: number | null, rtpSafetyFactor?: number, mode?: 'query' | 'header', enabledKeys?: Array<string> }, cmsd?: { enabled?: boolean, abr?: { applyMb: boolean, etpWeightRatio?: number } } }; errors?: { recoverAttempts?: { mediaErrorDecode?: number } } } export interface MediaFinishedInformation { numberOfSegments: number, mediaTimeOfLastSignaledSegment: number } export type TrackSelectionFunction = (tracks: MediaInfo[]) => MediaInfo[]; export interface MediaPlayerClass { setConfig(config: object): void; initialize(view?: HTMLMediaElement, source?: string, AutoPlay?: boolean, startTime?: number | string): void; on(type: AstInFutureEvent['type'], listener: (e: AstInFutureEvent) => void, scope?: object): void; on(type: BufferEvent['type'], listener: (e: BufferEvent) => void, scope?: object): void; on(type: CaptionRenderedEvent['type'], listener: (e: CaptionRenderedEvent) => void, scope?: object): void; on(type: CaptionContainerResizeEvent['type'], listener: (e: CaptionContainerResizeEvent) => void, scope?: object): void; on(type: DynamicToStaticEvent['type'], listener: (e: DynamicToStaticEvent) => void, scope?: object): void; on(type: ErrorEvent['type'], listener: (e: ErrorEvent) => void, scope?: object): void; on(type: FragmentLoadingCompletedEvent['type'], listener: (e: FragmentLoadingCompletedEvent) => void, scope?: object): void; on(type: FragmentLoadingAbandonedEvent['type'], listener: (e: FragmentLoadingAbandonedEvent) => void, scope?: object): void; on(type: InbandPrftReceivedEvent['type'], listener: (e: InbandPrftReceivedEvent) => void, scope?: object): void; on(type: KeyErrorEvent['type'], listener: (e: KeyErrorEvent) => void, scope?: object): void; on(type: KeyMessageEvent['type'], listener: (e: KeyMessageEvent) => void, scope?: object): void; on(type: KeySessionClosedEvent['type'], listener: (e: KeySessionClosedEvent) => void, scope?: object): void; on(type: KeySessionEvent['type'], listener: (e: KeySessionEvent) => void, scope?: object): void; on(type: KeyStatusesChangedEvent['type'], listener: (e: KeyStatusesChangedEvent) => void, scope?: object): void; on(type: KeySystemSelectedEvent['type'], listener: (e: KeySystemSelectedEvent) => void, scope?: object): void; on(type: LicenseRequestCompleteEvent['type'], listener: (e: LicenseRequestCompleteEvent) => void, scope?: object): void; on(type: LogEvent['type'], listener: (e: LogEvent) => void, scope?: object): void; on(type: ManifestLoadedEvent['type'], listener: (e: ManifestLoadedEvent) => void, scope?: object): void; on(type: MetricEvent['type'], listener: (e: MetricEvent) => void, scope?: object): void; on(type: MetricChangedEvent['type'], listener: (e: MetricChangedEvent) => void, scope?: object): void; on(type: OfflineRecordEvent['type'], listener: (e: OfflineRecordEvent) => void, scope?: object): void; on(type: OfflineRecordLoademetadataEvent['type'], listener: (e: OfflineRecordLoademetadataEvent) => void, scope?: object): void; on(type: PeriodSwitchEvent['type'], listener: (e: PeriodSwitchEvent) => void, scope?: object): void; on(type: PlaybackErrorEvent['type'], listener: (e: PlaybackErrorEvent) => void, scope?: object): void; on(type: PlaybackPausedEvent['type'], listener: (e: PlaybackPausedEvent) => void, scope?: object): void; on(type: PlaybackPlayingEvent['type'], listener: (e: PlaybackPlayingEvent) => void, scope?: object): void; on(type: PlaybackRateChangedEvent['type'], listener: (e: PlaybackRateChangedEvent) => void, scope?: object): void; on(type: PlaybackSeekingEvent['type'], listener: (e: PlaybackSeekingEvent) => void, scope?: object): void; on(type: PlaybackStartedEvent['type'], listener: (e: PlaybackStartedEvent) => void, scope?: object): void; on(type: PlaybackTimeUpdatedEvent['type'], listener: (e: PlaybackTimeUpdatedEvent) => void, scope?: object): void; on(type: ProtectionCreatedEvent['type'], listener: (e: ProtectionCreatedEvent) => void, scope?: object): void; on(type: ProtectionDestroyedEvent['type'], listener: (e: ProtectionDestroyedEvent) => void, scope?: object): void; on(type: QualityChangeRenderedEvent['type'], listener: (e: QualityChangeRenderedEvent) => void, scope?: object): void; on(type: QualityChangeRequestedEvent['type'], listener: (e: QualityChangeRequestedEvent) => void, scope?: object): void; on(type: StreamInitializedEvent['type'], listener: (e: StreamInitializedEvent) => void, scope?: object): void; on(type: TextTracksAddedEvent['type'], listener: (e: TextTracksAddedEvent) => void, scope?: object): void; on(type: TtmlParsedEvent['type'], listener: (e: TtmlParsedEvent) => void, scope?: object): void; on(type: TtmlToParseEvent['type'], listener: (e: TtmlToParseEvent) => void, scope?: object): void; on(type: AdaptationSetRemovedNoCapabilitiesEvent['type'], listener: (e: AdaptationSetRemovedNoCapabilitiesEvent) => void, scope?: object): void; on(type: string, listener: (e: Event) => void, scope?: object, options?:object): void; off(type: string, listener: (e: any) => void, scope?: object): void; extend(parentNameString: string, childInstance: object, override: boolean): void; attachView(element: HTMLElement): void; attachSource(urlOrManifest: string | object, startTime?: number | string): void; refreshManifest(callback: (manifest: object | null, error: unknown) => void): void; isReady(): boolean; preload(): void; play(): void; isPaused(): boolean; pause(): void; isSeeking(): boolean; isDynamic(): boolean; seek(value: number): void; seekToOriginalLive(): void; setPlaybackRate(value: number): void; getPlaybackRate(): number; setMute(value: boolean): void; isMuted(): boolean; setVolume(value: number): void; getVolume(): number; time(streamId?: string): number; duration(): number; timeAsUTC(): number; durationAsUTC(): number; getActiveStream(): Stream | null; getDVRWindowSize(): number; getDVRSeekOffset(value: number): number; getTargetLiveDelay(): number; convertToTimeCode(value: number): string; formatUTC(time: number, locales: string, hour12: boolean, withDate?: boolean): string; getVersion(): string; getDebug(): Debug; getBufferLength(type: MediaType): number; getVideoModel(): VideoModel; getTTMLRenderingDiv(): HTMLDivElement | null; getVideoElement(): HTMLVideoElement; getSource(): string | object; updateSource(urlOrManifest: string | object): void; getCurrentLiveLatency(): number; getTopBitrateInfoFor(type: MediaType): BitrateInfo; setAutoPlay(value: boolean): void; getAutoPlay(): boolean; getDashMetrics(): DashMetrics; getQualityFor(type: MediaType): number; setQualityFor(type: MediaType, value: number, replace?: boolean): void; updatePortalSize(): void; enableText(enable: boolean): boolean; enableForcedTextStreaming(value: boolean): boolean; isTextEnabled(): boolean; setTextTrack(idx: number): void; getBitrateInfoListFor(type: MediaType): BitrateInfo[]; getStreamsFromManifest(manifest: object): StreamInfo[]; getTracksFor(type: MediaType): MediaInfo[]; getTracksForTypeFromManifest(type: MediaType, manifest: object, streamInfo: StreamInfo): MediaInfo[]; getCurrentTrackFor(type: MediaType): MediaInfo | null; setInitialMediaSettingsFor(type: MediaType, value: MediaSettings): void; getInitialMediaSettingsFor(type: MediaType): MediaSettings; setCurrentTrack(track: MediaInfo, noSettingsSave?: boolean): void; addABRCustomRule(type: string, rulename: string, rule: object): void; removeABRCustomRule(rulename: string): void; removeAllABRCustomRule(): void; getAverageThroughput(type: MediaType): number; retrieveManifest(url: string, callback: (manifest: object | null, error: any) => void): void; addUTCTimingSource(schemeIdUri: string, value: string): void; removeUTCTimingSource(schemeIdUri: string, value: string): void; clearDefaultUTCTimingSources(): void; restoreDefaultUTCTimingSources(): void; setXHRWithCredentialsForType(type: string, value: boolean): void; getXHRWithCredentialsForType(type: string): boolean; getProtectionController(): ProtectionController; attachProtectionController(value: ProtectionController): void; setProtectionData(value: ProtectionDataSet): void; registerLicenseRequestFilter(filter: RequestFilter): void; registerLicenseResponseFilter(filter: ResponseFilter): void; unregisterLicenseRequestFilter(filter: RequestFilter): void; unregisterLicenseResponseFilter(filter: ResponseFilter): void; registerCustomCapabilitiesFilter(filter: CapabilitiesFilter): void; unregisterCustomCapabilitiesFilter(filter: CapabilitiesFilter): void; unregisterFilter(filters: any[], filter: any): void; setCustomInitialTrackSelectionFunction(fn: TrackSelectionFunction): void; resetCustomInitialTrackSelectionFunction(fn: TrackSelectionFunction): void; attachTTMLRenderingDiv(div: HTMLDivElement): void; getCurrentTextTrackIndex(): number; provideThumbnail(time: number, callback: (thumbnail: Thumbnail | null) => void): void; getDashAdapter(): DashAdapter; getOfflineController(): OfflineController; triggerSteeringRequest(): Promise<any>; getCurrentSteeringResponseData(): object; getAvailableBaseUrls(): BaseURL[]; getAvailableLocations(): MpdLocation[]; getSettings(): MediaPlayerSettingClass; updateSettings(settings: MediaPlayerSettingClass): void; resetSettings(): void; reset(): void; destroy(): void; } interface MediaPlayerErrors { MANIFEST_LOADER_PARSING_FAILURE_ERROR_CODE: 10; MANIFEST_LOADER_LOADING_FAILURE_ERROR_CODE: 11; XLINK_LOADER_LOADING_FAILURE_ERROR_CODE: 12; SEGMENT_BASE_LOADER_ERROR_CODE: 15; TIME_SYNC_FAILED_ERROR_CODE: 16; FRAGMENT_LOADER_LOADING_FAILURE_ERROR_CODE: 17; FRAGMENT_LOADER_NULL_REQUEST_ERROR_CODE: 18; URL_RESOLUTION_FAILED_GENERIC_ERROR_CODE: 19; APPEND_ERROR_CODE: 20; REMOVE_ERROR_CODE: 21; DATA_UPDATE_FAILED_ERROR_CODE: 22; CAPABILITY_MEDIASOURCE_ERROR_CODE: 23; CAPABILITY_MEDIAKEYS_ERROR_CODE: 24; DOWNLOAD_ERROR_ID_MANIFEST_CODE: 25; DOWNLOAD_ERROR_ID_SIDX_CODE: 26; DOWNLOAD_ERROR_ID_CONTENT_CODE: 27; DOWNLOAD_ERROR_ID_INITIALIZATION_CODE: 28; DOWNLOAD_ERROR_ID_XLINK_CODE: 29; MANIFEST_ERROR_ID_PARSE_CODE: 31; MANIFEST_ERROR_ID_NOSTREAMS_CODE: 32; TIMED_TEXT_ERROR_ID_PARSE_CODE: 33; MANIFEST_ERROR_ID_MULTIPLEXED_CODE: 34; MEDIASOURCE_TYPE_UNSUPPORTED_CODE: 35; MEDIA_KEYERR_CODE: 100; MEDIA_KEYERR_UNKNOWN_CODE: 101; MEDIA_KEYERR_CLIENT_CODE: 102; MEDIA_KEYERR_SERVICE_CODE: 103; MEDIA_KEYERR_OUTPUT_CODE: 104; MEDIA_KEYERR_HARDWARECHANGE_CODE: 105; MEDIA_KEYERR_DOMAIN_CODE: 106; MEDIA_KEY_MESSAGE_ERROR_CODE: 107; MEDIA_KEY_MESSAGE_NO_CHALLENGE_ERROR_CODE: 108; SERVER_CERTIFICATE_UPDATED_ERROR_CODE: 109; KEY_STATUS_CHANGED_EXPIRED_ERROR_CODE: 110; MEDIA_KEY_MESSAGE_NO_LICENSE_SERVER_URL_ERROR_CODE: 111; KEY_SYSTEM_ACCESS_DENIED_ERROR_CODE: 112; KEY_SESSION_CREATED_ERROR_CODE: 113; MEDIA_KEY_MESSAGE_LICENSER_ERROR_CODE: 114; // MSS errors MSS_NO_TFRF_CODE: 200; MSS_UNSUPPORTED_CODEC_CODE: 201; // Offline errors OFFLINE_ERROR: 11000; INDEXEDDB_QUOTA_EXCEED_ERROR: 11001; INDEXEDDB_INVALID_STATE_ERROR: 11002; INDEXEDDB_NOT_READABLE_ERROR: 11003; INDEXEDDB_NOT_FOUND_ERROR: 11004; INDEXEDDB_NETWORK_ERROR: 11005; INDEXEDDB_DATA_ERROR: 11006; INDEXEDDB_TRANSACTION_INACTIVE_ERROR: 11007; INDEXEDDB_NOT_ALLOWED_ERROR: 11008; INDEXEDDB_NOT_SUPPORTED_ERROR: 11009; INDEXEDDB_VERSION_ERROR: 11010; INDEXEDDB_TIMEOUT_ERROR: 11011; INDEXEDDB_ABORT_ERROR: 11012; INDEXEDDB_UNKNOWN_ERROR: 11013; } interface MediaPlayerEvents { AST_IN_FUTURE: 'astInFuture'; BASE_URLS_UPDATED : 'baseUrlsUpdated'; BUFFER_EMPTY: 'bufferStalled'; BUFFER_LOADED: 'bufferLoaded'; BUFFER_LEVEL_STATE_CHANGED: 'bufferStateChanged'; BUFFER_LEVEL_UPDATED: 'bufferLevelUpdated'; CAN_PLAY: 'canPlay'; CAN_PLAY_THROUGH: 'canPlayThrough'; CAPTION_RENDERED: 'captionRendered'; CAPTION_CONTAINER_RESIZE: 'captionContainerResize'; CONFORMANCE_VIOLATION: 'conformanceViolation'; CUE_ENTER: 'cueEnter'; CUE_EXIT: 'cueExit'; DVB_FONT_DOWNLOAD_ADDED: 'dvbFontDownloadAdded'; DVB_FONT_DOWNLOAD_COMPLETE: 'dvbFontDow