import { V2LiveRotation, V2LiveFillMode, V2LiveAudioQuality, V2LiveVideoEncoderParam, V2LiveMirrorType, V2LiveMode, V2LivePusherEvent } from '../live_define';
import { TRTCDeviceInfo, TRTCDeviceType } from '../../trtc_define';
/**
 * 腾讯云直播推流器
 *
 * @example
 *
 * // 创建/销毁 V2LivePusher 对象，以及回调事件监听。
 *
 * import { V2LivePusher } from 'trtc-electron-sdk';
 * const livePusher = V2LivePusher.createV2LivePusher(V2LiveMode.V2LiveModeRTMP);
 *
 * subscribeEvents = (livePusher) => {
 *  livePusher.on('onError', (errcode, errmsg) => {
 *      console.info('livePusher_demo: onError :' + errcode + " msg" + errmsg);
 *  });
 * };
 *
 * V2LivePusher.releaseV2LivePusher(livePusher);
 *
 */
export declare class V2LivePusher {
    private livePusher;
    private deviceManager;
    private pusherVideoRender;
    private cameraTestVideoRender;
    private pixelFormat;
    private eventEmitter;
    private logger;
    /**
     * 创建 V2LivePusher 实例
     *
     * @param {V2LiveMode} mode - 推流模式，参考 V2LiveMode 的定义。
     * @return {V2LivePusher}   - 推流器实例
     */
    static createV2LivePusher(mode: V2LiveMode): V2LivePusher;
    /**
     * 析构 V2LivePusher 对象
     *
     * @param {V2LivePusher}  v2livepusher    - 推流器实例
     */
    static releaseV2LivePusher(livePusher: V2LivePusher): void;
    private constructor();
    destroy(): void;
    /**
     * 监听 LivePusher 对象事件。
     *
     * @param {V2LivePusherEvent} event     - 事件名称。
     * @param {Function} listener           - 事件回调函数。
     */
    on(event: V2LivePusherEvent | symbol, listener: (...args: any[]) => void): void;
    /**
     * 取消监听 LivePusher 对象事件。
     *
     * @param {V2LivePusherEvent} event     - 事件名称。
     * @param {Function} listener           - 事件回调函数。
     */
    off(event: V2LivePusherEvent | symbol, listener: (...args: any[]) => void): void;
    /**
     * 设置本地摄像头预览 View, 本地摄像头采集到的画面，最终会显示到传入的 View 上。
     *
     * @param {HTMLElement | null} view     - 本地摄像头预览 View。
     */
    setRenderView(view: HTMLElement | null): void;
    /**
     * 设置本地摄像头预览镜像
     * @param {V2LiveMirrorType} mirrorType  - 摄像头镜像类型, 默认值为 V2LiveMirrorTypeAuto。
     * V2LiveMirrorTypeEnable 前置摄像头 和 后置摄像头，都切换为镜像模式。
     * V2LiveMirrorTypeDisable 前置摄像头 和 后置摄像头，都切换为非镜像模式。
     *
     * @return {Number}                        - 参考 V2LiveCode 的定义
     */
    setRenderMirror(mirrorType: V2LiveMirrorType): number;
    /**
     * 设置视频编码镜像，默认不开启。
     * 编码镜像只影响观众端看到的视频效果
     *
     * @param {Boolean} mirror - 是否镜像。
     * @return {Number}        - 参考 V2LiveCode 的定义
     */
    setEncoderMirror(mirror: boolean): number;
    /**
     * 设置本地摄像头预览画面的旋转角度, 默认不旋转。
     * 只旋转本地预览画面，不影响推流出去的画面
     *
     * @param {V2LiveRotation} rotation   - 预览画面的旋转角度, 参考 V2LiveRotation 的定义。
     * @return {Number}                   - 参考 V2LiveCode 的定义
     */
    setRenderRotation(rotation: V2LiveRotation): number;
    /**
     * 设置本地摄像头预览画面的填充模式
     *
     * @param {V2LiveFillMode} mode   - 画面填充模式，参考 V2LiveFillMode 的定义。
     * @return {Number}                 - 参考 V2LiveCode 的定义
     */
    setRenderFillMode(mode: V2LiveFillMode): number;
    /**
     * 打开本地摄像头
     *
     * @param {String} cameraId     - 摄像头ID，可通过 getCameraDevicesList 获取。
     * @return {Number}             - 参考 V2LiveCode 的定义
     */
    startCamera(cameraId: string): number;
    /**
     * 关闭本地摄像头
     *
     * @return {Number}             - 参考 V2LiveCode 的定义
     */
    stopCamera(): number;
    /**
     * 打开麦克风
     *
     * @return {Number}             - 参考 V2LiveCode 的定义
     */
    startMicrophone(): number;
    /**
     * 关闭麦克风
     *
     * @return {Number}             - 参考 V2LiveCode 的定义
     */
    stopMicrophone(): number;
    /**
     * 暂停推流器的音频流
     *
     * @return {Number}             - 参考 V2LiveCode 的定义
     */
    pauseAudio(): number;
    /**
     * 恢复推流器的音频流
     *
     * @return {Number}             - 参考 V2LiveCode 的定义
     */
    resumeAudio(): number;
    /**
     * 暂停推流器的视频流
     *
     * @return {Number}             - 参考 V2LiveCode 的定义
     */
    pauseVideo(): number;
    /**
     * 恢复推流器的视频流
     *
     * @return {Number}             - 参考 V2LiveCode 的定义
     */
    resumeVideo(): number;
    /**
     * 开始音视频数据推流
     *
     * @param {String} url          - 推流的目标地址，支持任意推流服务端。
     * @return {Number}             - 参考 V2LiveCode 的定义
     */
    startPush(url: string): number;
    /**
     * 停止推送音视频数据
     *
     * @return {Number}             - 参考 V2LiveCode 的定义
     */
    stopPush(): number;
    /**
     * 当前推流器是否正在推流中
     *
     * @return {Number}             - 参考 V2LiveCode 的定义
     */
    isPushing(): number;
    /**
     * 设置推流音频质量
     *
     * @param {V2LiveAudioQuality} quality      - 音频质量，参考 V2LiveAudioQuality 的定义。
     * @return {Number}                         - 参考 V2LiveCode 的定义
     */
    setAudioQuality(quality: V2LiveAudioQuality): number;
    /**
     * 设置推流视频编码参数
     *
     * @param {V2LiveVideoEncoderParam} param   - 视频编码参数，参考 V2LiveVideoEncoderParam 的定义。
     * @return {Number}                         - 参考 V2LiveCode 的定义
     */
    setVideoQuality(param: V2LiveVideoEncoderParam): number;
    /**
     * 启用采集音量大小提示
     *
     * @param {Number} intervalMs               - 决定了 onMicrophoneVolumeUpdate 回调的触发间隔，单位为ms，最小间隔为100ms，如果小于等于0则会关闭回调，建议设置为300ms；【默认值】：0，不开启。
     * @return {Number}                         - 参考 V2LiveCode 的定义
     */
    enableVolumeEvaluation(intervalMs: number): number;
    /**
     * 获取摄像头设备列表
     *
     * @example
     * var cameralist = livePusher.getCameraDevicesList();
     * for (i=0;i<cameralist.length;i++) {
     *    var camera = cameralist[i];
     *    console.info("camera deviceName: " + camera.deviceName + " deviceId:" + camera.deviceId);
     * }
     * @return {Array<TRTCDeviceInfo>} 摄像头管理器列表
     */
    getCameraDevicesList(): Array<TRTCDeviceInfo>;
    /**
     * 设置要使用的摄像头
     *
     * @param {String} deviceId - 从 getCameraDevicesList 中得到的设备 ID
     */
    setCurrentCameraDevice(deviceId: string): void;
    /**
     * 获取当前使用的摄像头
     *
     * @return {TRTCDeviceInfo} 设备信息，能获取设备 ID 和设备名称
     */
    getCurrentCameraDevice(): TRTCDeviceInfo;
    /**
     * 开始摄像头测试
     *
     * @param {HTMLElement} view - 摄像头测试的显示区域
     */
    startCameraDeviceTest(view: HTMLElement): void;
    /**
     * 停止摄像头测试
     */
    stopCameraDeviceTest(): void;
    /**
     * 获取麦克风设备列表
     *
     * @example
     *   var miclist = livePusher.getMicDevicesList();
     *   for (i=0;i<miclist.length;i++) {
     *     var mic = miclist[i];
     *     console.info("mic deviceName: " + mic.deviceName + " deviceId:" + mic.deviceId);
     *   }
     * @return {Array<TRTCDeviceInfo>} 麦克风管理器列表
     */
    getMicDevicesList(): Array<TRTCDeviceInfo>;
    /**
     * 获取当前选择的麦克风
     *
     * @return {TRTCDeviceInfo} 设备信息，能获取设备 ID 和设备名称
     */
    getCurrentMicDevice(): TRTCDeviceInfo;
    /**
     * 设置要使用的麦克风
     *
     * 选择指定的麦克风作为录音设备，不调用该接口时，默认选择索引为0的麦克风
     *
     * @param {String} micId - 从 getMicDevicesList 中得到的设备 ID
     */
    setCurrentMicDevice(micId: string): void;
    /**
     * 获取系统当前麦克风设备音量
     *
     * 注意：查询的是系统硬件音量大小。
     * @return {Number} 音量值，范围是0 - 100
     */
    getCurrentMicDeviceVolume(): number;
    /**
     * 设置系统当前麦克风设备的音量
     *
     * 注意：该接口的功能是调节系统采集音量，如果用户直接调节系统设置的采集音量时，该接口的设置结果会被用户的操作所覆盖。
     * @param {Number} volume - 麦克风音量值，范围0 - 100
     */
    setCurrentMicDeviceVolume(volume: number): void;
    /**
     * 设置系统当前麦克风设备的静音状态
     *
     * @param {Boolean} mute 设置为 true 时，麦克风设备静音；设置为 false时，麦克风设备取消静音
     */
    setCurrentMicDeviceMute(mute: boolean): void;
    /**
     * 获取系统当前麦克风设备是否静音
     *
     * @return {Boolean} 静音状态
     */
    getCurrentMicDeviceMute(): boolean;
    /**
     * 获取扬声器设备列表
     *
     * @example
     *   var speakerlist = livePusher.getSpeakerDevicesList();
     *   for (i=0;i<speakerlist.length;i++) {
     *     var speaker = speakerlist[i];
     *     console.info("mic deviceName: " + speaker.deviceName + " deviceId:" + speaker.deviceId);
     *   }
     * @return {Array<TRTCDeviceInfo>} 扬声器管理器列表
     */
    getSpeakerDevicesList(): Array<TRTCDeviceInfo>;
    /**
     * 获取当前的扬声器设备
     *
     * @return {TRTCDeviceInfo} 设备信息，能获取设备 ID 和设备名称
     */
    getCurrentSpeakerDevice(): TRTCDeviceInfo;
    /**
     * 设置要使用的扬声器
     *
     * @param {String} speakerId - 从 getSpeakerDevicesList 中得到的设备 ID
     */
    setCurrentSpeakerDevice(speakerId: string): void;
    /**
     * 获取系统当前扬声器设备音量
     *
     * @return {Number} 扬声器音量，范围0 - 100
     */
    getCurrentSpeakerVolume(): number;
    /**
     * 设置系统当前扬声器设备音量
     *
     * 注意：该接口的功能是调节系统播放音量，如果用户直接调节系统设置的播放音量时，该接口的设置结果会被用户的操作所覆盖。
     *
     * @param {Number} volume - 设置的扬声器音量，范围0 - 100
     */
    setCurrentSpeakerVolume(volume: number): void;
    /**
     * 设置系统当前扬声器设备的静音状态
     *
     * @param {Boolean} mute 设置为 true 时，扬声器设备静音；设置为 false时，扬声器设备取消静音
     */
    setCurrentSpeakerDeviceMute(mute: boolean): void;
    /**
     * 获取系统当前扬声器设备是否静音
     *
     * @return {Boolean} 静音状态
     */
    getCurrentSpeakerDeviceMute(): boolean;
    /**
     * 设置 SDK 使用的音频设备自动跟随系统默认设备
     *
     * 仅支持设置麦克风和扬声器类型，摄像头暂不支持跟随系统默认设备
     *
     * @param {TRTCDeviceType} deviceType - 设备类型，只支持麦克风和扬声器，摄像头不支持
     * @param {Boolean} enable - 是否跟随系统默认的音频设备
     *  - true: 跟随。当系统默认音频设备发生改变时，SDK 立即切换音频设备。
     *  - false: 不跟随。只有当 SDK 使用的音频设备被移除后或插入新的音频设备为系统默认设备时，SDK 才切换至系统默认的音频设备。
     */
    enableFollowingDefaultAudioDevice(deviceType: TRTCDeviceType, enable: boolean): void;
    private enableCustomVideoRender;
    private _initPusherRender;
    private _destroyPusherRender;
    private _setVideoRenderBuffer;
    private _addVideoRenderCallback;
    private _removeVideoRenderCallback;
    private _pusherVideoRenderCallback;
    private _cameraTestVideoRenderCallback;
    private initObserver;
    fire(event: string, ...args: any): void;
    private handleOnError;
    private handleOnWarning;
    private handleOnCaptureFirstAudioFrame;
    private handleOnCaptureFirstVideoFrame;
    private handleOnMicrophoneVolumeUpdate;
    private handleOnPushStatusUpdate;
    private handleOnStatisticsUpdate;
}
