import { IStreamOptions, IStreamPrepareOptions } from '../Video/IOptions';
import StreamProtocol from './StreamProtocol';
import IVideoProperties from '../Video/IVideoProperties';
import { ITrackInfo, TrackType } from './IStreamTrackInfo';
import { IStreamErrorEvent, IStreamEvent, IStreamTracksChangedEvent } from './streamEvents';
export default interface IStream {
    prepare(uri: string, x: number, y: number, width: number, height: number, options?: IStreamPrepareOptions | keyof typeof StreamProtocol): Promise<void>;
    play(uri: string, x: number, y: number, width: number, height: number, options?: IStreamOptions | keyof typeof StreamProtocol): Promise<void>;
    stop(uri: string, x: number, y: number, width: number, height: number): Promise<void>;
    pause(uri: string, x: number, y: number, width: number, height: number): Promise<void>;
    resume(uri: string, x: number, y: number, width: number, height: number): Promise<void>;
    getTracks(videoId: IVideoProperties): Promise<ITrackInfo[]>;
    selectTrack(videoId: IVideoProperties, trackType: TrackType, groupId: string, trackIndex: number): Promise<void>;
    resetTrack(videoId: IVideoProperties, trackType: TrackType, groupId?: string): Promise<void>;
    onTracksChanged(listener: (event: IStreamTracksChangedEvent) => void): void;
    onError(listener: (event: IStreamErrorEvent) => void): void;
    onConnected(listener: (event: IStreamEvent<'connected'>) => void): void;
    onDisconnected(listener: (event: IStreamEvent<'disconnected'>) => void): void;
    onPrepare(listener: (event: IStreamEvent<'prepare'>) => void): void;
    onPlay(listener: (event: IStreamEvent<'play'>) => void): void;
    onStop(listener: (event: IStreamEvent<'stop'>) => void): void;
    onPause(listener: (event: IStreamEvent<'pause'>) => void): void;
    onResume(listener: (event: IStreamEvent<'resume'>) => void): void;
}
