import Stream from './Stream';
import Client from '../../../BoomCore/BCClient/BCClient';
import { UserId } from '../../type/value';
import { ReportThreshold, StreamType } from '../../type/type';
import { RemoteStreamStats, ReportStats } from '../../type/stats';
import { StreamPlayOption, RemoteStream as RemoteStreamInterface } from '../../type/BRTCStream';
export default class RemoteStream extends Stream implements RemoteStreamInterface {
    private videoOn;
    private audioOn;
    private subscribed;
    private unpublished;
    private mediaUpdateHandler;
    /**
     * 创建远端流
     *
     * @param uid 用户 id
     * @param unumber 用户 number
     * @param webrtcType 底层类型
     * @param stream 底层流
     * @returns 远端流实例
     */
    constructor(uid: UserId, webrtcType?: number, stream?: any, subStream?: any, sid?: string);
    /**
     * 是否已订阅流
     */
    isSubscribed(): boolean;
    /**
     * 是否已经需求推流了
     *
     * @returns
     */
    isUnpublish(): boolean;
    /**
     * 获取流类型 main: 主流，assist: 辅流，一般是屏幕分享
     *
     * @internal
     */
    getType(): StreamType;
    /**
     * 设置输出扬声器设备
     *
     * @param deviceId 扬声器标识
     * @returns
     */
    setAudioOutput(deviceId: string): Promise<any>;
    /**
     * 设置播放音量
     *
     * @param volume 播放音量 [0, 1]
     * @returns
     */
    setAudioVolume(volume: number): void;
    /**
    * 播放远端流
    *
    * @param videoId 挂载 dom
    * @param options 播放选项
    *
    * @returns
    */
    play(videoId: string | HTMLDivElement, options?: StreamPlayOption): Promise<any>;
    /**
     * 获取流的传输信息
     *
     * @returns
     */
    getStats(): Promise<RemoteStreamStats>;
    /**
     * 获取流的上传信息
     * @internal
     * @returns
     */
    getReportStats(reportThreshold: ReportThreshold): Promise<ReportStats>;
    getExtraReport(): {
        event: number;
        audio_stutter: number;
        video_stutter: number;
        downLink: number;
    };
    /**
     * 订阅处理
     *
     * @internal
     */
    onSubscribe(client: Client): void;
    /**
     * 取消订阅处理
     *
     * @internal
     */
    onUnsubscribe(): void;
    setUnpublish(): void;
}
