import Hls from 'hls.js';
import { BehaviorSubject, Observable } from 'rxjs';
import { AudioLoadedEvent, AudioPeakProcessorMessageEvent, AudioSwitchedEvent, AudioUpdatedEvent, HelpMenuGroup, MainAudioChangeEvent, MainAudioInputSoloMuteEvent, OmpAudioTrack, OmpAudioTrackCreateType, OmpNamedEvent, OmpNamedEventEventName, SidecarAudioChangeEvent, SidecarAudioCreateEvent, SidecarAudioInputSoloMuteEvent, SidecarAudioLoadedEvent, SidecarAudioPeakProcessorMessageEvent, SidecarAudioRemoveEvent, SidecarAudiosChangeEvent, SidecarAudioVolumeChangeEvent, SubtitlesCreateEvent, SubtitlesEvent, SubtitlesLoadedEvent, SubtitlesVttTrack, ThumnbailVttUrlChangedEvent, VideoBufferingEvent, VideoEndedEvent, VideoErrorEvent, VideoFullscreenChangeEvent, VideoHelpMenuChangeEvent, VideoLoadedEvent, VideoLoadingEvent, VideoPlaybackRateEvent, VideoPlayEvent, VideoSafeZoneChangeEvent, VideoSeekedEvent, VideoSeekingEvent, VideoTimeChangeEvent, VideoWindowPlaybackStateChangeEvent, VolumeChangeEvent } from '../types';
import { AudioMeterStandard, OmpAudioRoutingConnection, OmpAudioRoutingPath, MediaElementPlaybackState, Video, VideoControllerApi, VideoLoadOptions } from './index';
import { VideoControllerConfig } from './video-controller';
import { TypedOmpBroadcastChannel } from '../common/omp-broadcast-channel';
import { MessageChannelActionsMap } from './channel-types';
import { BufferedTimespan, VideoKeyframe, VideoKeyframeOptions, OmpAudioRouterState, OmpAudioRoutingInputType, OmpMainAudioInputSoloMuteState, OmpMainAudioState, OmpSidecarAudioInputSoloMuteState, OmpSidecarAudioState, VideoLoadOptionsInternal, VideoSafeZone, VideoWindowPlaybackState } from './model';
import { OmpAudioRouter } from './audio-router';
import { SidecarAudioApi } from '../api/sidecar-audio-api';
import { OmpAudioEffectFactory, OmpAudioEffectFilter, OmpAudioEffectParam, OmpAudioEffectsGraphDef } from '../audio';
import { OmpAudioEffectsGraphConnection } from '../audio/model';
export declare class RemoteVideoController implements VideoControllerApi {
    private readonly _messageChannel;
    private readonly _attachVideoWindowHook;
    private readonly _get_onVideoLoaded$;
    private readonly _get_onAudioLoaded$;
    private readonly _get_onSubtitlesLoaded$;
    private readonly _get_onMainAudioChange$;
    private readonly _get_onMainAudioInputSoloMute$;
    /**
     * Tracks VideoController.getPlaybackState()
     * @private
     */
    private _playbackState;
    private _currentTime;
    private _videoElementVolume;
    private _videoElementMuted;
    private _videoElementPlaybackRate;
    private _documentFullscreen;
    private _videoSafeZones;
    private _videoHelpMenuGroups;
    private _bufferedTimespans;
    private _subtitlesTracks;
    private _activeSubtitlesTrack;
    private _audioTracks;
    private _activeAudioTrack;
    private _sidecarAudioStates;
    private _sidecarAudioInputSoloMuteStates;
    private _thumbnailVttUrl;
    private _activeNamedEventStreams;
    private _audioOutputVolume;
    private _audioOutputMuted;
    private _destroyed$;
    constructor(messageChannel: TypedOmpBroadcastChannel<MessageChannelActionsMap>, attachVideoWindowHook: () => Observable<void>);
    destroy(): void;
    get onVideoLoaded$(): BehaviorSubject<VideoLoadedEvent | undefined>;
    get onVideoLoading$(): Observable<VideoLoadingEvent>;
    get onPlay$(): Observable<VideoPlayEvent>;
    get onPause$(): Observable<VideoPlayEvent>;
    get onVideoTimeChange$(): Observable<VideoTimeChangeEvent>;
    get onSeeking$(): Observable<VideoSeekingEvent>;
    get onSeeked$(): Observable<VideoSeekedEvent>;
    get onBuffering$(): Observable<VideoBufferingEvent>;
    get onEnded$(): Observable<VideoEndedEvent>;
    get onAudioSwitched$(): Observable<AudioSwitchedEvent>;
    get onAudioUpdated$(): Observable<AudioUpdatedEvent>;
    get onAudioOutputVolumeChange$(): Observable<VolumeChangeEvent>;
    get onPlaybackState$(): Observable<MediaElementPlaybackState>;
    get onPlaybackRateChange$(): Observable<VideoPlaybackRateEvent>;
    get onHelpMenuChange$(): Observable<VideoHelpMenuChangeEvent>;
    get onVideoWindowPlaybackStateChange$(): Observable<VideoWindowPlaybackStateChangeEvent>;
    get onVideoError$(): Observable<VideoErrorEvent>;
    get onVolumeChange$(): Observable<VolumeChangeEvent>;
    get onFullscreenChange$(): Observable<VideoFullscreenChangeEvent>;
    get onVideoSafeZoneChange$(): Observable<VideoSafeZoneChangeEvent>;
    get onAudioLoaded$(): BehaviorSubject<AudioLoadedEvent | undefined>;
    get onSubtitlesLoaded$(): BehaviorSubject<SubtitlesLoadedEvent | undefined>;
    get onSubtitlesCreate$(): Observable<SubtitlesCreateEvent>;
    get onSubtitlesHide$(): Observable<SubtitlesEvent>;
    get onSubtitlesRemove$(): Observable<SubtitlesEvent>;
    get onSubtitlesShow$(): Observable<SubtitlesEvent>;
    get onMainAudioChange$(): Observable<MainAudioChangeEvent | undefined>;
    get onMainAudioInputSoloMute$(): Observable<MainAudioInputSoloMuteEvent | undefined>;
    get onMainAudioPeakProcessorMessage$(): Observable<AudioPeakProcessorMessageEvent>;
    get onSidecarAudioCreate$(): Observable<SidecarAudioCreateEvent>;
    get onSidecarAudioLoaded$(): Observable<SidecarAudioLoadedEvent>;
    get onSidecarAudioRemove$(): Observable<SidecarAudioRemoveEvent>;
    get onSidecarAudioChange$(): Observable<SidecarAudioChangeEvent>;
    get onSidecarAudiosChange$(): Observable<SidecarAudiosChangeEvent>;
    get onSidecarAudioInputSoloMute$(): Observable<SidecarAudioInputSoloMuteEvent>;
    get onSidecarAudioVolumeChange$(): Observable<SidecarAudioVolumeChangeEvent>;
    get onSidecarAudioPeakProcessorMessage$(): Observable<SidecarAudioPeakProcessorMessageEvent>;
    get onThumbnailVttUrlChanged$(): Observable<ThumnbailVttUrlChangedEvent>;
    get onActiveNamedEventStreamsChange$(): Observable<OmpNamedEventEventName[]>;
    get onNamedEvent$(): Observable<OmpNamedEvent>;
    loadVideoInternal(sourceUrl: string, options: VideoLoadOptions | undefined, optionsInternal: VideoLoadOptionsInternal): Observable<Video>;
    loadVideo(sourceUrl: string, options?: VideoLoadOptions | undefined): Observable<Video>;
    reloadVideo(): Observable<Video>;
    getPlaybackState(): MediaElementPlaybackState | undefined;
    getBufferedTimespans(): BufferedTimespan[];
    isVideoLoaded(): boolean;
    getVideo(): Video | undefined;
    getVideoLoadOptions(): VideoLoadOptions | undefined;
    getHTMLVideoElement(): HTMLVideoElement;
    getAudioContext(): AudioContext;
    getAudioOutputNode(): AudioNode;
    getSidecarAudiosOutputNode(): AudioNode;
    getAudioOutputVolume(): number;
    isAudioOutputMuted(): boolean;
    setAudioOutputMuted(muted: boolean): Observable<void>;
    toggleAudioOutputMuteUnmute(): Observable<void>;
    setAudioOutputVolume(volume: number): Observable<void>;
    muteAudioOutput(): Observable<void>;
    unmuteAudioOutput(): Observable<void>;
    getMainAudioRouter(): OmpAudioRouter | undefined;
    getDuration(): number;
    getCurrentTime(): number;
    getCurrentTimecode(): string;
    getPlaybackRate(): number;
    setPlaybackRate(playbackRate: number): Observable<void>;
    getVolume(): number;
    setVolume(volume: number): Observable<void>;
    getCurrentFrame(): number;
    getFrameRate(): number;
    getTotalFrames(): number;
    isPlaying(): boolean;
    isPaused(): boolean;
    isSeeking(): boolean;
    pause(): Observable<void>;
    play(): Observable<void>;
    togglePlayPause(): Observable<void>;
    seekToFrame(frame: number): Observable<boolean>;
    seekFromCurrentFrame(framesCount: number): Observable<boolean>;
    seekFromCurrentTime(timeAmount: number): Observable<boolean>;
    seekPreviousFrame(): Observable<boolean>;
    seekNextFrame(): Observable<boolean>;
    seekToTime(time: number): Observable<boolean>;
    seekToTimecode(timecode: string): Observable<boolean>;
    seekToPercent(percent: number): Observable<boolean>;
    seekToEnd(): Observable<boolean>;
    formatToTimecode(time: number): string;
    parseTimecodeToFrame(timecode: string): number;
    parseTimecodeToTime(timecode: string): number;
    calculateTimeToFrame(time: number): number;
    calculateFrameToTime(frameNumber: number): number;
    mute(): Observable<void>;
    unmute(): Observable<void>;
    isMuted(): boolean;
    toggleMuteUnmute(): Observable<void>;
    isFullscreen(): boolean;
    toggleFullscreen(): Observable<void>;
    appendHelpMenuGroup(helpMenuGroup: HelpMenuGroup): Observable<void>;
    prependHelpMenuGroup(helpMenuGroup: HelpMenuGroup): Observable<void>;
    clearHelpMenuGroups(): Observable<void>;
    getHelpMenuGroups(): HelpMenuGroup[];
    addSafeZone(videoSafeZone: VideoSafeZone): Observable<VideoSafeZone>;
    removeSafeZone(id: string): Observable<void>;
    clearSafeZones(): Observable<void>;
    getSafeZones(): VideoSafeZone[];
    getVideoWindowPlaybackState(): VideoWindowPlaybackState;
    isDetachable(): boolean;
    canDetach(): boolean;
    canAttach(): boolean;
    detachVideoWindow(): Observable<void>;
    attachVideoWindow(): Observable<void>;
    private validateVideoLoaded;
    createSubtitlesVttTrack(subtitlesVttTrack: SubtitlesVttTrack): Observable<SubtitlesVttTrack>;
    getSubtitlesTracks(): SubtitlesVttTrack[];
    getActiveSubtitlesTrack(): SubtitlesVttTrack | undefined;
    hideSubtitlesTrack(id: string): Observable<void>;
    removeAllSubtitlesTracks(): Observable<void>;
    removeSubtitlesTrack(id: string): Observable<void>;
    showSubtitlesTrack(id: string): Observable<void>;
    getActiveAudioTrack(): OmpAudioTrack | undefined;
    getAudioTracks(): OmpAudioTrack[];
    setActiveAudioTrack(id: string): Observable<void>;
    updateAudioTrack(audioTrack: OmpAudioTrack): Observable<void>;
    activateMainAudio(): Observable<void>;
    deactivateMainAudio(): Observable<void>;
    createMainAudioRouter(inputsNumber: number, outputsNumber?: number): Observable<OmpAudioRouterState>;
    createMainAudioRouterWithOutputsResolver(inputsNumber: number, outputsNumberResolver: (maxChannelCount: number) => number): Observable<OmpAudioRouterState>;
    createMainAudioPeakProcessor(audioMeterStandard?: AudioMeterStandard): Observable<Observable<AudioPeakProcessorMessageEvent>>;
    getMainAudioNode(): AudioNode | undefined;
    getMainAudioState(): OmpMainAudioState | undefined;
    getMainAudioInputSoloMuteState(): OmpMainAudioInputSoloMuteState | undefined;
    getMainAudioRouterInitialRoutingConnections(): OmpAudioRoutingConnection[] | undefined;
    setMainAudioRouterInitialRoutingConnections(connections: OmpAudioRoutingConnection[]): Observable<void>;
    updateMainAudioRouterConnections(connections: OmpAudioRoutingConnection[]): Observable<void>;
    setMainAudioEffectsGraphs(effectsGraphDef: OmpAudioEffectsGraphDef, effectsGraphConnection: OmpAudioEffectsGraphConnection): Observable<void>;
    removeMainAudioEffectsGraphs(effectsGraphConnection: OmpAudioEffectsGraphConnection): Observable<void>;
    setMainAudioEffectsParams(param: OmpAudioEffectParam, effectGraphConnection: OmpAudioEffectsGraphConnection, filter?: OmpAudioEffectFilter): Observable<void>;
    toggleMainAudioRouterSolo(routingPath: OmpAudioRoutingInputType): Observable<void>;
    toggleMainAudioRouterMute(routingPath: OmpAudioRoutingInputType): Observable<void>;
    getSidecarAudios(): SidecarAudioApi[];
    getSidecarAudio(id: string): SidecarAudioApi | undefined;
    getSidecarAudioState(id: string): OmpSidecarAudioState | undefined;
    getSidecarAudioStates(): OmpSidecarAudioState[];
    getSidecarAudioInputSoloMuteState(id: string): OmpSidecarAudioInputSoloMuteState | undefined;
    getSidecarAudioInputSoloMuteStates(): OmpSidecarAudioInputSoloMuteState[];
    getSidecarAudioRouterInitialRoutingConnections(id: string): OmpAudioRoutingConnection[] | undefined;
    setSidecarAudioRouterInitialRoutingConnections(id: string, connections: OmpAudioRoutingConnection[]): Observable<void>;
    createSidecarAudioTrack(track: OmpAudioTrackCreateType): Observable<OmpAudioTrack>;
    createSidecarAudioTracks(tracks: OmpAudioTrackCreateType[]): Observable<OmpAudioTrack[]>;
    activateSidecarAudioTracks(ids: string[] | undefined, deactivateOthers: boolean | undefined): Observable<void>;
    deactivateSidecarAudioTracks(ids: string[] | undefined): Observable<void>;
    setSidecarVolume(volume: number, ids: string[] | undefined): Observable<void>;
    setSidecarMuted(muted: boolean, ids: string[] | undefined): Observable<void>;
    muteSidecar(ids: string[] | undefined): Observable<void>;
    unmuteSidecar(ids: string[] | undefined): Observable<void>;
    getActiveSidecarAudioTracks(): OmpAudioTrack[];
    getSidecarAudioTracks(): OmpAudioTrack[];
    removeSidecarAudioTracks(ids: string[]): Observable<void>;
    removeAllSidecarAudioTracks(): Observable<void>;
    createSidecarAudioRouter(sidecarAudioTrackId: string, inputsNumber: number, outputsNumber?: number): Observable<OmpAudioRouterState>;
    updateSidecarAudioRouterConnections(sidecarAudioTrackId: string, connections: OmpAudioRoutingConnection[]): Observable<void>;
    setSidecarAudioEffectsGraph(sidecarAudioTrackId: string, effectsGraphDef: OmpAudioEffectsGraphDef, effectsGraphConnection: OmpAudioEffectsGraphConnection): Observable<void>;
    removeSidecarAudioEffectsGraphs(sidecarAudioTrackId: string, effectsGraphConnection: OmpAudioEffectsGraphConnection): Observable<void>;
    setSidecarAudioEffectsParams(sidecarAudioTrackId: string, param: OmpAudioEffectParam, effectGraphConnection: OmpAudioEffectsGraphConnection, filter?: {
        routingPath?: Partial<OmpAudioRoutingPath>;
    } & OmpAudioEffectFilter): Observable<void>;
    createSidecarAudioPeakProcessor(sidecarAudioTrackId: string, audioMeterStandard?: AudioMeterStandard): Observable<Observable<AudioPeakProcessorMessageEvent>>;
    exportMainAudioTrackToSidecar(mainAudioTrackId: string): Observable<OmpAudioTrack>;
    exportMainAudioTracksToSidecar(mainAudioTrackIds: string[]): Observable<OmpAudioTrack[]>;
    toggleSidecarAudioRouterSolo(sidecarAudioTrackId: string, routingPath: OmpAudioRoutingInputType): Observable<void>;
    toggleSidecarAudioRouterMute(sidecarAudioTrackId: string, routingPath: OmpAudioRoutingInputType): Observable<void>;
    getThumbnailVttUrl(): string | undefined;
    loadThumbnailVttUrl(thumbnailVttUrl: string): Observable<void>;
    isPiPSupported(): boolean;
    enablePiP(): Observable<void>;
    disablePiP(): Observable<void>;
    getConfig(): VideoControllerConfig;
    getHls(): Hls | undefined;
    updateActiveNamedEventStreams(eventNames: OmpNamedEventEventName[]): Observable<void>;
    getActiveNamedEventStreams(): OmpNamedEventEventName[];
    loadBlackVideo(): Observable<Video>;
    registerAudioEffect(effectType: string, effectFactory: OmpAudioEffectFactory): void;
    extractVideoKeyframe(options?: VideoKeyframeOptions): Observable<VideoKeyframe>;
}
