/// <reference types="node" />
import { EventEmitter } from 'events';
import { TRTCVideoStreamType, TRTCScreenCaptureSourceInfo, Rect, TRTCVideoEncParam, TRTCVideoPixelFormat, TRTCRenderParams, TRTCCameraCaptureParams } from '../trtc_define';
export declare enum TRTCLocalMediaTranscodingError {
    Success = 0,
    Error = -1,
    InvalidParams = -2,
    NotFoundSource = -3,
    ImageSourceLoadFailed = -4
}
/**
 * @namespace TRTCLocalMediaTranscodingEvent
 * @description 目前只支持 Windows
 */
export declare enum TRTCLocalMediaTranscodingEvents {
    /**
     * @description 本地混流转码开启的事件
     *
     * 当您调用 [startTranscoding]{@link TRTCLocalMediaTranscoder#startTranscoding} 时启动本地混流转码时，是否启动成功会通过此回调同步给您。
     *
     * @event TRTCLocalMediaTranscodingEvent#onTranscodingStarted
     * @param {TRTCLocalMediaTranscodingError} errCode - 错误码。
     * @param {String} errMsg - 错误信息。
     */
    onTranscodingStarted = "onTranscodingStarted",
    /**
     * @description 本地混流转码停止的事件
     *
     * 当您通过 [stopTranscoding]{@link TRTCLocalMediaTranscoder#stopTranscoding} 停止本地混流转码时，SDK 便会抛出此事件。
     *
     * @event TRTCLocalMediaTranscodingEvent#onTranscodingStopped
     * @param {Number} reason - 停止原因，0：用户主动停止；1：被动停止，有可能采集源失效了
     * @param {String} errMsg - 停止原因描述信息。
     */
    onTranscodingStopped = "onTranscodingStopped",
    /**
     * @description 本地摄像头开启的事件
     * 当您调用 [startCameraSource]{@link TRTCLocalMediaTranscoder#startCameraSource} 打开摄像头时，是否启动成功会通过此回调同步给您。
     *
     * @event TRTCLocalMediaTranscodingEvent#onCameraSourceStarted
     * @param {String} deviceId -  摄像头设备 Id 。
     * @param {TRTCLocalMediaTranscodingError} errCode - 错误码。
     * @param {String} errMsg - 错误信息。
     */
    onCameraSourceStarted = "onCameraSourceStarted",
    /**
     * @description  本地摄像头停止的事件
     *
     * @event TRTCLocalMediaTranscodingEvent#onCameraSourceStopped
     * @param {String} deviceId -  摄像头设备 Id 。
     * @param {String} reasonMsg - 停止原因描述信息。
     */
    onCameraSourceStopped = "onCameraSourceStopped",
    /**
     * @description  图片混流开启的事件
     * 当您调用 [addImageSource]{@link TRTCLocalMediaTranscoder#addImageSource} 打开摄像头时，是否启动成功会通过此回调同步给您。
     *
     * @event TRTCLocalMediaTranscodingEvent#onImageSourceStarted
     * @param {String} imagePath -  图片路径 。
     * @param {TRTCLocalMediaTranscodingError} errCode - 错误码。
     * @param {String} errMsg - 错误信息。
     */
    onImageSourceStarted = "onImageSourceStarted",
    /**
     * @description 图片混流停止的事件
     * @event TRTCLocalMediaTranscodingEvent#onImageSourceStopped
     * @param {String} imagePath -  图片路径 。
     */
    onImageSourceStopped = "onImageSourceStopped",
    /**
     * @description 屏幕分享开启的事件
     * * 当您通过 [startScreenSource]{@link TRTCLocalMediaTranscoder#startScreenSource} 等相关接口启动屏幕分享时，SDK 便会抛出此事件回调。
     *
     * @event TRTCLocalMediaTranscodingEvent#onScreenSourceStarted
     * @param {String} sourceId - 屏幕或者窗口 Id 。
     * @param {TRTCLocalMediaTranscodingError} errCode - 错误码。
     * @param {String} errMsg - 错误信息。
     */
    onScreenSourceStarted = "onScreenSourceStarted",
    /**
     * @description 屏幕分享暂停的事件
     * @event TRTCLocalMediaTranscodingEvent#onScreenSourcePaused
     * @param {String} sourceId - 屏幕或者窗口 Id 。
     * @param {int} reason - 原因：
     * - 1：注意此字段的含义在 MAC 和 Windows
     * 平台有稍微差异。屏幕窗口不可见暂停（Mac）。表示设置屏幕分享参数导致的暂停（Windows）。
     * - 2：表示屏幕分享窗口被最小化导致的暂停（仅 Windows）。
     * - 3：表示屏幕分享窗口被隐藏导致的暂停（仅 Windows）。
     */
    onScreenSourcePaused = "onScreenSourcePaused",
    /**
     * @description 屏幕分享恢复的事件
     * @event TRTCLocalMediaTranscodingEvent#onScreenSourceResumed
     * @param {String} sourceId - 屏幕或者窗口 Id 。
     * @param {int} reason - 原因：
     * - 1：注意此字段的含义在 MAC 和 Windows
     * 平台有稍微差异。屏幕窗口恢复可见从而恢复分享（Mac）。屏幕分享参数设置完毕后自动恢复（Windows）。
     * - 2：表示屏幕分享窗口从最小化被恢复（仅 Windows）。
     * - 3：表示屏幕分享窗口从隐藏被恢复（仅 Windows）。
     */
    onScreenSourceResumed = "onScreenSourceResumed",
    /**
     * @description 屏幕分享停止的事件
     * 当您通过 [stopScreenSource]{@link TRTCLocalMediaTranscoder#stopScreenSource} 停止屏幕分享时，SDK 便会抛出此事件回调。
     *
     * @event TRTCLocalMediaTranscodingEvent#onScreenSourceStopped
     * @param {String} sourceId - 屏幕或者窗口 Id 。
     * @param {int} reason - 原因：0：用户主动停止；1：屏幕窗口关闭导致停止；2：表示屏幕分享的显示屏状态变更（如接口被拔出、投影模式变更等）。
     */
    onScreenSourceStopped = "onScreenSourceStopped"
}
export declare enum TRTCLocalMediaTranscodingSourceType {
    MediaSourceCamera = 0,
    MediaSourceScreen = 1,
    MediaSourceImage = 2,
    MediaSourceRemoteVideo = 3
}
export declare type TRTCLocalMediaTranscodingSource = {
    sourceType: TRTCLocalMediaTranscodingSourceType;
    cameraDeviceId?: string;
    screenSourceId?: string;
    imagePath?: string;
    userId?: string;
    rect: Rect;
    zOrder: number;
    renderParams: TRTCRenderParams;
};
export declare type TRTCLocalMediaTranscodingParams = {
    inputSourceList: TRTCLocalMediaTranscodingSource[];
    videoEncoderParams: TRTCVideoEncParam;
    canvasColor: number;
};
/**
 * @description 本地媒体流混流转码（目前只支持 Windows）
 *
 * @extends EventEmitter
 *
 * @example
 *   // 运行示例
 *   import TRTCCloud, {
 *    TRTCCameraCaptureMode,
 *    TRTCVideoRotation,
 *    TRTCVideoFillMode,
 *    TRTCVideoMirrorType,
 *    TRTCVideoStreamType,
 *    TRTCLocalMediaTranscodingSourceType,
 *    TRTCVideoResolution,
 *    TRTCVideoResolutionMode,
 *    TRTCVideoPixelFormat
 *   } from 'trtc-electron-sdk';
 *
 *   const trtcCloud = TRTCCloud.getTRTCShareInstance();
 *   const cameraList =trtcCloud.getCameraDevicesList();
 *
 *   // 获取本地合图转码推流对象
 *   const localMediaTranscoder =trtcCloud.createLocalMediaTranscoder({
 *     pixelFormat: TRTCVideoPixelFormat.TRTCVideoPixelFormat_I420,
 *   });
 *
 *   // 注册事件监听
 *   // 监听合图开始、结束事件
 *   localMediaTranscoder.on('onTranscodingStarted', (errCode: number, errMsg: string) => {
 *     console.log(`onTranscodingStarted { errCode:${errCode} errMsg:${errMsg}`);
 *   });
 *   localMediaTranscoder.on('onTranscodingStopped', (reason: number, reasonMsg: string) => {
 *     console.log(`onTranscodingStopped { reason:${reason} reasonMsg:${reasonMsg} }`);
 *   });
 *   // 监听摄像头事件
 *   localMediaTranscoder.on('onCameraSourceStarted', (deviceId: string, errCode: number, errMsg: string) => {
 *     console.log(`onCameraSourceStarted { deviceId:${deviceId} errCode:${errCode} errMsg:${errMsg} }`);
 *   });
 *   localMediaTranscoder.on('onCameraSourceStopped', (deviceId: string, reasonMsg: string) => {
 *     console.log(`onCameraSourceStopped { deviceId:${deviceId} reasonMsg:${reasonMsg}}`);
 *   });
 *   // 监听屏幕、窗口分享事件
 *   localMediaTranscoder.on('onScreenSourceStarted', (sourceId: string, errCode: number, errMsg: string) => {
 *     console.log(`onScreenSourceStarted { sourceId:${sourceId} errCode:${errCode} errMsg:${errMsg} }`);
 *   });
 *   localMediaTranscoder.on('onScreenSourceStopped', (sourceId: string, reason: number) => {
 *     console.log(`onScreenSourceStopped { sourceId:${sourceId}, reason:${reason} }`);
 *   });
 *   // 监听图片事件
 *   localMediaTranscoder.on('onImageSourceStarted', (imagePath: string, errCode: number, errMsg: string) => {
 *     console.log(`onImageSourceStarted { imagePath:${imagePath} errCode:${errCode} errMsg:${errMsg} }`);
 *   });
 *   localMediaTranscoder.on('onImageSourceStopped', (imagePath: string) => {
 *     console.log(`onImageSourceStopped { imagePath:${imagePath} }`);
 *   });
 *
 *   // 开启摄像头一
 *   localMediaTranscoder.startCameraSource(cameraList[0].deviceId);
 *   localMediaTranscoder.setCameraCaptureParams(
 *     cameraList[0].deviceId,
 *     {
 *       mode: TRTCCameraCaptureMode.TRTCCameraResolutionStrategyAuto,
 *       width: 480,
 *       height: 480,
 *     }
 *   );
 *
 *   // 开启摄像头二
 *   localMediaTranscoder.startCameraSource(cameraList[1].deviceId);
 *   localMediaTranscoder.setCameraCaptureParams(
 *     cameraList[1].deviceId,
 *     {
 *       mode: TRTCCameraCaptureMode.TRTCCameraResolutionStrategyAuto,
 *       width: 960,
 *       height: 540
 *     }
 *   );
 *
 *
 *   // 开启屏幕一
 *   localMediaTranscoder.startScreenSource(screenSourceList[0], {top:10, left:10, right:1200, bottom:800});
 *
 *   // 开启屏幕二
 *   localMediaTranscoder.startScreenSource(screenSourceList[1], {top:0, left:0, right:0, bottom:0});
 *
 *   // 加载图片一
 *   localMediaTranscoder.addImageSource('<please set valid image path>', 15);
 *
 *   // 加载图片二
 *   localMediaTranscoder.addImageSource('<please set valid image path>', 15);
 *
 *   // 启动合图转码并推流
 *   localMediaTranscoder.startTranscoding(
 *     TRTCVideoStreamType.TRTCVideoStreamTypeBig,
 *     {
 *       inputSourceList: [
 *         { // camera 1
 *           sourceType: TRTCLocalMediaTranscodingSourceType.MediaSourceCamera,
 *           cameraDeviceId: cameraList[0].deviceId,
 *           rect: { left: 0, top: 0, right: 320, bottom: 180 },
 *           zOrder: 1,
 *           renderParams: {
 *             rotation: TRTCVideoRotation.TRTCVideoRotation0,
 *             fillMode: TRTCVideoFillMode.TRTCVideoFillMode_Fit,
 *             mirrorType: TRTCVideoMirrorType.TRTCVideoMirrorType_Disable
 *           },
 *         },
 *         { // camera 2
 *           sourceType: TRTCLocalMediaTranscodingSourceType.MediaSourceCamera,
 *           cameraDeviceId: cameraList[1].deviceId,
 *           rect: {left: 320 + 20, top: 180 + 20, right: 640 + 20, bottom: 360 + 20},
 *           zOrder: 2,
 *           renderParams: {
 *             rotation: TRTCVideoRotation.TRTCVideoRotation90,
 *             fillMode: TRTCVideoFillMode.TRTCVideoFillMode_Fill,
 *             mirrorType: TRTCVideoMirrorType.TRTCVideoMirrorType_Enable
 *           },
 *         },
 *         {
 *           // screen 1
 *           sourceType: TRTCLocalMediaTranscodingSourceType.MediaSourceScreen,
 *           screenSourceId: screenSourceList[0].sourceId,
 *           rect: {left: 320 + 20, top: 0, right: 640 + 20, bottom: 180},
 *           zOrder: 3,
 *           renderParams: {
 *             rotation: TRTCVideoRotation.TRTCVideoRotation180,
 *             fillMode: TRTCVideoFillMode.TRTCVideoFillMode_Fit,
 *             mirrorType: TRTCVideoMirrorType.TRTCVideoMirrorType_Enable
 *           },
 *         },
 *         {
 *           // screen 2
 *           sourceType: TRTCLocalMediaTranscodingSourceType.MediaSourceScreen,
 *           screenSourceId: screenSourceList[1].sourceId,
 *           rect: {left: 0, top: 180 + 20, right: 320, bottom: 360 + 20},
 *           zOrder: 4,
 *           renderParams: {
 *             rotation: TRTCVideoRotation.TRTCVideoRotation270,
 *             fillMode: TRTCVideoFillMode.TRTCVideoFillMode_Fill,
 *             mirrorType: TRTCVideoMirrorType.TRTCVideoMirrorType_Auto
 *           },
 *         },
 *         { // image 1
 *           sourceType: TRTCLocalMediaTranscodingSourceType.MediaSourceImage,
 *           imagePath: '<please set valid image path>',
 *           rect: {left: 0, top: 360 + 40, right: 320, bottom: 540 + 40},
 *           zOrder: 5,
 *           renderParams: {
 *             rotation: TRTCVideoRotation.TRTCVideoRotation90, // 不会生效，参数设置将被忽略
 *             fillMode: TRTCVideoFillMode.TRTCVideoFillMode_Fit,
 *             mirrorType: TRTCVideoMirrorType.TRTCVideoMirrorType_Enable // 不会生效，参数设置将被忽略
 *           },
 *         },
 *         { // image 2
 *           sourceType: TRTCLocalMediaTranscodingSourceType.MediaSourceImage,
 *           imagePath: '<please set valid image path>',
 *           rect: {left: 320 + 20, top: 360 + 40, right: 640, bottom: 540 + 40},
 *           zOrder: 5,
 *           renderParams: {
 *             rotation: TRTCVideoRotation.TRTCVideoRotation0, // 不会生效，参数设置将被忽略
 *             fillMode: TRTCVideoFillMode.TRTCVideoFillMode_Fill,
 *             mirrorType: TRTCVideoMirrorType.TRTCVideoMirrorType_Disable // 不会生效，参数设置将被忽略
 *           },
 *         }
 *       ],
 *       videoEncoderParams: {
 *         videoResolution: TRTCVideoResolution.TRTCVideoResolution_960_720,
 *         resMode: TRTCVideoResolutionMode.TRTCVideoResolutionModeLandscape,
 *         videoFps: 30,
 *         videoBitrate: 800,
 *         minVideoBitrate: 0,
 *         enableAdjustRes: false,
 *       },
 *       canvasColor: 0xff0000, // 0x61b9f1,
 *     }
 *   );
 *
 *   // 设置本地预览
 *   const view = document.getElementById("preview-view");
 *   localMediaTranscoder.setMixedVideoRenderView(view as HTMLElement);
 */
