UNPKG

dashjs

Version:

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

1,683 lines (1,199 loc) 180 kB
import { CommonMediaRequest, CommonMediaResponse, RequestInterceptor, ResponseInterceptor } from '@svta/common-media-library/request' export = dashjs; export as namespace dashjs; declare namespace dashjs { /** * Core - Errors */ class Errors extends ErrorsBase { /** * Error code returned when a manifest parsing error occurs */ MANIFEST_LOADER_PARSING_FAILURE_ERROR_CODE: 10; /** * Error code returned when a manifest loading error occurs */ MANIFEST_LOADER_LOADING_FAILURE_ERROR_CODE: 11; /** * Error code returned when a xlink loading error occurs */ XLINK_LOADER_LOADING_FAILURE_ERROR_CODE: 12; /** * Error code returned when no segment ranges could be determined from the sidx box */ SEGMENT_BASE_LOADER_ERROR_CODE: 15; /** * Error code returned when the time synchronization failed */ TIME_SYNC_FAILED_ERROR_CODE: 16; /** * Error code returned when loading a fragment failed */ FRAGMENT_LOADER_LOADING_FAILURE_ERROR_CODE: 17; /** * Error code returned when the FragmentLoader did not receive a request object */ FRAGMENT_LOADER_NULL_REQUEST_ERROR_CODE: 18; /** * Error code returned when the BaseUrl resolution failed */ URL_RESOLUTION_FAILED_GENERIC_ERROR_CODE: 19; /** * Error code returned when the append operation in the SourceBuffer failed */ APPEND_ERROR_CODE: 20; /** * Error code returned when the remove operation in the SourceBuffer failed */ REMOVE_ERROR_CODE: 21; /** * Error code returned when updating the internal objects after loading an MPD failed */ DATA_UPDATE_FAILED_ERROR_CODE: 22; /** * Error code returned when MediaSource is not supported by the browser */ CAPABILITY_MEDIASOURCE_ERROR_CODE: 23; /** * Error code returned when Protected contents are not supported */ CAPABILITY_MEDIAKEYS_ERROR_CODE: 24; /** * Error code returned when loading the manifest failed */ DOWNLOAD_ERROR_ID_MANIFEST_CODE: 25; /** * Error code returned when loading the sidx failed */ DOWNLOAD_ERROR_ID_SIDX_CODE: 26; /** * Error code returned when loading the media content failed */ DOWNLOAD_ERROR_ID_CONTENT_CODE: 27; /** * Error code returned when loading the init segment failed */ DOWNLOAD_ERROR_ID_INITIALIZATION_CODE: 28; /** * Error code returned when loading the XLink content failed */ DOWNLOAD_ERROR_ID_XLINK_CODE: 29; /** * Error code returned when parsing the MPD resulted in a logical error */ MANIFEST_ERROR_ID_PARSE_CODE: 31; /** * Error code returned when no stream (period) has been detected in the manifest */ MANIFEST_ERROR_ID_NOSTREAMS_CODE: 32; /** * Error code returned when something wrong has happened during parsing and appending subtitles (TTML or VTT) */ TIMED_TEXT_ERROR_ID_PARSE_CODE: 33; /** * Error code returned when a 'muxed' media type has been detected in the manifest. This type is not supported */ MANIFEST_ERROR_ID_MULTIPLEXED_CODE: 34; /** * Error code returned when a media source type is not supported */ MEDIASOURCE_TYPE_UNSUPPORTED_CODE: 35; /** * Error code returned when the available Adaptation Sets can not be selected because the corresponding key ids have an invalid key status * @type {number} */ NO_SUPPORTED_KEY_IDS: 36; MANIFEST_LOADER_PARSING_FAILURE_ERROR_MESSAGE: 'parsing failed for '; MANIFEST_LOADER_LOADING_FAILURE_ERROR_MESSAGE: 'Failed loading manifest: '; XLINK_LOADER_LOADING_FAILURE_ERROR_MESSAGE: 'Failed loading Xlink element: '; SEGMENTS_UPDATE_FAILED_ERROR_MESSAGE: 'Segments update failed'; SEGMENTS_UNAVAILABLE_ERROR_MESSAGE: 'no segments are available yet'; SEGMENT_BASE_LOADER_ERROR_MESSAGE: 'error loading segment ranges from sidx'; TIME_SYNC_FAILED_ERROR_MESSAGE: 'Failed to synchronize client and server time'; FRAGMENT_LOADER_NULL_REQUEST_ERROR_MESSAGE: 'request is null'; URL_RESOLUTION_FAILED_GENERIC_ERROR_MESSAGE: 'Failed to resolve a valid URL'; APPEND_ERROR_MESSAGE: 'chunk is not defined'; REMOVE_ERROR_MESSAGE: 'Removing data from the SourceBuffer'; DATA_UPDATE_FAILED_ERROR_MESSAGE: 'Data update failed'; CAPABILITY_MEDIASOURCE_ERROR_MESSAGE: 'mediasource is not supported'; CAPABILITY_MEDIAKEYS_ERROR_MESSAGE: 'mediakeys is not supported'; TIMED_TEXT_ERROR_MESSAGE_PARSE: 'parsing error :'; MEDIASOURCE_TYPE_UNSUPPORTED_MESSAGE: 'Error creating source buffer of type : '; NO_SUPPORTED_KEY_IDS_MESSAGE: 'All possible Adaptation Sets have an invalid key status'; } class ErrorsBase { extend(errors: any, config: any): void; } /** * Core - Events */ class CoreEvents extends EventsBase { ATTEMPT_BACKGROUND_SYNC: 'attemptBackgroundSync'; BUFFERING_COMPLETED: 'bufferingCompleted'; BUFFER_CLEARED: 'bufferCleared'; BYTES_APPENDED_END_FRAGMENT: 'bytesAppendedEndFragment'; BUFFER_REPLACEMENT_STARTED: 'bufferReplacementStarted'; CHECK_FOR_EXISTENCE_COMPLETED: 'checkForExistenceCompleted'; CMSD_STATIC_HEADER: 'cmsdStaticHeader'; CURRENT_TRACK_CHANGED: 'currentTrackChanged'; DATA_UPDATE_COMPLETED: 'dataUpdateCompleted'; INBAND_EVENTS: 'inbandEvents'; INITIAL_STREAM_SWITCH: 'initialStreamSwitch'; INIT_FRAGMENT_LOADED: 'initFragmentLoaded'; INIT_FRAGMENT_NEEDED: 'initFragmentNeeded'; INTERNAL_MANIFEST_LOADED: 'internalManifestLoaded'; ORIGINAL_MANIFEST_LOADED: 'originalManifestLoaded'; LOADING_COMPLETED: 'loadingCompleted'; LOADING_PROGRESS: 'loadingProgress'; LOADING_DATA_PROGRESS: 'loadingDataProgress'; LOADING_ABANDONED: 'loadingAborted'; MANIFEST_UPDATED: 'manifestUpdated'; MEDIA_FRAGMENT_LOADED: 'mediaFragmentLoaded'; MEDIA_FRAGMENT_NEEDED: 'mediaFragmentNeeded'; MEDIAINFO_UPDATED: 'mediaInfoUpdated'; QUOTA_EXCEEDED: 'quotaExceeded'; SEGMENT_LOCATION_BLACKLIST_ADD: 'segmentLocationBlacklistAdd'; SEGMENT_LOCATION_BLACKLIST_CHANGED: 'segmentLocationBlacklistChanged'; SERVICE_LOCATION_BASE_URL_BLACKLIST_ADD: 'serviceLocationBlacklistAdd'; SERVICE_LOCATION_BASE_URL_BLACKLIST_CHANGED: 'serviceLocationBlacklistChanged'; SERVICE_LOCATION_LOCATION_BLACKLIST_ADD: 'serviceLocationLocationBlacklistAdd'; SERVICE_LOCATION_LOCATION_BLACKLIST_CHANGED: 'serviceLocationLocationBlacklistChanged'; SET_FRAGMENTED_TEXT_AFTER_DISABLED: 'setFragmentedTextAfterDisabled'; SET_NON_FRAGMENTED_TEXT: 'setNonFragmentedText'; SOURCE_BUFFER_ERROR: 'sourceBufferError'; STREAMS_COMPOSED: 'streamsComposed'; STREAM_BUFFERING_COMPLETED: 'streamBufferingCompleted'; STREAM_REQUESTING_COMPLETED: 'streamRequestingCompleted'; TEXT_TRACKS_QUEUE_INITIALIZED: 'textTracksQueueInitialized'; TIME_SYNCHRONIZATION_COMPLETED: 'timeSynchronizationComplete'; UPDATE_TIME_SYNC_OFFSET: 'updateTimeSyncOffset'; URL_RESOLUTION_FAILED: 'urlResolutionFailed'; VIDEO_CHUNK_RECEIVED: 'videoChunkReceived'; WALLCLOCK_TIME_UPDATED: 'wallclockTimeUpdated'; XLINK_ELEMENT_LOADED: 'xlinkElementLoaded'; XLINK_READY: 'xlinkReady'; SEEK_TARGET: 'seekTarget'; SETTING_UPDATED_LIVE_DELAY: 'settingUpdatedLiveDelay'; SETTING_UPDATED_LIVE_DELAY_FRAGMENT_COUNT: 'settingUpdatedLiveDelayFragmentCount'; SETTING_UPDATED_CATCHUP_ENABLED: 'settingUpdatedCatchupEnabled'; SETTING_UPDATED_PLAYBACK_RATE_MIN: 'settingUpdatedPlaybackRateMin'; SETTING_UPDATED_PLAYBACK_RATE_MAX: 'settingUpdatedPlaybackRateMax'; SETTING_UPDATED_ABR_ACTIVE_RULES: 'settingUpdatedAbrActiveRules'; SETTING_UPDATED_MAX_BITRATE: 'settingUpdatedMaxBitrate'; SETTING_UPDATED_MIN_BITRATE: 'settingUpdatedMinBitrate'; } class Events extends CoreEvents { } class EventsBase { extend(events: any, config: any): void; } /** * Core */ interface Debug { getLogger(): Logger; setLogTimestampVisible(flag: boolean): void; setCalleeNameVisible(flag: boolean): void; } namespace Debug { const LOG_LEVEL_NONE = 0; const LOG_LEVEL_FATAL = 1; const LOG_LEVEL_ERROR = 2; const LOG_LEVEL_WARNING = 3; const LOG_LEVEL_INFO = 4; const LOG_LEVEL_DEBUG = 5; } 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; getCurrentRepresentation(): object; getCurrentRepresentation(): Representation; getRepresentationForQuality(quality: number): object | null; prepareQualityChange(newRep: Representation): 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 { getAccessibilityForAdaptation(adaptation: object): DescriptorType[]; getAdaptationForId(id: string, manifest: object, periodIndex: number): any; getAdaptationForIndex(index: number, manifest: object, periodIndex: number): any; getAdaptationsForPeriod(voPeriod: Period): AdaptationSet[]; getAdaptationsForType(manifest: object, periodIndex: number, type: string): any[]; getAudioChannelConfigurationForAdaptation(adaptation: object): DescriptorType[]; getAudioChannelConfigurationForRepresentation(adaptation: object): DescriptorType[]; getAvailabilityStartTime(mpd: Mpd): any; getBandwidth(representation: object): number; getBaseURLsFromElement(node: object): BaseURL[]; getBitrateListForAdaptation(realAdaptation: object): { bandwidth: number, width: number, height: number, scanType: string | null, id: string | null }; getCodec(adaptation: object, representationIndex: number, addResolutionInfo: boolean): string; getContentProtectionByAdaptation(adaptation: object): any; getContentProtectionByManifest(manifest: object): any[]; getContentProtectionByPeriod(period: Period): any; getContentSteering(manifest: object): ContentSteering | undefined; getDuration(manifest: object): number; getEndTimeForLastPeriod(voPeriod: Period): number; getEssentialPropertiesForRepresentation(realRepresentation: object): { schemeIdUri: string, value: string } getEventStreamForAdaptationSet(manifest: object, adaptation: object): EventStream[]; getEventStreamForRepresentation(manifest: object, representation: Representation): EventStream[]; getEventStreams(inbandStreams: EventStream[], representation: Representation): EventStream[]; getEventsForPeriod(period: Period): any[]; getFramerate(representation: object): number; getId(manifest: object): string; getIndexForAdaptation(realAdaptation: object, manifest: object, periodIndex: number): number; getIsAudio(adaptation: object): boolean; getIsDynamic(manifest: object): boolean; getIsFragmented(adaptation: object): boolean; getIsImage(adaptation: object): boolean; getIsMuxed(adaptation: object): boolean; getIsText(adaptation: object): boolean; getIsTypeOf(adaptation: object, type: string): boolean; getIsVideo(adaptation: object): boolean; getKID(adaptation: object): any; getLabelsForAdaptation(adaptation: object): any[]; getLanguageForAdaptation(adaptation: object): string; getLoction(manifest: object): MpdLocation | []; getManifestUpdatePeriod(manifest: object, latencyOfLastUpdate?: number): number; getMimeType(adaptation: object): object; getMpd(manifest: object): Mpd; getPeriodId(realPeriod: Period, i: number): string; getProducerReferenceTimesForAdaptation(adaptation: object): any[]; getPublishTime(manifest: object): Date | null; getRealAdaptationFor(voAdaptation: object): object; getRealAdaptations(manifest: object, periodIndex: number): any[]; getRealPeriodForIndex(index: number, manifest: object): any; getRealPeriods(manifest: object): any[]; getRegularPeriods(mpd: Mpd): Period[]; getRepresentationCount(adaptation: object): number; getRepresentationFor(index: number, adaptation: object): object; getRepresentationSortFunction(): (a: object, b: object) => number; getRepresentationsForAdaptation(voAdaptation: object): object[]; getRolesForAdaptation(adaptation: object): DescriptorType[]; getSegmentAlignment(adaptation: object): boolean; getSelectionPriority(realAdaptation: object): number; getServiceDescriptions(manifest: object): serviceDescriptions; getSubSegmentAlignment(adaptation: object): boolean; getSuggestedPresentationDelay(mpd: Mpd): any; getSupplementalPropertiesForAdaptation(adaptation: object): DescriptorType | []; getSupplementalPropertiesForRepresentation(representation: Representation): DescriptorType | []; getUTCTimingSources(manifest: object): any[]; getViewpointForAdaptation(adaptation: object): DescriptorType[]; hasProfile(manifest: object, profile: object): boolean; isPeriodEncrypted(period: any): boolean; processAdaptation(realAdaptation: object): object; setConfig(config: any): 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 DurationMatcher extends BaseMatcher { } export class LangMatcher extends BaseMatcher { } export class NumericMatcher extends BaseMatcher { } /** * Dash - Parser **/ export interface DashParser { getIron(): any; parse(data: any): any; parseXml(data: any): any; } export interface objectiron { run(source: string): void; } /** * Dash - Utils **/ export interface ListSegmentsGetter { getMediaFinishedInformation(representation: Representation): MediaFinishedInformation; getSegmentByIndex(representation: Representation, index: number): any; getSegmentByTime(representation: Representation, requestedTime: number): any; } export interface Round10 { round10(value: number, exp: number): number; } 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; getClientReferenceTime(): 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 ThroughputDictEntry { downloadTimeInMs: number; downloadedBytes: number; latencyInMs: number; serviceLocation: string; value: number; } export interface ThroughputEwmaDictEntry { fastEstimate: number; slowEstimate: number; totalWeight: number; } export interface BaseURL { availabilityTimeComplete: boolean; availabilityTimeOffset: number; dvbPriority: number; dvbWeight: number; queryParams: object; serviceLocation: string; url: string; } export interface ClientDataReporting { adaptationSets: AdaptationSet; adaptationSetsArray: Array<AdaptationSet>; cmcdParameters: CMCDParameters; serviceLocations: any; serviceLocationsArray: Array<any>; } export class CMCDParameters extends DescriptorType { contentID: string; keys: Array<string>; mode: string; schemeIdUri: string; sessionID: string; version: number; } export class ContentProtection extends DescriptorType { cencDefaultKid: any; keyId: any; laUrl: string; pro: any; pssh: any; ref: any; refId: any; robustness: any; init(data: any): void; mergeAttributesFromReference(reference: any): any; } export class ContentSteering { clientRequirement: boolean; defaultServiceLocation: string; defaultServiceLocationArray: string[]; queryBeforeStart: boolean; serverUrl: string; } export class ContentSteeringRequest { constructor(url: any); url: string; } export class ContentSteeringResponse { pathwayClones: object[]; pathwayPriority: string[]; reloadUri: string; ttl: number; version: number; } export class DescriptorType { dvbFontFamily?: string; dvbMimeType?: string; dvbUrl?: string; id?: string; schemeIdUri: string; value?: string; } export interface Event { duration: number; eventStream: EventStream; id: number; messageData: string; parsedMessageData: any; presentationTime: number; presentationTimeDelta: number; type: string; } export interface EventStream { adaptationSet: AdaptationSet | null; period: Period | null; presentationTimeOffset: number; representation: Representation | null; schemeIdUri: string; timescale: number; value: string; } export interface IManifestInfo { availableFrom: Date; duration: number; dvrWindowSize: number; isDynamic: boolean; loadedTime: Date; maxFragmentDuration: number; minBufferTime: number; protocol?: string; serviceDescriptions: serviceDescriptions[] } export interface IAdaptation { ContentProtection: IContentProtection | IContentProtection[]; Role: IRole | IRole[]; SegmentTemplate: ISegmentTemplate | ISegmentTemplate[]; Representation: Representation | Representation[]; id: string; group: number; contentType: string; lang: string; par: string; minBandwidth: number; maxBandwidth: number; maxWidth: number; maxHeight: number; SegmentAlignment: boolean; sar: string; frameRate: number; mimeType: string; startWithSAP: number; } export interface IRole { // same content as UTCTiming ? schemeIdUri: string; value: string; } export interface ISegmentTemplate { SegmentTimeline: ISegmentTimeline | ISegmentTimeline[]; timescale: number; initialization: string; media: string; } export interface ISegmentTimeline { S: ISegmentTimelineProperty | ISegmentTimelineProperty[]; } export interface ISegmentTimelineProperty { d?: number; r?: number; t?: number; } export interface IRepresentation { id: string; bandwidth: number; width: number; height: number; codecs: string; scanType: string; SegmentTemplate: ISegmentTemplate; sar: string; frameRate: number; mimeType: string, startWithSAP: number; ContentProtection: IContentProtection[]; } export interface IContentProtection { keyId: string; schemeIdUri: string; "cenc:default_KID"?: string; value?: string; pssh?: IPssh | IPssh[]; } export interface IPssh { __prefix: string; __text: string; } export class MediaInfo { KID: any | null; accessibility: DescriptorType[] | null; audioChannelConfiguration: DescriptorType[] | null; bitrateList: Bitrate[]; codec: string | null; contentProtection: any | null; essentialProperties: object; id: string | null; index: number | null; isEmbedded: any | null; isFragmented: any | null; isText: boolean; labels: { text: string, lang?: string }[]; lang: string | null; mimeType: string | null; representationCount: number; roles: DescriptorType[] | null; segmentAlignment: boolean; selectionPriority: number; streamInfo: StreamInfo | null; subSegmentAlignment: boolean; supplementalProperties: object; type: MediaType | null; viewpoint: DescriptorType[] | null; } export interface Mpd { availabilityEndTime: number; availabilityStartTime: number | null; manifest: object; maxSegmentDuration: number; mediaPresentationDuration: number; minimumUpdatePeriod: number; publishTime: number | null; suggestedPresentationDelay: number; timeShiftBufferDepth: number; } export class MpdLocation { constructor(url: string, serviceLocation: string | null); url: string; serviceLocation: string | null; queryParams: object; } export class PatchLocation { constructor(url: string, serviceLocation: string, ttl: number); url: string; serviceLocation: string; ttl: number; queryParams: object; } export class PatchOperation { constructor(action: any, xpath: any, value: string); action: any; xpath: any; value: string; position: any | null; getMpdTarget(root: any): any; } export interface Period { duration: number; id: string | null; index: number; isEncrypted: boolean; mpd: Mpd; nextPeriodId: string | null; start: number; } export interface ProducerReferenceTime { UTCTiming: any; applicationSchme: any; id: any; inband: boolean; presentationTime: number; type: 'encoder'; wallClockTime: any; } export interface Representation { absoluteIndex: number; adaptation: AdaptationSet | null; availabilityTimeComplete: boolean; availabilityTimeOffset: number; availableSegmentsNumber: number; bandwidth: number; bitrateInKbit: number; bitsPerPixel: number; codecPrivateData: string | null; codecs: string | null; fragmentDuration: number | null; frameRate: number; height: number; id: string; index: number; indexRange: string | null; initialization: object | null; maxPlayoutRate: number; mediaFinishedInformation: MediaFinishedInformation; mediaInfo: MediaInfo | null; mimeType: string | null; mseTimeOffset: number; pixelsPerSecond: number; presentationTimeOffset: number; qualityRanking: number; range: Range | null; scanType: string; segments: any[]; segmentDuration: number; segmentInfoType: string | null; supplementalProperties: Array<any>; startNumber: number; timescale: number; width: number; endNumber: number | null; } export interface Segment { availabilityEndTime: number; availabilityStartTime: number; duration: number; index: number | null; indexRange: any; media: any; mediaRange: any; mediaStartTime: number; presentationStartTime: number; replacementNumber: number; replacementTime: number; representation: Representation | null; wallStartTime: number; } export class SimpleXPath { constructor(selector: any); } export class StreamInfo { duration: number; id: string; index: number; isEncrypted: boolean; isLast: boolean; manifestInfo: IManifestInfo; start: number; } export class UTCTiming { schemeIdUri: string; value: string; } export interface ThroughputDictValue { downloadTimeInMs: number, downloadedBytes: number, latencyInMs: number serviceLocation: string, value: number, } /** * Dash **/ export interface DashAdapter { applyPatchToManifest(manifest: object, patch: object): void; areMediaInfosEqual(mInfoOne: MediaInfo, mInfoTwo: MediaInfo): boolean; getMainAdaptationForType(periodIndex: number, type: MediaType, streamInfo: object): IAdaptation | null; getAllMediaInfoForType(streamInfo: object, type: MediaType, externalManifest?: object | null): any[]; getAvailabilityStartTime(externalManifest?: object): number; getBandwidthForRepresentation(representationId: string, periodIdx: number): number; getBaseURLsFromElement(node: object): BaseURL[]; getCodec(adaptation: object, representationIndex: number, addResolutionInfo: boolean): string; getContentSteering(manifest: object): object; getDuration(externalManifest?: object): number; getEssentialPropertiesAdaptationSet(adaptationSet: AdaptationSet): object | []; getEssentialPropertiesForRepresentation(representation: Representation): any[]; getEvent(eventBox: object, eventStreams: object, mediaStartTime: number, voRepresentation: object): null | Event; getEventsFor(info: object, voRepresentation: object): Array<Event>; getFramerate(representation: object): number; getIndexForRepresentation(representationId: string, periodIdx: number): number; getIsDVB(manifest: object): boolean; getIsDynamic(externalManifest?: object): boolean; getIsMain(adaptation: object): boolean; getIsPatch(manifest: object): boolean; getIsTextTrack(adaptation: object): boolean; getIsTypeOf(adaptation: object, type: string): boolean; getLocation(manifest: object): MpdLocation[]; getManifestUpdatePeriod(manifest: object, latencyOfLastUpdate?: number): number; getMediaInfoForType(streamInfo: object, type: MediaType): MediaInfo | null; getMpd(externalManifest?: object): Mpd; getPatchLocation(manifest: object): PatchLocation[]; getPeriodById(id: string): Period | null; getProducerReferenceTime(streamInfo: StreamInfo, mediaInfo: MediaInfo): object | []; getPublishTime(manifest: object): number | null; getRealAdaptation(streamInfo: StreamInfo, mediaInfo: MediaInfo): object; getRealPeriodByIndex(index: number): object; getRegularPeriods(externalManifest?: object): any[]; getRepresentationSortFunction(): (a: object, b: object) => number; getStreamsInfo(externalManifest: object, maxStreamsInfo: number): Array<any>; getSuggestedPresentationDelay(): string; getSupplementalCodex(representation: Representation): Array<any>; getUTCTimingSources(): any[]; getVoRepresentation(mediaInfo: MediaInfo): Representation[]; isPatchValid(manifest: object, patch: object): boolean; reset(): void; } export interface DashHandler { getCurrentIndex(): number; getInitRequest(mediaInfo: MediaInfo, representation: Representation): FragmentRequest | null; getNextSegmentRequest(mediaInfo: MediaInfo, representation: Representation): FragmentRequest | null; getNextSegmentRequestIdempotent(mediaInfo: MediaInfo, representation: Representation): FragmentRequest | null; getSegmentRequestForTime(mediaInfo: MediaInfo, representation: Representation, time: number): FragmentRequest | null; getStreamId(): string; getStreamInfo(): StreamInfo; getType(): string; getValidTimeAheadOfTargetTime(time: number, mediaInfo: MediaInfo, representation: Representation, targetThreshold: number): number; initialize(isDynamic: boolean): void; isLastSegmentRequested(representation: Representation, bufferingTime: number): boolean; repeatSegmentRequest(mediaInfo: MediaInfo, representation: Representation): FragmentRequest | null; reset(): void; } export interface DashMetrics { addBufferLevel(mediaType: MediaType, t: number, level: number): void; addBufferState(mediaType: MediaType, state: string, target: number): void; addDVBErrors(errors: object): void; addDVRInfo(mediaType: MediaType, currentTime: Date, mpd: Mpd, range: Range): void; addDroppedFrames(quality: number): void; addHttpRequest(request: HTTPRequest, responseURL: string, responseStatus: number, responseHeaders: object, traces: object): void; addManifestUpdate(request: ManifestUpdate): void; addManifestUpdateRepresentationInfo(representation: Representation, mediaType: MediaType): void; addManifestUpdateStreamInfo(streamInfo: StreamInfo): void; addPlayList(): void; addRepresentationSwitch(mediaType: MediaType, t: Date, mt: Date, to: string, lto: string): void; addRequestsQueue(mediaType: MediaType, loadingRequests: any[], executedRequests: any[]): void; addSchedulingInfo(request: SchedulingInfo, state: string): void; clearAllCurrentMetrics(): void; createPlaylistMetrics(mediaStartTime: number, startReason: string): void; createPlaylistTraceMetrics(representationId: number, mediaStartTime: number, speed: number): void; getCurrent(metrics: MetricsList, metricName: string): DroppedFrames; getCurrentBufferLevel(type: MediaType): number; getCurrentBufferState(type: MediaType): IBufferState; getCurrentDVRInfo(type?: MediaType): DVRInfo; getCurrentDroppedFrames(): DroppedFrames; getCurrentHttpRequest(type: MediaType): object; getCurrentManifestUpdate(): any; getCurrentRepresentationSwitch(type: MediaType): ICurrentRepresentationSwitch; getCurrentSchedulingInfo(type: MediaType): object; getHttpRequests(type: MediaType): object[]; getLatestFragmentRequestHeaderValueByID(id: string): string; getLatestMPDRequestHeaderValueByID(type: MediaType, id: string): string; pushPlaylistTraceMetrics(endTime: number, reason: string): void; updateManifestUpdateInfo(updateFields: any[]): void; updatePlayListTraceMetrics(traceToUpdate: object): void; } export interface SegmentBaseLoader { initialize(): void; loadInitialization(representation: Representation, mediaType: MediaType): Promise<any>; loadSegments(representation: Representation, mediaType: MediaType, range: Range): Promise<any>; reset(): any; setConfig(config: object): void; } export interface WebSegmentBaseLoader { initialize(): void; loadInitialization(representation: Representation, mediaType: MediaType): Promise<any>; loadSegments(representation: Representation, mediaType: MediaType, range: Range): Promise<any>; reset(): any; setConfig(config: object): void; } /** * MSS - Errors **/ export interface MssError extends ErrorsBase { MSS_NO_TFRF_CODE: 200; MSS_NO_TFRF_MESSAGE: 'Missing tfrf in live media segment'; MSS_UNSUPPORTED_CODEC_CODE: 201; MSS_UNSUPPORTED_CODEC_MESSAGE: 'Unsupported codec'; } /** * MSS - Parser **/ export interface MssParser { getIron(): null; parse(data: any): object; reset(): void; setup(): void; } /** * MSS **/ export interface MssFragmentInfoController { controllerType: 'MssFragmentInfoController'; fragmentInfoLoaded(e: object): void; getType(): string; initialize(): void; reset(): void; start(): void; } export interface MssFragmentMoofProcessor { convertFragment(e: object, streamProcessor: any): void; getType(): string; updateSegmentList(e: object, streamProcessor: any): void; } export interface MssFragmentMoovProcessor { generateMoov(rep: Representation): ArrayBuffer; } export interface MssFragmentProcessor { generateMoov(rep: Representation): ArrayBuffer; processFragment(e: object, streamProcessor: any): void; } export interface MssHandler { createMssFragmentProcessor(): void; createMssParser(): void; registerEvents(): void; reset(): void; } /** * Offline - Constants **/ class OfflineConstants { OFFLINE_SCHEME: 'offline_indexeddb'; OFFLINE_STATUS_CREATED: 'created'; OFFLINE_STATUS_ERROR: 'error'; OFFLINE_STATUS_FINISHED: 'finished'; OFFLINE_STATUS_STARTED: 'started'; OFFLINE_STATUS_STOPPED: 'stopped'; OFFLINE_URL_REGEX: RegExp; } /** * Offline - Controllers */ export interface OfflineRecord { id: string; originalUrl: string; progress: number; status: string; url: string; } interface OfflineController { createRecord(manifestURL: string): Promise<string>; deleteRecord(id: string): void; getAllRecords(): OfflineRecord[]; getRecordProgression(id: string): number; loadRecordsFromStorage(): Promise<void>; reset(): void; resetRecords(): void; resumeRecord(id: string): void; startRecord(id: string, mediaInfos: MediaInfo[]): void; stopRecord(id: string): void; } interface OfflineStoreController { createFragmentStore(manifestId: number | string, storeName: string): void; createOfflineManifest(manifest: object): object; deleteDownloadById(manifestId: number | string): object; getAllManifests(): object; getCurrentHigherManifestId(): object; getManifestById(manifestId: number | string): object; getRepresentationCurrentState(manifestId: number | string, representationId: number | string): object; saveSelectedRepresentations(manifestId: number | string, selected: Representation): object; setDownloadingStatus(manifestId: number | string, status: any): object; setRepresentationCurrentState(manifestId: number | string, representationId: number | string, state: any): object; storeFragment(manifestId: number | string, fragmentId: number | string, fragmentData: any): object; updateOfflineManifest(manifest: object): object; } /** * Offline - Errors */ export class OfflineErrors extends ErrorsBase { /** * Error code returned when an error occurs in offline module */ OFFLINE_ERROR: 11000; // Based upon https://developer.mozilla.org/fr/docs/Web/API/DOMException 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; } export class OfflineEvents extends EventsBase { /** * Triggered when all mediaInfo has been loaded * @event OfflineEvents#OFFLINE_RECORD_LOADEDMETADATA */ OFFLINE_RECORD_LOADEDMETADATA: 'public_offlineRecordLoadedmetadata'; /** * Triggered when a record is initialized and download is started * @event OfflineEvents#OFFLINE_RECORD_STARTED */ OFFLINE_RECORD_STARTED: 'public_offlineRecordStarted'; /** * Triggered when the user stop downloading a record * @event OfflineEvents#OFFLINE_RECORD_STOPPED */ OFFLINE_RECORD_STOPPED: 'public_offlineRecordStopped'; /** * Triggered when all record has been downloaded * @event OfflineEvents#OFFLINE_RECORD_FINISHED */ OFFLINE_RECORD_FINISHED: 'public_offlineRecordFinished'; } /** * Offline - Net */ export class IndexDBOfflineLoader { abort(): void; config: object | {}; load(config: object | {}): void; } /** * Offline - Storage */ export class IndexDBStore { createFragmentStore(storeName: string): void; deleteDownloadById(manifestId: number): Promise<string | any>; dropAll(): Promise<any>; dropFragmentStore(storeName: string): void; getAllManifests(): Promise<Object[] | String | Error>; getCurrentHigherManifestId(): Promise<number>; getFragmentByKey(manifestId: number, key: number): Promise<any>; getManifestById(id: number): Promise<Object[] | String | Error>; getRepresentationCurrentState(manifestId: number, state: number): Promise<number | Error>; saveSelectedRepresentation(manifest: object, selected: object): Promise<string | Error>; setDownloadingStatus(manifestId: number, newStatus: number): Promise<string | Error>; setRepresentationCurrentState(manifestId: number, representationId: string, state: number): Promise<string | Error>; storeFragment(manifestI: number, fragmentId: string, fragmentData: object): Promise<string | Error>; storeManifest(manifest: object): Object[]; updateManifest(manifest: object): Promise<Object[] | Error>; } /** * Offline - Parser */ export class OfflineIndexDBManifestParser { config: object; parse(XMLDoc: string, representation: object): Promise<any>; } export class OfflineUrlUtils { getRegex(): RegExp | undefined; isRelative(): boolean; removeHostName(url: string): string; resolve(url: string, baseUrl: string): string; } /** * Offline - Vo */ export class OfflineDownload { id: object; originalUrl: object; progress: object; status: object; url: object; } /** * Offline */ export interface OfflineDownload { config: object | {}; deleteDownload(): void; downloadFromUrl(url: string): object; getDownloadProgression(): number; getId(): number; getManifestUrl(): string; getMediaInfos(): void; getStatus(): number; initDownload(): void; isDownloading(): boolean; reset(): void; resetDownload(): void; resumeDownload(): void; setInitialState(state: object): void; startDownload(mediaInfos: MediaInfo[]): any; stopDownload(): void; } export class OfflineStream { getMediaInfos(): MediaInfo[]; getStreamId(): string; getStreamInfo(): StreamInfo; initialize(initStreamInfo: StreamInfo): void; initializeAllMediaInfoList(mediaInfoList: object): void; reset(): void; startOfflineStreamProcessors(): void; stopOfflineStreamProcessors(): void; } export class OfflineStreamProcessor { config: object | void; getAvailableSegmentsNumber(): number; getMediaInfo(): MediaInfo; getRepresentationController(): RepresentationController; getRepresentationId(): number | string; getType(): any; initialize(_mediaInfo: MediaInfo): void; isUpdating(): boolean; removeExecutedRequestsBeforeTime(time: any): void; reset(): void; start(): void; stop(): void; } export interface Bitrate { bandwidth?: number; height?: number; id?: string; scanType?: string; width?: number; } export type MediaType = 'video' | 'audio' | 'text' | 'image'; export type ThroughputCalculationModes = 'throughputCalculationModeEwma' | 'throughputCalculationModeZlema' | 'throughputCalculationModeArithmeticMean' | 'throughputCalculationModeByteSizeWeightedArithmeticMean' | 'throughputCalculationModeDateWeightedArithmeticMean' | 'throughputCalculationModeHarmonicMean' | 'throughputCalculationModeByteSizeWeightedHarmonicMean' | 'throughputCalculationModeDateWeightedHarmonicMean' ; export type LowLatencyDownloadTimeCalculationModes = 'lowLatencyDownloadTimeCalculationModeMoofParsing' | 'lowLatencyDownloadTimeCalculationModeDownloadedData' | 'lowLatencyDownloadTimeCalculationModeAast'; 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, cacheInitSegments?: boolean, applyServiceDescription?: boolean, applyProducerReferenceTime?: boolean, applyContentSteering?: boolean, enableManifestDurationMismatchFix?: boolean, parseInbandPrft?: boolean, enableManifestTimescaleMismatchFix?: boolean, capabilities?: { filterUnsupportedEssentialProperties?: boolean, supportedEssentialProperties?: [ { schemeIdUri?: string, value?: RegExp } ], useMediaCapabilitiesApi?: boolean, filterHDRMetadataFormatEssentialProperties?: boolean, filterVideoColorimetryEssentialProperties?: boolean }, events?: { eventControllerRefreshDelay?: number, deleteEventMessageDataTimeout?: number } timeShiftBuffer?: { calcFromSegmentTimeline?: boolean fallbackToSegmentTimeline?: boolean }, metrics?: { maxListDepth?: number }, delay?: { liveDelayFragmentCount?: number, liveDelay?: number, useSuggestedPresentationDelay?: boolean }, protection?: { keepProtectionMediaKeys?: boolean, ignoreEmeEncryptedEvent?: boolean, detectPlayreadyMessageFormat?: boolean, ignoreKeyStatuses?: boolean, }, buffer?: { enableSeekDecorrelationFix?: boolean, fastSwitchEnabled?: boolean, flushBufferAtT