UNPKG

@playkit-js/playkit-js-dash

Version:

[![Build Status](https://github.com/kaltura/playkit-js-dash/actions/workflows/run_canary_full_flow.yaml/badge.svg)](https://github.com/kaltura/playkit-js-dash/actions/workflows/run_canary_full_flow.yaml) [![code style: prettier](https://img.shields.io/bad

560 lines (555 loc) 16.5 kB
import { AudioTrack } from '@playkit-js/playkit-js'; import { BaseMediaSourceAdapter } from '@playkit-js/playkit-js'; import { ILogger } from 'js-logger'; import { ImageTrack } from '@playkit-js/playkit-js'; import { IMediaSourceAdapter } from '@playkit-js/playkit-js'; import { PKABRRestrictionObject } from '@playkit-js/playkit-js'; import { PKDrmConfigObject } from '@playkit-js/playkit-js'; import { PKDrmDataObject } from '@playkit-js/playkit-js'; import { PKMediaSourceObject } from '@playkit-js/playkit-js'; import { TextTrack as TextTrack_2 } from '@playkit-js/playkit-js'; import { ThumbnailInfo } from '@playkit-js/playkit-js'; import { VideoTrack } from '@playkit-js/playkit-js'; /** * Adapter of shaka lib for dash content * @classdesc */ declare class DashAdapter extends BaseMediaSourceAdapter { /** * The id of Adapter * @member {string} id * @static * @public */ static id: string; /** * The adapter logger * @member {any} _logger * @private * @static */ protected static _logger: ILogger; static textContainerClass: string; /** * The supported mime type by the dash adapter * @member {string} _dashMimeType * @static * @private */ private static _dashMimeType; /** * The DRM protocols implementations for dash adapter. * @type {Array<Function>} * @private * @static */ private static _drmProtocols; /** * The DRM protocols available for the current playback. * @type {Array<Function>} * @private * @static */ private static _availableDrmProtocol; /** * The shaka Lib * @member {any} _shakaLib * @private */ private _shakaLib; /** * The shaka player instance * @member {any} _shaka * @private */ private _shaka; /** * an object containing all the events we bind and unbind to. * @member {Object} - _adapterEventsBindings * @type {Object} * @private */ private _adapterEventsBindings; /** * The buffering state flag * @member {boolean} - _buffering * @type {boolean} * @private */ private _buffering; /** * Whether 'waiting' event has been sent by the HTMLVideoElement * @member {boolean} - _waitingSent * @type {boolean} * @private */ private _waitingSent; /** * Whether 'playing' event has been sent by the HTMLVideoElement * @member {boolean} - _playingSent * @type {boolean} * @private */ private _playingSent; /** * Video size update timer * @type {null|number} * @private */ private _videoSizeUpdateTimer; /** * stall interval to break the stall on Smart TV * @type {null|IntervalID} * @private */ private _stallInterval; /** * 3016 is the number of the video error at shaka, we already listens to it in the html5 class * @member {number} - VIDEO_ERROR_CODE * @type {number} * @private */ VIDEO_ERROR_CODE: number; /** * The last time detach occurred * @type {number} * @private */ private _lastTimeDetach; /** * Whether the request filter threw an error * @type {boolean} * @private */ private _requestFilterError; /** * Whether the response filter threw an error * @type {boolean} * @private */ private _responseFilterError; /** * Whether async destroy is in progress * @type {boolean} * @private */ private _isDestroyInProgress; /** * Custom dash manifest parser. * @type {DashManifestParser} * @private */ private _manifestParser; /** * error counter to change severity * @type ErrorEventsType * @private */ private _errorCounter; /** * Dash thumbnail controller. * @type {DashThumbnailController} * @private */ private _thumbnailController; private _isStartOver; private _seekRangeStart; private _startOverTimeout; private _isLive; private _isStaticLive; private _selectedVideoTrack; private _playbackActualUri; applyTextTrackStyles(sheet: CSSStyleSheet, styles: any, containerId: string): void; /** * Factory method to create media source adapter. * @function createAdapter * @param {HTMLVideoElement} videoElement - The video element that the media source adapter work with. * @param {PKMediaSourceObject} source - The source Object. * @param {Object} config - The player configuration. * @returns {IMediaSourceAdapter} - New instance of the run time media source adapter. * @static */ static createAdapter(videoElement: HTMLVideoElement, source: PKMediaSourceObject, config: any): IMediaSourceAdapter; /** * Checks if dash adapter can play a given mime type * @function canPlayType * @param {string} mimeType - The mime type to check * @returns {boolean} - Whether the dash adapter can play a specific mime type * @static */ static canPlayType(mimeType: string): boolean; /** * set 'bitrate' the max bandwidth (if possible) * @param {number} bitrate the max bitrate allowed * @returns {void} */ setMaxBitrate(bitrate: number): void; private _getSortedTracks; private _hasLowerOrEqualBitrate; /** * Checks if dash adapter can play a given drm data. * @param {Array<Object>} drmData - The drm data to check. * @param {PKDrmConfigObject} drmConfig - The drm config. * @returns {boolean} - Whether the dash adapter can play a specific drm data. * @static */ static canPlayDrm(drmData: Array<PKDrmDataObject>, drmConfig: PKDrmConfigObject): boolean; /** * Checks if the dash adapter is supported * @function isSupported * @returns {boolean} - Whether dash is supported. * @static */ static isSupported(): boolean; /** * @constructor * @param {HTMLVideoElement} videoElement - The video element which bind to the dash adapter * @param {PKMediaSourceObject} source - The source object * @param {Object} config - The media source adapter configuration */ constructor(videoElement: HTMLVideoElement, source: PKMediaSourceObject, config?: any); /** * Runs the initialization actions of the dash adapter. * @private * @returns {void} */ private _init; private _clearStallInterval; private _stallHandler; /** * register to event to break the stalls on smart TV * @returns {void} * @private */ private _maybeBreakStalls; /** * get the redirected URL * @param {string} url - The url to check for redirection * @returns {Promise<string>} - the resolved url * @private */ private _maybeGetRedirectedUrl; private _maybeSetFilters; /** * Configure drm for shaka player. * @private * @returns {void} */ private _maybeSetDrmConfig; /** * apply Capping to player size restrictions * @private * @returns {void} */ private _maybeCapLevelToPlayerSize; /** * apply ABR restrictions * @private * @returns {void} */ private _maybeApplyAbrRestrictions; /** * apply ABR restrictions by size * @private * @param {PKABRRestrictionObject} restrictions - abr restrictions config * @returns {void} */ private _updateRestriction; private _getRestrictionShakaConfig; /** * attach media - return the media source to handle the video tag * @public * @returns {void} */ attachMediaSource(): void; /** * detach media - will remove the media source from handling the video * @public * @returns {Promise<void>} - detach promise */ detachMediaSource(): Promise<void>; /** * Clear the video update timer * @private * @returns {void} */ private _clearVideoUpdateTimer; private get _videoWidth(); private get _videoHeight(); private get _contentScaleFactor(); /** * Add the required bindings to shaka. * @function _addBindings * @private * @returns {void} */ private _addBindings; private _onLoadedData; _switchFromDynamicToStatic(): Promise<void>; private _setLowLatencyMode; /** * Custom parser to retrieve image adaptation sets. * @param {ArrayBuffer} manifestBuffer - The array buffer manifest from the response. * @function _parseManifest * @private * @returns {void} */ private _parseManifest; /** * Load the video source * @param {number} startTime - Optional time to start the video from. * @function load * @override */ load(startTime?: number): Promise<any>; /** * Destroys the dash adapter * @function destroy * @override * @returns {Promise<*>} - The destroy promise. */ destroy(): Promise<void>; /** * Returns in-stream thumbnail for a chosen time. * @param {number} time - playback time. * @public * @return {?ThumbnailInfo} - Thumbnail info */ getThumbnail(time: number): ThumbnailInfo | null; /** * Reset shaka instance and its bindings * @function _reset * @private * @returns {Promise<*>} - The destroy promise. */ private _reset; /** * Remove mediaKeys from the video element. * mediaKeys are set if an encrypted media was previously played, and must be removed before a new encrypted media can be played. * If mediaKeys are not null it means that shaka reset wasn't called or that it failed to remove them. * @returns {Promise<void>} Promise that resolves when the operation finishes. */ _removeMediaKeys(): Promise<void>; /** * Get the original video tracks * @function _getVideoTracks * @returns {Array<Object>} - The original video tracks * @private */ private _getVideoTracks; private _getActiveTrack; /** * Get the original audio tracks * @function _getAudioTracks * @returns {Array<Object>} - Array of objects with unique language and label. * @private */ private _getAudioTracks; /** * Get the parsed tracks * @function _getParsedTracks * @returns {Array<Track>} - The parsed tracks * @private */ private _getParsedTracks; /** * Get the parsed video tracks * @function _getParsedVideoTracks * @returns {Array<VideoTrack>} - The parsed video tracks * @private */ private _getParsedVideoTracks; /** * Get the parsed audio tracks * @function _getParsedAudioTracks * @returns {Array<AudioTrack>} - The parsed audio tracks * @private */ private _getParsedAudioTracks; /** * Get the parsed text tracks * @function _getParsedTextTracks * @returns {Array<TextTrack>} - The parsed text tracks * @private */ private _getParsedTextTracks; /** * Get the parsed image tracks * @function _getParsedImageTracks * @returns {Array<ImageTrack>} - The parsed image tracks * @private */ private _getParsedImageTracks; /** * Select a video track * @function selectVideoTrack * @param {VideoTrack} videoTrack - the video track to select * @returns {void} * @public */ selectVideoTrack(videoTrack: VideoTrack): void; /** * Select an audio track * @function selectAudioTrack * @param {AudioTrack} audioTrack - the audio track to select * @returns {void} * @public */ selectAudioTrack(audioTrack: AudioTrack): void; /** * Select a text track * @function selectTextTrack * @param {TextTrack} textTrack - the track to select * @returns {void} * @public */ selectTextTrack(textTrack: TextTrack_2): void; selectImageTrack(imageTrack: ImageTrack): void; /** * Hide the text track * @function hideTextTrack * @returns {void} * @public */ hideTextTrack(): void; /** * Enables adaptive bitrate switching * @function enableAdaptiveBitrate * @returns {void} * @public */ enableAdaptiveBitrate(): void; /** * Checking if adaptive bitrate switching is enabled. * @function isAdaptiveBitrateEnabled * @returns {boolean} - Whether adaptive bitrate is enabled. * @public */ isAdaptiveBitrateEnabled(): boolean; /** * Apply ABR restriction. * @function applyABRRestriction * @param {PKABRRestrictionObject} restrictions - abr restrictions config * @returns {void} * @public */ applyABRRestriction(restrictions: PKABRRestrictionObject): void; /** * Returns the live edge * @returns {number} - live edge * @private */ protected _getLiveEdge(): number; /** * Seeking to live edge. * @function seekToLiveEdge * @returns {void} * @public */ seekToLiveEdge(): void; /** * Checking if the current playback is live. * @function isLive * @returns {boolean} - Whether playback is live. * @public */ isLive(): boolean; /** * Gets the segment duration of the stream * @return {number} - Segment duration in seconds */ get liveDuration(): number; /** * Gets the live duration * @return {number} - live duration */ getSegmentDuration(): number; /** * An handler to shaka adaptation event * @function _onAdaptation * @returns {void} * @private */ private _onAdaptation; /** * An handler to shaka error event * @function _onError * @param {any} event - the error event * @returns {void} * @private */ private _onError; private _shouldErrorChangeSeverity; /** * An handler to shaka buffering event * @function _onBuffering * @param {any} event - the buffering event * @returns {void} * @private */ private _onBuffering; private _dispatchNativeEvent; /** * An handler to shaka drm session update event * @function _onDrmSessionUpdate * @returns {void} * @private */ private _onDrmSessionUpdate; /** * An handler to shaka emsg event * @function _onEmsg * @param {any} event - the emsg event * @returns {void} * @private */ private _onEmsg; /** * Handler for Shaka timelineregionadded event * @param {any} event - Shaka timeline region added event * @private */ private _onTimelineRegionAdded; /** * Handler for Shaka timelineregionenter event * @param {any} event - Shaka timeline region removed event * @private */ private _onTimelineRegionEnter; /** * Handler for Shaka timelineregionexit event * @param {any} event - Shaka timeline region removed event * @private */ private _onTimelineRegionExit; /** * An handler to HTMLVideoElement waiting event * @function _onWaiting * @returns {void} * @private */ private _onWaiting; /** * An handler to HTMLVideoElement playing event * @function _onPlaying * @returns {void} * @private */ private _onPlaying; /** * Get the start time of DVR window in live playback in seconds. * @returns {Number} - start time of DVR window. * @public */ getStartTimeOfDvrWindow(): number; /** * gets the target buffer of the player * @returns {number} - buffer length target in seconds */ get targetBuffer(): number; getDrmInfo(): PKDrmDataObject | null; } export default DashAdapter; export declare const NAME: string; export declare const VERSION: string; export { }