declare class TRTCLocalMediaTranscoder extends EventEmitter {
    private nativeLocalMediaTranscoder;
    private renderer;
    private container;
    private pixelFormat;
    constructor(nativeLocalMediaTranscoder: any, pixelFormat?: TRTCVideoPixelFormat);
    destroy(): void;
    private validateTranscodingConfig;
    /**
     * 启动本地混流转码
     *
     * @param streamType {TRTCVideoStreamType} - 指定使用 TRTC 的 TRTCVideoStreamTypeBig 来推流，还是 TRTCVideoStreamTypeSub 来推流。
     * @param params {TRTCLocalMediaTranscodingParams} - 指定本地混流转码的参数
     * @param params.inputSourceList {TRTCLocalMediaTranscodingSource} - 【字段含义】指定转码流中的每一路输入媒体源配置的信息。
     *  -【推荐取值】该字段是一个 TRTCLocalMediaTranscodingSource  类型的数组，数组中的每一个元素都用来代表每一路输入媒体源的信息。
     *  -【特别说明】媒体源信息不支持留空，否则 TRTCLocalMediaTranscoder 的 onTranscodingStarted 会报错。
     * @param params.videoEncoderParams {TRTCVideoEncParam} -【字段含义】转码流的视频编码参数
     * @param params.canvasColor {Number} - 【字段含义】指定混合画面的底色。
     *  -【推荐取值】默认值：0x000000 代表黑色。格式为十六进制数字，比如：“0x61B9F1” 代表 RGB 分别为（97、158、241）。
     *
     * @fires [onTranscodingStarted]{@link TRTCLocalMediaTranscodingEvent#onTranscodingStarted}
     */
    startTranscoding(streamType: TRTCVideoStreamType, params: TRTCLocalMediaTranscodingParams): void;
    /**
     * 更新本地混流转码参数
     *
     * @param params {TRTCLocalMediaTranscodingParams} - 指定本地混流转码的参数
     */
    updateTranscodingParams(params: TRTCLocalMediaTranscodingParams): void;
    /**
     *  停止本地混流转码
     *
     * @fires [onTranscodingStopped]{@link TRTCLocalMediaTranscodingEvent#onTranscodingStopped}
     */
    stopTranscoding(): void;
    /**
     * 启动摄像头采集
     *
     * @param deviceId {String} - 摄像头设备 Id
     *
     * @fires [onCameraSourceStarted]{@link TRTCLocalMediaTranscodingEvent#onCameraSourceStarted}
     */
    startCameraSource(deviceId: string): void;
    /**
     * 设置摄像头采集参数
     *
     * @param deviceId {String} - 摄像头设备 Id
     * @param cameraCaptureParams  {TRTCCameraCaptureParams} - 指定摄像头采集分辨率和帧率
     */
    setCameraCaptureParams(deviceId: string, cameraCaptureParams: TRTCCameraCaptureParams): void;
    /**
     * 停止摄像头采集
     * @param deviceId {String} - 摄像头设备 Id
     *
     * @fires [onCameraSourceStopped]{@link TRTCLocalMediaTranscodingEvent#onCameraSourceStopped}
     */
    stopCameraSource(deviceId: string): void;
    /**
     * 启动屏幕/窗口采集
     *
     * @param source {TRTCScreenCaptureSourceInfo} - 屏幕/窗口采集的详细参数
     * @param rect {Rect} - 指定捕获的区域
     *
     * @fires [onScreenSourceStarted]{@link TRTCLocalMediaTranscodingEvent#onScreenSourceStarted}
     */
    startScreenSource(source: TRTCScreenCaptureSourceInfo, rect: Rect): void;
    /**
     * 停止屏幕/窗口采集
     * @param sourceId {String} - 屏幕/窗口的 Id
     *
     * @fires [onScreenSourceStopped]{@link TRTCLocalMediaTranscodingEvent#onScreenSourceStopped}
     */
    stopScreenSource(sourceId: string): void;
    /**
     * 启动图片采集
     * @param path {String} - 图片路径 ，目前只支持 BMP、JPG、PNG、GIF 四种格式
     * @param fps {Number} - 采集输出帧率，可以不设置由 SDK 做最佳决策
     *
     * @fires [onImageSourceStarted]{@link TRTCLocalMediaTranscodingEvent#onImageSourceStarted}
     */
    addImageSource(path: string, fps: number): void;
    /**
     * 停止图片采集
     * @param path {String} - 图片路径
     *
     * @fires [onImageSourceStopped]{@link TRTCLocalMediaTranscodingEvent#onImageSourceStopped}
     */
    removeImageSource(path: string): void;
    /**
     * 设置本地混流转码视频预览节点
     * @param view {HTMLElement | null} - 如果传入的是 HTML 元素，必须是块元素；传入 null 时，会停止视频预览
     */
    setMixedVideoRenderView(view: HTMLElement | null): void;
    private setMixedVideoFrameRenderCallback;
    private unsetMixedVideoFrameRenderCallback;
    private setEventCallback;
    private renderMixedVideoFrame;
}
export default TRTCLocalMediaTranscoder;
