import { VideoControllerApi } from './video-controller-api';
import { BehaviorSubject, Observable, Subject } from 'rxjs';
import { AudioLoadedEvent, AudioPeakProcessorMessageEvent, AudioSwitchedEvent, HelpMenuGroup, MainAudioChangeEvent, OmpAudioTrack, OmpNamedEvent, OmpNamedEventEventName, SidecarAudioChangeEvent, SidecarAudioCreateEvent, SidecarAudioPeakProcessorMessageEvent, SidecarAudioRemoveEvent, SubtitlesCreateEvent, SubtitlesEvent, SubtitlesLoadedEvent, SubtitlesVttTrack, ThumnbailVttUrlChangedEvent, VideoBufferingEvent, VideoEndedEvent, VideoErrorEvent, VideoFullscreenChangeEvent, VideoHelpMenuChangeEvent, VideoLoadedEvent, VideoLoadingEvent, VideoPlaybackRateEvent, VideoPlayEvent, VideoSafeZoneChangeEvent, VideoSeekedEvent, VideoSeekingEvent, VideoTimeChangeEvent, VideoVolumeEvent, VideoWindowPlaybackStateChangeEvent } from '../types';
import { AudioMeterStandard, PlaybackState, Video, VideoLoadOptions } from './index';
import { VideoControllerConfig } from './video-controller';
import Hls from 'hls.js';
import { AudioInputOutputNode, BufferedTimespan, OmpAudioRouterState, OmpMainAudioState, OmpSidecarAudioState, VideoLoadOptionsInternal, VideoSafeZone, VideoWindowPlaybackState } from './model';
import { OmpAudioRouter } from './audio-router';
import { SidecarAudioApi } from '../api/sidecar-audio-api';
/**
 * Used for switching between {@link VideoControllerApi} instances
 */
