export interface HlsLikeStatic<TPlayer> {
    Events: {
        MANIFEST_LOADED: string;
        ERROR: string;
    };
    isSupported: () => boolean;
    new (): TPlayer;
}
export interface HlsPlayerLike {
    startLoad(): () => void;
    off: (eventName: string, handler: Function) => void;
    on: (eventName: string, handler: Function) => void;
    loadSource: (src: string) => void;
    attachMedia: (video: HTMLVideoElement) => void;
    destroy: () => void;
}
export interface PlayerMediaHandlers {
    onCanplay: (e: Event) => void;
    onCanplaythrough: (e: Event) => void;
    onComplete: (e: Event) => void;
    onDurationchange: (e: Event) => void;
    onEmptied: (e: Event) => void;
    onEnded: (e: Event) => void;
    onError: (e: Event) => void;
    onLoadeddata: (e: Event) => void;
    onLoadedmetadata: (e: Event) => void;
    onLoadstart: (e: Event) => void;
    onPause: (e: Event) => void;
    onPlay: (e: Event) => void;
    onPlaying: (e: Event) => void;
    onProgress: (e: Event) => void;
    onRatechange: (e: Event) => void;
    onSeeked: (e: Event) => void;
    onSeeking: (e: Event) => void;
    onStalled: (e: Event) => void;
    onSuspend: (e: Event) => void;
    onTimeupdate: (e: Event) => void;
    onVolumechange: (e: Event) => void;
    onWaiting: (e: Event) => void;
}
export declare function bindMediaEvents(video: HTMLVideoElement, handlers: PlayerMediaHandlers): void;
export declare function unbindMediaEvents(video: HTMLVideoElement, handlers: PlayerMediaHandlers): void;
export declare function loadVideoSource<TPlayer extends HlsPlayerLike>(input: {
    video: HTMLVideoElement;
    src: string;
    Hls?: HlsLikeStatic<TPlayer>;
    existingHls?: TPlayer;
    onManifestLoaded: Function;
    onHlsError: Function;
}): TPlayer | undefined;
