UNPKG

rx-player

Version:
935 lines 36.2 kB
/** * Copyright 2015 CANAL+ Group * * Licensed under the Apache License, Version 2.0 (the "License");publicapi * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * This file defines the public API for the RxPlayer. * It also starts the different sub-parts of the player on various API calls. */ import type { IMediaElement } from "../../compat/browser_compatibility_types"; import type { ISegmentSinkMetrics } from "../../core/segment_sinks/segment_sinks_store"; import type { IInbandEvent, IBufferType } from "../../core/types"; import type { IErrorCode, IErrorType } from "../../errors"; import type { IFeature } from "../../features"; import type { IAdaptationMetadata, IManifestMetadata, IPeriodMetadata, IRepresentationMetadata } from "../../manifest"; import type { IAudioRepresentation, IAudioTrack, IAudioTrackSetting, IAudioTrackSwitchingMode, IAvailableAudioTrack, IAvailableTextTrack, IAvailableVideoTrack, IBrokenRepresentationsLockContext, IConstructorOptions, IKeySystemConfigurationOutput, IKeySystemOption, ILoadVideoOptions, ILockedAudioRepresentationsSettings, ILockedVideoRepresentationsSettings, ITrackUpdateEventPayload, IRepresentationListUpdateContext, IPeriod, IPeriodChangeEvent, IPlayerError, IPlayerState, IPositionUpdate, IStreamEvent, ITextTrack, IVideoRepresentation, ITextTrackSetting, IVideoTrack, IVideoTrackSetting, IModeInformation, IWorkerSettings, IThumbnailTrackInfo, IThumbnailRenderingOptions } from "../../public_types"; import type { IThumbnailResponse } from "../../transports"; import type { IListener } from "../../utils/event_emitter"; import EventEmitter from "../../utils/event_emitter"; import type Logger from "../../utils/logger"; import TaskCanceller from "../../utils/task_canceller"; import type { ContentInitializer } from "../init"; import type { IMediaElementTracksStore } from "../tracks_store"; import TracksStore from "../tracks_store"; /** * @class Player * @extends EventEmitter */ declare class Player extends EventEmitter<IPublicAPIEvent> { /** Current version of the RxPlayer. */ static version: string; /** Current version of the RxPlayer. */ readonly version: string; /** * Store all video elements currently in use by an RxPlayer instance. * This is used to check that a video element is not shared between multiple instances. * Use of a WeakSet ensure the object is garbage collected if it's not used anymore. */ private static _priv_currentlyUsedVideoElements; /** * Media element attached to the RxPlayer. * Set to `null` when the RxPlayer is disposed. */ videoElement: IMediaElement | null; /** Logger the RxPlayer uses. */ readonly log: Logger; /** * Current state of the RxPlayer. * Please use `getPlayerState()` instead. */ state: IPlayerState; /** * Emit when the the RxPlayer is not needed anymore and thus all resources * used for its normal functionment can be freed. * The player will be unusable after that. */ private readonly _destroyCanceller; /** * Contains `true` when the previous content is cleaning-up, `false` when it's * done. * A new content cannot be launched until it stores `false`. */ private readonly _priv_contentLock; /** * The speed that should be applied to playback. * Used instead of videoElement.playbackRate to allow more flexibility. */ private readonly _priv_speed; /** Store buffer-related options used needed when initializing a content. */ private readonly _priv_bufferOptions; /** Information on the current bitrate settings. */ private readonly _priv_bitrateInfos; private _priv_worker; /** * Current fatal error which STOPPED the player. * `null` if no fatal error was received for the current or last content. */ private _priv_currentError; /** * Information about the current content being played. * `null` when no content is currently loading or loaded. */ private _priv_contentInfos; /** If `true` trickMode video tracks will be chosen if available. */ private _priv_preferTrickModeTracks; /** Refer to last picture in picture event received. */ private _priv_pictureInPictureRef; /** Store wanted configuration for the `videoResolutionLimit` option. */ private readonly _priv_videoResolutionLimit; /** Store wanted configuration for the `throttleVideoBitrateWhenHidden` option. */ private readonly _priv_throttleVideoBitrateWhenHidden; /** * Store last state of various values sent as events, to avoid re-triggering * them multiple times in a row. * * All those events are linked to the content being played and can be cleaned * on stop. */ private _priv_contentEventsMemory; /** * Information that can be relied on once `reload` is called. * It should refer to the last content being played. */ private _priv_reloadingMetadata; /** * Store last value of autoPlay, from the last load or reload. */ private _priv_lastAutoPlay; /** All possible Error types emitted by the RxPlayer. */ static get ErrorTypes(): Record<IErrorType, IErrorType>; /** All possible Error codes emitted by the RxPlayer. */ static get ErrorCodes(): Record<IErrorCode, IErrorCode>; /** * Current log level. * Update current log level. * Should be either (by verbosity ascending): * - "NONE" * - "ERROR" * - "WARNING" * - "INFO" * - "DEBUG" * Any other value will be translated to "NONE". */ static get LogLevel(): string; static set LogLevel(logLevel: string); /** * Current log format. * Should be either (by verbosity ascending): * - "standard": Regular log messages. * - "full": More verbose format, including a timestamp and a namespace. * Any other value will be translated to "standard". */ static get LogFormat(): string; static set LogFormat(format: string); /** * Add feature(s) to the RxPlayer. * @param {Array.<Object>} featureList - Features wanted. */ static addFeatures(featureList: IFeature[]): void; /** * Register the video element to the set of elements currently in use. * @param videoElement the video element to register. * @throws Error - Throws if the element is already used by another player instance. */ private static _priv_registerVideoElement; /** * Deregister the video element of the set of elements currently in use. * @param videoElement the video element to deregister. */ static _priv_deregisterVideoElement(videoElement: IMediaElement): void; /** * @constructor * @param {Object} options */ constructor(options?: IConstructorOptions); /** * TODO returns promise? * @param {Object} workerSettings */ attachWorker(workerSettings: IWorkerSettings): Promise<void>; /** * Returns information on which "mode" the RxPlayer is running for the current * content (e.g. main logic running in a WebWorker or not, are we in * directfile mode...). * * Returns `null` if no content is loaded. * @returns {Object|null} */ getCurrentModeInformation(): IModeInformation | null; /** * Register a new callback for a player event event. * * @param {string} evt - The event to register a callback to * @param {Function} fn - The callback to call as that event is triggered. * The callback will take as argument the eventual payload of the event * (single argument). */ addEventListener<TEventName extends keyof IPublicAPIEvent>(evt: TEventName, fn: IListener<IPublicAPIEvent, TEventName>): void; /** * Stop the playback for the current content. */ stop(): void; /** * Free the resources used by the player. * /!\ The player cannot be "used" anymore after this method has been called. */ dispose(): void; /** * Load a new video. * @param {Object} opts */ loadVideo(opts: ILoadVideoOptions): void; /** * Reload the last loaded content. * @param {Object} reloadOpts */ reload(reloadOpts?: { reloadAt?: { position?: number; relative?: number; }; keySystems?: IKeySystemOption[]; autoPlay?: boolean; }): void; createDebugElement(element: HTMLElement): { dispose(): void; }; /** * Returns an array decribing the various thumbnail tracks that can be * encountered at the wanted time or Period. * @param {Object} arg * @param {number|undefined} [arg.time] - The position to check for thumbnail * tracks, in seconds. * @param {string|undefined} [arg.periodId] - The Period to check for * thumbnail tracks. * If not set and if `arg.time` is also not set, the current Period will be * considered. * @returns {Array.<Object>} */ getAvailableThumbnailTracks({ time, periodId, }?: { time?: number | undefined; periodId?: string | undefined; }): IThumbnailTrackInfo[]; /** * Render inside the given `container` the thumbnail corresponding to the * given time. * * If no thumbnail is available at that time or if the RxPlayer does not succeed * to load or render it, reject the corresponding Promise and remove the * potential previous thumbnail from the container. * * If a new `renderThumbnail` call is made with the same `container` before it * had time to finish, the Promise is also rejected but the previous thumbnail * potentially found in the container is untouched. * * @param {Object|undefined} options * @returns {Promise} */ renderThumbnail(options: IThumbnailRenderingOptions): Promise<void>; /** * From given options, initialize content playback. * @param {Object} options */ private _priv_initializeContentPlayback; /** * Returns fatal error if one for the current content. * null otherwise. * @returns {Object|null} - The current Error (`null` when no error). */ getError(): Error | null; /** * Returns the media DOM element used by the player. * You should not its HTML5 API directly and use the player's method instead, * to ensure a well-behaved player. * @returns {HTMLMediaElement|null} - The HTMLMediaElement used (`null` when * disposed) */ getVideoElement(): HTMLMediaElement | null; /** * Returns the player's current state. * @returns {string} - The current Player's state */ getPlayerState(): string; /** * Returns true if a content is loaded. * @returns {Boolean} - `true` if a content is loaded, `false` otherwise. */ isContentLoaded(): boolean; /** * Returns true if the player is buffering. * @returns {Boolean} - `true` if the player is buffering, `false` otherwise. */ isBuffering(): boolean; /** * Returns the play/pause status of the player : * - when `LOADING` or `RELOADING`, returns the scheduled play/pause condition * for when loading is over, * - in other states, returns the `<video>` element .paused value, * - if the player is disposed, returns `true`. * @returns {Boolean} - `true` if the player is paused or will be after loading, * `false` otherwise. */ isPaused(): boolean; /** * Returns true if both: * - a content is loaded * - the content loaded is a live content * @returns {Boolean} - `true` if we're playing a live content, `false` otherwise. */ isLive(): boolean; /** * Returns `true` if trickmode playback is active (usually through the usage * of the `setPlaybackRate` method), which means that the RxPlayer selects * "trickmode" video tracks in priority. * @returns {Boolean} */ areTrickModeTracksEnabled(): boolean; /** * Returns the URL(s) of the currently considered Manifest, or of the content for * directfile content. * @returns {Array.<string>|undefined} - Current URL. `undefined` if not known * or no URL yet. */ getContentUrls(): string[] | undefined; /** * Update URL of the content currently being played (e.g. DASH's MPD). * @param {Array.<string>|undefined} urls - URLs to reach that content / * Manifest from the most prioritized URL to the least prioritized URL. * @param {Object|undefined} [params] * @param {boolean} params.refresh - If `true` the resource in question * (e.g. DASH's MPD) will be refreshed immediately. */ updateContentUrls(urls: string[] | undefined, params?: { refresh?: boolean; } | undefined): void; /** * Returns the video duration, in seconds. * NaN if no video is playing. * @returns {Number} */ getMediaDuration(): number; /** * Returns in seconds the difference between: * - the end of the current contiguous loaded range. * - the current time * @returns {Number} */ getCurrentBufferGap(): number; /** * Get the current position, in s, in wall-clock time. * That is: * - for live content, get a timestamp, in s, of the current played content. * - for static content, returns the position from beginning in s. * * If you do not know if you want to use this method or getPosition: * - If what you want is to display the current time to the user, use this * one. * - If what you want is to interact with the player's API or perform other * actions (like statistics) with the real player data, use getPosition. * * @returns {Number} */ getWallClockTime(): number; /** * Get the current position, in seconds, of the video element. * * If you do not know if you want to use this method or getWallClockTime: * - If what you want is to display the current time to the user, use * getWallClockTime. * - If what you want is to interact with the player's API or perform other * actions (like statistics) with the real player data, use this one. * * @returns {Number} */ getPosition(): number; /** * Returns the last stored content position, in seconds. * * @returns {number|undefined} */ getLastStoredContentPosition(): number | undefined; /** * Returns the current playback rate at which the video plays. * @returns {Number} */ getPlaybackRate(): number; /** * Update the playback rate of the video. * * This method's effect is persisted from content to content, and can be * called even when no content is playing (it will still have an effect for * the next contents). * * If you want to reverse effects provoked by `setPlaybackRate` before playing * another content, you will have to call `setPlaybackRate` first with the * default settings you want to set. * * As an example, to reset the speed to "normal" (x1) speed and to disable * trickMode video tracks (which may have been enabled by a previous * `setPlaybackRate` call), you can call: * ```js * player.setPlaybackRate(1, { preferTrickModeTracks: false }); * ``` * * -- * * This method can be used to switch to or exit from "trickMode" video tracks, * which are tracks specifically defined to mimic the visual aspect of a VCR's * fast forward/rewind feature, by only displaying a few video frames during * playback. * * This behavior is configurable through the second argument, by adding a * property named `preferTrickModeTracks` to that object. * * You can set that value to `true` to switch to trickMode video tracks when * available, and set it to `false` when you want to disable that logic. * Note that like any configuration given to `setPlaybackRate`, this setting * is persisted through all future contents played by the player. * * If you want to stop enabling trickMode tracks, you will have to call * `setPlaybackRate` again with `preferTrickModeTracks` set to `false`. * * You can know at any moment whether this behavior is enabled by calling * the `areTrickModeTracksEnabled` method. This will only means that the * RxPlayer will select in priority trickmode video tracks, not that the * currently chosen video tracks is a trickmode track (for example, some * contents may have no trickmode tracks available). * * If you want to know about the latter instead, you can call `getVideoTrack` * and/or listen to `videoTrackChange` events. The track returned may have an * `isTrickModeTrack` property set to `true`, indicating that it is a * trickmode track. * * Note that switching to or getting out of a trickmode video track may * lead to the player being a brief instant in a `"RELOADING"` state (notified * through `playerStateChange` events and the `getLoadedContentState` method). * When in that state, a black screen may be displayed and multiple RxPlayer * APIs will not be usable. * * @param {Number} rate * @param {Object} opts */ setPlaybackRate(rate: number, opts?: { preferTrickModeTracks?: boolean; }): void; /** * Returns video Representation currently considered for the current Period. * * Returns `null` if no video track is playing for the current Period. * * Returns `undefined` either when are not currently playing any Period or * when we don't know which Representation is playing. * @returns {Object|null|undefined} */ getVideoRepresentation(): IVideoRepresentation | null | undefined; /** * Returns audio Representation currently considered for the current Period. * * Returns `null` if no audio track is playing for the current Period. * * Returns `undefined` either when are not currently playing any Period or * when we don't know which Representation is playing. * @returns {Object|null|undefined} */ getAudioRepresentation(): IAudioRepresentation | null | undefined; /** * Play/Resume the current video. * @returns {Promise} */ play(): Promise<void>; /** * Pause the current video. */ pause(): void; /** * Seek to a given absolute position. * @param {Number|Object} time * @returns {Number} - The time the player has seek to */ seekTo(time: number | { relative: number; } | { position: number; } | { wallClockTime: number; }): number; /** * Returns the current player's audio volume on the media element. * From 0 (no audio) to 1 (maximum volume). * @returns {Number} */ getVolume(): number; /** * Set the player's audio volume. From 0 (no volume) to 1 (maximum volume). * @param {Number} volume */ setVolume(volume: number): void; /** * Returns `true` if audio is currently muted. * @returns {Boolean} */ isMute(): boolean; /** * Mute audio. */ mute(): void; /** * Unmute audio. */ unMute(): void; /** * Set the max buffer size for the buffer behind the current position. * Every buffer data before will be removed. * @param {Number} depthInSeconds */ setMaxBufferBehind(depthInSeconds: number): void; /** * Set the max buffer size for the buffer behind the current position. * Every buffer data before will be removed. * @param {Number} depthInSeconds */ setMaxBufferAhead(depthInSeconds: number): void; /** * Set the max buffer size for the buffer ahead of the current position. * The player will stop downloading chunks when this size is reached. * @param {Number} sizeInSeconds */ setWantedBufferAhead(sizeInSeconds: number): void; /** * Set the max buffer size the buffer should take in memory * The player . will stop downloading chunks when this size is reached. * @param {Number} sizeInKBytes */ setMaxVideoBufferSize(sizeInKBytes: number): void; /** * Returns the max buffer size for the buffer behind the current position. * @returns {Number} */ getMaxBufferBehind(): number; /** * Returns the max buffer size for the buffer behind the current position. * @returns {Number} */ getMaxBufferAhead(): number; /** * Returns the max buffer size for the buffer ahead of the current position. * @returns {Number} */ getWantedBufferAhead(): number; /** * Returns the max buffer memory size for the buffer in kilobytes * @returns {Number} */ getMaxVideoBufferSize(): number; getCurrentPeriod(): IPeriod | null; /** * Returns both the name of the key system (e.g. `"com.widevine.alpha"`) and * the `MediaKeySystemConfiguration` currently associated to the * HTMLMediaElement linked to the RxPlayer. * * Returns `null` if no such capabilities is associated or if unknown. * @returns {Object|null} */ getKeySystemConfiguration(): IKeySystemConfigurationOutput | null; /** * Returns the list of available Periods for which the current audio, video or * text track can now be changed. * @returns {Array.<Object>} */ getAvailablePeriods(): IPeriod[]; /** * Returns every available audio tracks for a given Period - or the current * one if no `periodId` is given. * @param {string|Object|undefined} [arg] * @returns {Array.<Object>} */ getAvailableAudioTracks(arg?: string | undefined | { periodId: string; filterPlayableRepresentations: boolean; }): IAvailableAudioTrack[]; /** * Returns every available text tracks for a given Period - or the current * one if no `periodId` is given. * @param {string|undefined} [periodId] * @returns {Array.<Object>} */ getAvailableTextTracks(periodId?: string | undefined): IAvailableTextTrack[]; /** * Returns every available video tracks for the current Period. * @param {string|Object|undefined} [arg] * @returns {Array.<Object>} */ getAvailableVideoTracks(arg?: string | undefined | { periodId: string; filterPlayableRepresentations: boolean; }): IAvailableVideoTrack[]; /** * Returns currently chosen audio language for the current Period. * @param {string|Object|undefined} [arg] * @returns {Object|null|undefined} */ getAudioTrack(arg?: string | undefined | { periodId: string; filterPlayableRepresentations: boolean; }): IAudioTrack | null | undefined; /** * Returns currently chosen subtitle for the current Period. * @param {string|undefined} [periodId] * @returns {Object|null|undefined} */ getTextTrack(periodId?: string | undefined): ITextTrack | null | undefined; /** * Returns currently chosen video track for the current Period. * @param {string|Object|undefined} [arg] * @returns {Object|null|undefined} */ getVideoTrack(arg?: string | undefined | { periodId: string; filterPlayableRepresentations: boolean; }): IVideoTrack | null | undefined; /** * Update the audio language for the current Period. * @param {string | object} arg * @throws Error - the current content has no TracksStore. * @throws Error - the given id is linked to no audio track. */ setAudioTrack(arg: string | IAudioTrackSetting): void; /** * Update the text language for the current Period. * @param {string | Object} arg * @throws Error - the current content has no TracksStore. * @throws Error - the given id is linked to no text track. */ setTextTrack(arg: string | ITextTrackSetting): void; /** * Disable subtitles for the current content. * @param {string|undefined} [periodId] */ disableTextTrack(periodId?: string | undefined): void; /** * Update the video track for the current Period. * @param {string | Object} arg * @throws Error - the current content has no TracksStore. * @throws Error - the given id is linked to no video track. */ setVideoTrack(arg: string | IVideoTrackSetting): void; /** * Disable video track for the current content. * @param {string|undefined} [periodId] */ disableVideoTrack(periodId?: string | undefined): void; lockVideoRepresentations(arg: string[] | ILockedVideoRepresentationsSettings): void; lockAudioRepresentations(arg: string[] | ILockedAudioRepresentationsSettings): void; getLockedVideoRepresentations(periodId?: string | undefined): string[] | null; getLockedAudioRepresentations(periodId?: string | undefined): string[] | null; unlockVideoRepresentations(periodId?: string | undefined): void; unlockAudioRepresentations(periodId?: string | undefined): void; /** * Get minimum seek-able position. * @returns {number} */ getMinimumPosition(): number | null; /** * Returns the current position for live contents. * * Returns `null` if no content is loaded or if the current loaded content is * not considered as a live content. * Returns `undefined` if that live position is currently unknown. * @returns {number} */ getLivePosition(): number | undefined | null; /** * Get maximum seek-able position. * @returns {number} */ getMaximumPosition(): number | null; /** * Used for the display of segmentSink metrics for the debug element * @param fn * @param cancellationSignal * @returns */ __priv_getSegmentSinkMetrics(): Promise<undefined | ISegmentSinkMetrics>; /** * /!\ For tools use only! Do not touch! * * Returns manifest/playlist object. * null if the player is STOPPED. * @returns {Manifest|null} - The current Manifest (`null` when not known). */ __priv_getManifest(): IManifestMetadata | null; __priv_getCurrentAdaptation(): Partial<Record<IBufferType, IAdaptationMetadata | null>> | null; __priv_getCurrentRepresentations(): Partial<Record<IBufferType, IRepresentationMetadata | null>> | null; /** * Reset all state properties relative to a playing content. */ private _priv_cleanUpCurrentContentState; /** * Triggered when the Manifest has been loaded for the current content. * Initialize various private properties and emit initial event. * @param {Object} contentInfos * @param {Object} manifest */ private _priv_onManifestReady; /** * Triggered when the Manifest has been updated for the current content. * Initialize various private properties and emit initial event. * @param {Object} contentInfos * @param {Object} updates */ private _priv_onManifestUpdate; /** * Triggered each times the support for a codec has changed in the manifest. * When triggered, the track store may need to consider selecting a new track. * * @param {Object} contentInfos */ private _priv_onCodecSupportUpdate; private _priv_onDecipherabilityUpdate; /** * Triggered each times the current Period Changed. * Store and emit initial state for the Period. * * @param {Object} contentInfos * @param {Object} periodInfo */ private _priv_onActivePeriodChanged; /** * Triggered each times a new "PeriodStream" is ready. * Choose the right Adaptation for the Period and emit it. * @param {Object} contentInfos * @param {Object} value */ private _priv_onPeriodStreamReady; /** * Triggered each times we "remove" a PeriodStream. * @param {Object} contentInfos * @param {Object} value */ private _priv_onPeriodStreamCleared; /** * Triggered each times a new Adaptation is considered for the current * content. * Store given Adaptation and emit it if from the current Period. * @param {Object} contentInfos * @param {Object} value */ private _priv_onAdaptationChange; /** * Triggered each times a new Representation is considered during playback. * * Store given Representation and emit it if from the current Period. * * @param {Object} contentInfos * @param {Object} obj */ private _priv_onRepresentationChange; /** * Triggered each time a bitrate estimate is calculated. * * Emit it. * * @param {Object} value */ private _priv_onBitrateEstimateChange; /** * Triggered each time the player state updates. * * Trigger the right Player Event. * * @param {string} newState */ private _priv_setPlayerState; /** * Triggered each time a playback observation. * * Trigger the right Player Event * * @param {Object} contentInfos * @param {Object} observation */ private _priv_triggerPositionUpdate; /** * @param {string} evt * @param {*} arg * @param {Object} currentContentCancelSignal */ private _priv_triggerEventIfNotStopped; /** * @param {Object} cancelSignal * @returns {Object} */ private _priv_initializeMediaElementTracksStore; private _priv_callTracksStoreGetterSetter; /** * Method to call when some event lead to a high for possibility that the * available tracks for the given type have changed. * Send the corresponding `available*Tracks` change event with the last * available tracks. * * @param {string} trackType * @param {Object|undefined} [oPeriodRef] - optional period object used by the * `tracksStore` API, allows to optimize the method by bypassing this step. */ private _priv_onAvailableTracksMayHaveChanged; /** * Method to call when a fatal error lead to the stopping of the current * content. * * @param {*} err - The error encountered. * @param {Object} contentInfos - The `IPublicApiContentInfos` object linked * to the content for which the error was received. */ private _priv_onFatalError; } /** Every events sent by the RxPlayer's public API. */ interface IPublicAPIEvent { playerStateChange: string; positionUpdate: IPositionUpdate; audioTrackChange: IAudioTrack | null; textTrackChange: ITextTrack | null; videoTrackChange: IVideoTrack | null; audioRepresentationChange: IAudioRepresentation | null; videoRepresentationChange: IVideoRepresentation | null; volumeChange: { volume: number; muted: boolean; }; error: IPlayerError | Error; warning: IPlayerError | Error; periodChange: IPeriodChangeEvent; availableAudioTracksChange: IAvailableAudioTrack[]; availableTextTracksChange: IAvailableTextTrack[]; availableVideoTracksChange: IAvailableVideoTrack[]; play: null; pause: null; newAvailablePeriods: IPeriod[]; brokenRepresentationsLock: IBrokenRepresentationsLockContext; trackUpdate: ITrackUpdateEventPayload; representationListUpdate: IRepresentationListUpdateContext; seeking: null; seeked: null; streamEvent: IStreamEvent; streamEventSkip: IStreamEvent; inbandEvents: IInbandEvent[]; } /** State linked to a particular contents loaded by the public API. */ export interface IPublicApiContentInfos { /** * Unique identifier for this `IPublicApiContentInfos` object. * Allows to identify and thus compare this `contentInfos` object with another * one. */ contentId: string; /** Original URL set to load the content. */ originalUrl: string | undefined; /** `ContentInitializer` used to load the content. */ initializer: ContentInitializer; /** TaskCanceller triggered when it's time to stop the current content. */ currentContentCanceller: TaskCanceller; /** The default behavior to adopt when switching the audio track. */ defaultAudioTrackSwitchingMode: IAudioTrackSwitchingMode | undefined; /** * `true` if the current content is in DirectFile mode. * `false` is the current content has a transport protocol (Smooth/DASH...). */ isDirectFile: boolean; /** * Manifest linked to the current content. * `null` if the current content loaded has no manifest or if the content is * not yet loaded. */ manifest: IManifestMetadata | null; /** * Current Period being played. * `null` if no Period is being played. */ currentPeriod: IPeriodMetadata | null; /** * Store currently considered adaptations, per active period. * `null` if no Adaptation is active */ activeAdaptations: { [periodId: string]: Partial<Record<IBufferType, IAdaptationMetadata | null>>; } | null; /** * Store currently considered representations, per active period. * `null` if no Representation is active */ activeRepresentations: { [periodId: string]: Partial<Record<IBufferType, IRepresentationMetadata | null>>; } | null; /** * TracksStore instance linked to the current content. * `null` if no content has been loaded or if the current content loaded * has no TracksStore. */ tracksStore: TracksStore | null; /** * MediaElementTracksStore instance linked to the current content. * `null` if no content has been loaded or if the current content loaded * has no MediaElementTracksStore. */ mediaElementTracksStore: IMediaElementTracksStore | null; /** * If `true`, the RxPlayer's main logic is running in a WebWorker for this * content. */ useWorker: boolean; /** * Function passed from the ContentInitializer that return segment sinks metrics. * This is used for monitor and debugging. */ segmentSinkMetricsCallback: null | (() => Promise<ISegmentSinkMetrics | undefined>); /** * Function allowing to retrieve thumbnails from a content. */ fetchThumbnailDataCallback: null | ((periodId: string, thumbnailTrackId: string, time: number) => Promise<IThumbnailResponse>); /** Metadata related to thumbnail rendering for the current content. */ thumbnailRequestsInfo: { /** * Thumbnail requests that are still pending, identified by the thumbnail * container. * The value allows to cancel that task. */ pendingRequests: WeakMap<HTMLElement, TaskCanceller>; /** * Metadata about the last requested thumbnails. * * This is an optimization to avoid an unnecessary request and round-trip to * the core code as many times thumbnail previews asked by applications are * really close to the last asked one, often in the same thumbnail resource. */ lastResponse: { /** Actual thumbnail data response from core RxPlayer code. */ response: IThumbnailResponse; /** The identifier for the Period for which that request was made. */ periodId: string; /** The identifier for the thumbnail track for which that request was made. */ thumbnailTrackId: string; } | null; }; } export default Player; //# sourceMappingURL=public_api.d.ts.map