export declare class SwitchableVideoController implements VideoControllerApi {
    readonly onVideoLoaded$: BehaviorSubject<VideoLoadedEvent | undefined>;
    readonly onVideoLoading$: Subject<VideoLoadingEvent>;
    readonly onAudioLoaded$: BehaviorSubject<AudioLoadedEvent | undefined>;
    readonly onAudioSwitched$: Subject<AudioSwitchedEvent>;
    readonly onSubtitlesLoaded$: BehaviorSubject<SubtitlesLoadedEvent | undefined>;
    readonly onSubtitlesCreate$: Subject<SubtitlesCreateEvent>;
    readonly onSubtitlesHide$: Subject<SubtitlesEvent>;
    readonly onSubtitlesRemove$: Subject<SubtitlesEvent>;
    readonly onSubtitlesShow$: Subject<SubtitlesEvent>;
    readonly onPlay$: Subject<VideoPlayEvent>;
    readonly onPause$: Subject<VideoPlayEvent>;
    readonly onVideoTimeChange$: Subject<VideoTimeChangeEvent>;
    readonly onSeeking$: Subject<VideoSeekingEvent>;
    readonly onSeeked$: Subject<VideoSeekedEvent>;
    readonly onBuffering$: Subject<VideoBufferingEvent>;
    readonly onEnded$: Subject<VideoEndedEvent>;
    readonly onVideoError$: Subject<VideoErrorEvent>;
    readonly onVolumeChange$: Subject<VideoVolumeEvent>;
    readonly onFullscreenChange$: Subject<VideoFullscreenChangeEvent>;
    readonly onVideoSafeZoneChange$: Subject<VideoSafeZoneChangeEvent>;
    readonly onPlaybackRateChange$: Subject<VideoPlaybackRateEvent>;
    readonly onVideoWindowPlaybackStateChange$: Subject<VideoWindowPlaybackStateChangeEvent>;
    readonly onHelpMenuChange$: Subject<VideoHelpMenuChangeEvent>;
    readonly onPlaybackState$: Subject<PlaybackState>;
    readonly onThumbnailVttUrlChanged$: Subject<ThumnbailVttUrlChangedEvent>;
    readonly onMainAudioChange$: BehaviorSubject<MainAudioChangeEvent | undefined>;
    readonly onMainAudioPeakProcessorMessage$: Subject<AudioPeakProcessorMessageEvent>;
    readonly onSidecarAudioCreate$: Subject<SidecarAudioCreateEvent>;
    readonly onSidecarAudioRemove$: Subject<SidecarAudioRemoveEvent>;
    readonly onSidecarAudioChange$: Subject<SidecarAudioChangeEvent>;
    readonly onSidecarAudioPeakProcessorMessage$: Subject<SidecarAudioPeakProcessorMessageEvent>;
    readonly onActiveNamedEventStreamsChange$: Subject<OmpNamedEventEventName[]>;
    readonly onNamedEvent$: Subject<OmpNamedEvent>;
    protected _videoController: VideoControllerApi;
    protected _eventBreaker$: Subject<void>;
    protected _destroyed$: Subject<void>;
    constructor(videoController: VideoControllerApi);
    destroy(): void;
    protected switchToController(videoController: VideoControllerApi): void;
    protected attachEventListeners(videoController: VideoControllerApi): void;
    addSafeZone(videoSafeZone: VideoSafeZone): Observable<VideoSafeZone>;
    appendHelpMenuGroup(helpMenuGroup: HelpMenuGroup): Observable<void>;
    calculateFrameToTime(frameNumber: number): number;
    calculateTimeToFrame(time: number): number;
    clearSafeZones(): Observable<void>;
    getSafeZones(): VideoSafeZone[];
    formatToTimecode(time: number): string;
    getAudioTracks(): any[];
    getBufferedTimespans(): BufferedTimespan[];
    getActiveAudioTrack(): any;
    getCurrentFrame(): number;
    getCurrentTime(): number;
    getCurrentTimecode(): string;
    getDuration(): number;
    getFrameRate(): number;
    getHTMLVideoElement(): HTMLVideoElement;
    getAudioContext(): AudioContext;
    getMainAudioRouter(): OmpAudioRouter | undefined;
    getHelpMenuGroups(): HelpMenuGroup[];
    getPlaybackRate(): number;
    getPlaybackState(): PlaybackState | undefined;
    getTotalFrames(): number;
    getVideo(): Video | undefined;
    getVideoLoadOptions(): VideoLoadOptions | undefined;
    getVolume(): number;
    isFullscreen(): boolean;
    isMuted(): boolean;
    isPaused(): boolean;
    isPlaying(): boolean;
    isSeeking(): boolean;
    isVideoLoaded(): boolean;
    loadVideoInternal(sourceUrl: string, frameRate: number | string, options: VideoLoadOptions | undefined, optionsInternal: VideoLoadOptionsInternal): Observable<Video>;
    loadVideo(sourceUrl: string, frameRate: number | string, options?: VideoLoadOptions): Observable<Video>;
    reloadVideo(): Observable<Video>;
    mute(): Observable<void>;
    parseTimecodeToFrame(timecode: string): number;
    parseTimecodeToTime(timecode: string): number;
    pause(): Observable<void>;
    play(): Observable<void>;
    prependHelpMenuGroup(helpMenuGroup: HelpMenuGroup): Observable<void>;
    clearHelpMenuGroups(): Observable<void>;
    removeSafeZone(id: string): Observable<void>;
    seekFromCurrentFrame(framesCount: number): Observable<boolean>;
    seekFromCurrentTime(timeAmount: number): Observable<boolean>;
    seekNextFrame(): Observable<boolean>;
    seekPreviousFrame(): Observable<boolean>;
    seekToFrame(frame: number): Observable<boolean>;
    seekToPercent(percent: number): Observable<boolean>;
    seekToEnd(): Observable<boolean>;
    seekToTime(time: number): Observable<boolean>;
    seekToTimecode(timecode: string): Observable<boolean>;
    setActiveAudioTrack(id: string): Observable<void>;
    setPlaybackRate(playbackRate: number): Observable<void>;
    setVolume(volume: number): Observable<void>;
    toggleFullscreen(): Observable<void>;
    toggleMuteUnmute(): Observable<void>;
    togglePlayPause(): Observable<void>;
    unmute(): Observable<void>;
    getVideoWindowPlaybackState(): VideoWindowPlaybackState;
    isDetachable(): boolean;
    canDetach(): boolean;
    canAttach(): boolean;
    detachVideoWindow(): Observable<void>;
    attachVideoWindow(): Observable<void>;
    createSubtitlesVttTrack(subtitlesVttTrack: SubtitlesVttTrack): Observable<SubtitlesVttTrack | undefined>;
    getActiveSubtitlesTrack(): SubtitlesVttTrack | undefined;
    getSubtitlesTracks(): SubtitlesVttTrack[];
    hideSubtitlesTrack(id: string): Observable<void>;
    removeAllSubtitlesTracks(): Observable<void>;
    removeSubtitlesTrack(id: string): Observable<void>;
    showSubtitlesTrack(id: string): Observable<void>;
    createMainAudioRouter(inputsNumber: number, outputsNumber?: number): Observable<OmpAudioRouterState>;
    createMainAudioRouterWithOutputsResolver(inputsNumber: number, outputsNumberResolver: (maxChannelCount: number) => number): Observable<OmpAudioRouterState>;
    createMainAudioPeakProcessor(audioMeterStandard?: AudioMeterStandard): Observable<Observable<AudioPeakProcessorMessageEvent>>;
    getMainAudioSourceNode(): AudioNode;
    getMainAudioState(): OmpMainAudioState | undefined;
    routeMainAudioRouterNodes(newAudioInputOutputNodes: AudioInputOutputNode[]): Observable<void>;
    getSidecarAudios(): SidecarAudioApi[];
    getSidecarAudio(id: string): SidecarAudioApi | undefined;
    getSidecarAudioStates(): OmpSidecarAudioState[];
    createSidecarAudioTrack(track: Partial<OmpAudioTrack>): Observable<OmpAudioTrack>;
    createSidecarAudioTracks(tracks: Partial<OmpAudioTrack>[]): Observable<OmpAudioTrack[]>;
    activateSidecarAudioTracks(ids: string[], deactivateOthers: boolean | undefined): Observable<void>;
    deactivateSidecarAudioTracks(ids: string[]): Observable<void>;
    getActiveSidecarAudioTracks(): OmpAudioTrack[];
    getSidecarAudioTracks(): OmpAudioTrack[];
    removeSidecarAudioTracks(ids: string[]): Observable<void>;
    removeAllSidecarAudioTracks(): Observable<void>;
    createSidecarAudioRouter(sidecarAudioTrackId: string, inputsNumber: number, outputsNumber?: number): Observable<OmpAudioRouterState>;
    routeSidecarAudioRouterNodes(sidecarAudioTrackId: string, newAudioInputOutputNodes: AudioInputOutputNode[]): Observable<void>;
    createSidecarAudioPeakProcessor(sidecarAudioTrackId: string, audioMeterStandard?: AudioMeterStandard): Observable<Observable<AudioPeakProcessorMessageEvent>>;
    exportMainAudioTrackToSidecar(mainAudioTrackId: string): Observable<OmpAudioTrack>;
    exportMainAudioTracksToSidecar(mainAudioTrackIds: string[]): Observable<OmpAudioTrack[]>;
    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>;
}
