@playkit-js/playkit-js-hls
Version:
[](https://github.com/kaltura/playkit-js-hls/actions/workflows/run_canary_full_flow.yaml) [ • 14.8 kB
TypeScript
import { AudioTrack } from '@playkit-js/playkit-js';
import { BaseMediaSourceAdapter } from '@playkit-js/playkit-js';
import { ILogger } from 'js-logger';
import { IMediaSourceAdapter } from '@playkit-js/playkit-js';
import { PKABRRestrictionObject } from '@playkit-js/playkit-js';
import { PKMediaSourceObject } from '@playkit-js/playkit-js';
import { TextTrack as TextTrack_2 } from '@playkit-js/playkit-js';
import { VideoTrack } from '@playkit-js/playkit-js';
/**
* Adapter of hls.js lib for hls content.
* @classdesc
*/
declare class HlsAdapter extends BaseMediaSourceAdapter {
/**
* The id of the adapter.
* @member {string} id
* @static
* @private
*/
static id: string;
/**
* The adapter logger.
* @member {any} _logger
* @static
* @private
*/
protected static _logger: ILogger;
/**
* The supported mime types by the hls adapter.
* @member {Array<string>} _hlsMimeType
* @static
* @private
*/
private static _hlsMimeTypes;
/**
* The Hls lib
* @type {any}
* @private
*/
private _hlsjsLib;
/**
* The hls player instance.
* @member {any} _hls
* @private
*/
private _hls;
/**
* Last recover date from decoding error
* @type {number}
* @private
*/
private _recoverDecodingErrorDate;
/**
* Last recover date from audio swap codec operation
* @type {number}
* @private
*/
private _recoverSwapAudioCodecDate;
/**
* Indicates if external redirect was performed
* @type {boolean}
* @private
*/
private _triedReloadWithRedirect;
/**
* The _loadPromise handlers
* @member {{resolve: (result: Promise<R> | R) => void, reject: (error: any) => void}} - _loadPromiseHandlers
* @type {{resolve: (result: Promise<R> | R) => void, reject: (error: any) => void}}
* @private
*/
private _loadPromiseHandlers;
/**
* Reference to the player tracks.
* @member {Array<Track>} - _playerTracks
* @type {Array<Track>}
* @private
*/
private _playerTracks;
/**
* Stream start time in seconds
* @type {?number}
* @private
*/
private _startTime;
/**
* Reference to _onRecoveredCallback function
* @member {?Function} - _onRecoveredCallback
* @type {?Function}
* @private
*/
private _onRecoveredCallback;
private _onMediaAttached;
private _mediaAttachedPromise;
private _requestFilterError;
private _responseFilterError;
private _nativeTextTracksMap;
private _lastLoadedFragSN;
private _sameFragSNLoadedCount;
private _waitForSubtitleLoad;
/**
* an object containing all the events we bind and unbind to.
* @member {Object} - _adapterEventsBindings
* @type {Object}
* @private
*/
private _adapterEventsBindings;
/**
* 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 hls adapter can play a given mime type.
* @function canPlayType
* @param {string} mimeType - The mime type to check.
* @returns {boolean} - Whether the hls adapter can play a specific mime type.
* @static
*/
static canPlayType(mimeType: string): boolean;
/**
* Checks if hls adapter can play a given drm data.
* For hls.js it always returns false.
* @returns {boolean} - Whether the hls adapter can play a specific drm data.
* @static
*/
static canPlayDrm(): boolean;
/**
* Checks if the hls adapter is supported.
* @function isSupported
* @returns {boolean} - Whether hls is supported.
* @static
*/
static isSupported(): boolean;
/**
* @constructor
* @param {HTMLVideoElement} videoElement - The video element which will bind to the hls adapter
* @param {PKMediaSourceObject} source - The source object
* @param {Object} config - The media source adapter configuration
*/
constructor(videoElement: HTMLVideoElement, source: PKMediaSourceObject, config: any);
/**
* init the hls adapter
* @function _init
* @private
* @returns {void}
*/
private _init;
private _maybeSetFilters;
/**
* Adds the required bindings locally and with hls.js.
* @function _addBindings
* @private
* @returns {void}
*/
private _addBindings;
private _onFpsDrop;
private _onFragParsingMetadata;
private _onAddTrack;
/**
* 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 {void}
*/
detachMediaSource(): void;
/**
* video error event handler.
* @param {MediaError} error - the media error
* @public
* @returns {boolean} if hls-adapter will try to recover
*/
handleMediaError(error: MediaError): boolean;
/**
* Load the video source
* @function load
* @param {number} startTime - Optional time to start the video from.
* @returns {Promise<Object>} - The loaded data
* @override
*/
load(startTime?: number): Promise<any>;
/**
* Load the video source
* @function load
* @returns {void}
* @private
*/
private _loadInternal;
/**
* Load the video source with installed playlist loader
* @function _reloadWithDirectManifest
* @returns {void}
* @private
*/
private _reloadWithDirectManifest;
/**
* Destroys the hls adapter.
* @function destroy
* @override
* @returns {Promise<*>} - The destroy promise.
*/
destroy(): Promise<void>;
/**
* reset hls.js instance and its bindings
* @private
* @returns {void}
*/
private _reset;
/**
* Parse the hls tracks into player tracks.
* @returns {Array<Track>} - The parsed tracks.
* @private
*/
private _parseTracks;
/**
* Parse hls audio tracks into player audio tracks.
* @param {Array<Object>} hlsAudioTracks - The hls audio tracks.
* @returns {Array<AudioTrack>} - The parsed audio tracks.
* @private
*/
private _parseAudioTracks;
/**
* Parse hls video tracks into player video tracks.
* @param {Array<Object>} hlsVideoTracks - The hls video tracks.
* @returns {Array<VideoTrack>} - The parsed video tracks.
* @private
*/
private _parseVideoTracks;
/**
* Parse hls text tracks into player text tracks.
* @param {Array<Object>} hlsTextTracks - The hls text tracks.
* @returns {Array<TextTrack>} - The parsed text tracks.
* @private
*/
private _parseTextTracks;
private _captionsOrSubtitlesFromCharacteristics;
/**
* Parse a CEA 608/708 text track which not expose on hlsjs api into player text tracks.
* @param {Object} CEATextTrack - A video element text track.
* @returns {?TextTrack} - A parsed text track if the param is a CEA 608/708 caption.
* @private
*/
private _parseCEATextTrack;
/**
* Select an audio track.
* @function selectAudioTrack
* @param {AudioTrack} audioTrack - the audio track to select.
* @returns {void}
* @public
*/
selectAudioTrack(audioTrack: AudioTrack): void;
/**
* Select a video track.
* @function selectVideoTrack
* @param {VideoTrack} videoTrack - the track to select.
* @returns {void}
* @public
*/
selectVideoTrack(videoTrack: VideoTrack): void;
/**
* Select a text track.
* @function selectTextTrack
* @param {TextTrack} textTrack - the track to select.
* @returns {void}
* @public
*/
selectTextTrack(textTrack: TextTrack_2): void;
/**
* Select a video element text track.
* @function _selectNativeTextTrack
* @param {TextTrack} textTrack - the track to select.
* @returns {void}
* @private
*/
private _selectNativeTextTrack;
private _notifyTrackChanged;
/** Hide the text track
* @function hideTextTrack
* @returns {void}
* @public
*/
hideTextTrack(): void;
/**
* Enables adaptive bitrate switching according to hls.js logic.
* @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 details of hls level
* @function _getLevelDetails
* @returns {Object} - Level details
* @private
*/
private _getLevelDetails;
/**
* Returns the live edge
* @returns {number} - live edge
* @private
*/
protected _getLiveEdge(): number;
/**
* Seeking to live edge, calculated according hls configuration - liveSyncDuration or liveSyncDurationCount.
* @function seekToLiveEdge
* @returns {void}
* @public
*/
seekToLiveEdge(): void;
/**
* Gets the segment duration of the stream
* @return {number} - Segment duration in seconds
*/
getSegmentDuration(): number;
/**
* Gets the live duration
* @return {number} - live duration
*/
get liveDuration(): number;
/**
* Checking if the current playback is live.
* @function isLive
* @returns {boolean} - Whether playback is live.
* @public
*/
isLive(): boolean;
/**
* Fired after manifest has been loaded.
* @function _onManifestLoaded
* @param {any} data - the data of the manifest load event
* @private
* @returns {void}
*/
private _onManifestLoaded;
/**
* apply ABR restrictions
* @private
* @param {PKABRRestrictionObject} restrictions - abt config object
* @returns {void}
*/
private _maybeApplyAbrRestrictions;
/**
* Triggers on video track selection (auto or manually) the 'videotrackchanged' event forward.
* @function _onLevelSwitched
* @param {string} event - The event name.
* @param {any} data - The event data object.
* @private
* @returns {void}
*/
private _onLevelSwitched;
/**
* Triggers on audio track selection (auto or manually) the 'audiotrackchanged' event forward.
* @function _onAudioTrackSwitched
* @param {string} event - The event name.
* @param {any} data - The event data object.
* @private
* @returns {void}
*/
private _onAudioTrackSwitched;
/**
* Trigger a playing event whenever an audio track is changed & time_update event is fired.
* This align Edge and IE behaviour to other browsers. When an audio track changed in IE & Edge, they trigger
* waiting event but not playing event.
* @returns {void}
* @private
*/
private _handleWaitingUponAudioTrackSwitch;
/**
* Creates a detailed Error Object according to the relevant error name
* @param {any} data - The event data object.
* @private
* @returns {any} - the relevant error data object
*/
private _getErrorDataObject;
/**
* Handles hls errors.
* @param {any} data - The event data object.
* @private
* @returns {void}
*/
private _onError;
/**
* Tries to handle media errors via hls.js error handlers
* @param {string} mediaErrorName - Media Error Name
* @returns {boolean} - if media error is handled or not
* @private
*/
private _handleMediaError;
/**
* trigger mediarecovered event if metadata is loaded (means the recovery succeeded)
* @returns {void}
* @private
*/
private _onRecovered;
/**
* Check if time has passed a certain delta
* @param {number} now - current time
* @param {number} then - previous time
* @param {number} delay - time delta in ms
* @returns {boolean} - if time delta has
* @private
*/
private _checkTimeDeltaHasPassed;
/**
* handle recover from decoding error
* @returns {void}
* @private
*/
private _recoverDecodingError;
/**
* handle recover from decoding error by swaping audio codec
* @returns {void}
* @private
*/
private _recoverSwapAudioCodec;
/**
* Removes hls.js bindings.
* @returns {void}
* @private
*/
private _removeBindings;
/**
* Get the start time of DVR window in live playback in seconds.
* @returns {Number} - start time of DVR window.
* @public
*/
getStartTimeOfDvrWindow(): number;
/**
* called when a level is loaded
* @private
* @param {any} e - the event object
* @param {any} data - the event data
* @returns {void}
*/
private _onLevelLoaded;
/**
* called when a fragment is loaded
* @private
* @param {any} data - the event data of the loaded fragment
* @returns {void}
*/
private _onFragLoaded;
/**
* returns value the player targets the buffer
* @returns {number} buffer target length in seconds
*/
get targetBuffer(): number;
private _getLiveTargetBuffer;
}
export default HlsAdapter;
export declare const NAME: string;
export declare const VERSION: string;
export { }