import { HlsPlayerStats } from '@100mslive/hls-stats';
import { HMSHLSException } from '../error/HMSHLSException';
import { HMSHLSPlayerListeners, IHMSHLSPlayerEventEmitter } from '../interfaces/events';
import { HMSHLSLayer } from '../interfaces/IHMSHLSLayer';
import IHMSHLSPlayer from '../interfaces/IHMSHLSPlayer';
import { HMSHLSPlayerEvents } from '../utilies/constants';
export declare class HMSHLSPlayer implements IHMSHLSPlayer, IHMSHLSPlayerEventEmitter {
    private _hls;
    private _hlsUrl;
    private _hlsStats;
    private _videoEl;
    private _emitter;
    private _subscribeHlsStats?;
    private _isLive;
    private _volume;
    private _metaData;
    private readonly TAG;
    /**
     * Initiliaze the player with hlsUrl and video element
     * @remarks If video element is not passed, we will create one and call a method getVideoElement get element
     * @param hlsUrl required - Pass hls url to
     * @param videoEl optional field - HTML video element
     */
    constructor(hlsUrl: string, videoEl?: HTMLVideoElement);
    /**
     * @remarks It will create a video element with playiniline true.
     * @returns HTML video element
     */
    private createVideoElement;
    /**
     * @returns get html video element
     */
    getVideoElement(): HTMLVideoElement;
    /**
     *  Subscribe to hls stats
     */
    private subscribeStats;
    /**
     * Unsubscribe to hls stats
     */
    private unsubscribeStats;
    reset(): void;
    on: <E extends HMSHLSPlayerEvents>(eventName: E, listener: HMSHLSPlayerListeners<E>) => void;
    off: <E extends HMSHLSPlayerEvents>(eventName: E, listener: HMSHLSPlayerListeners<E>) => void;
    emitEvent: <E extends HMSHLSPlayerEvents>(eventName: E, eventObject: {
        "seek-pos-behind-live-edge": import("../interfaces/events").HMSHLSStreamLive;
        "timed-metadata": import("../interfaces/events").HMSHLSCue;
        stats: HlsPlayerStats;
        "playback-state": import("../interfaces/events").HMSHLSPlaybackState;
        "caption-enabled": boolean;
        error: HMSHLSException;
        "current-time": number;
        "autoplay-blocked": HMSHLSException;
        "manifest-loaded": import("../interfaces/events").HMSHLSManifestLoaded;
        "layer-updated": import("../interfaces/events").HMSHLSLayerUpdated;
    }[E]) => boolean;
    private removeAllListeners;
    get volume(): number;
    setVolume(volume: number): void;
    getLayer(): HMSHLSLayer | null;
    setLayer(layer: HMSHLSLayer): void;
    /**
     * set current stream to Live
     */
    seekToLivePosition(): Promise<void>;
    /**
     * Play stream
     */
    play: () => Promise<void>;
    /**
     * Pause stream
     */
    pause: () => void;
    /**
     * It will update the video element current time
     * @param seekValue Pass currentTime in second
     */
    seekTo: (seekValue: number) => void;
    hasCaptions: () => boolean;
    toggleCaption: () => void;
    private playVideo;
    private pauseVideo;
    private playEventHandler;
    private pauseEventHandler;
    private volumeEventHandler;
    private reConnectToStream;
    private handleHLSException;
    private manifestLoadedHandler;
    private levelUpdatedHandler;
    private handleTimeUpdateListener;
    /**
     * Listen to hlsjs and video related events
     */
    private listenHLSEvent;
    /**
     * 1 min retries before user came online, reason room automatically disconnected if user is offline for more than 1mins
     * Retries logic will run exponential like (1, 2, 4, 8, 8, 8, 8, 8, 8, 8secs)
     * there will be total 10 retries
     */
    private getPlayerConfig;
    /**
     * @param {Array} levels array
     * @returns a new array with only video levels.
     */
    private removeAudioLevels;
    /**
     * @returns true if HLS player is supported in the browser
     */
    static isSupported(): boolean;
}
