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
TypeScript
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