import { TRTCVideoRotation, TRTCVideoFillMode, TRTCVideoMirrorType, TRTCVideoEncParam, TRTCCameraCaptureParams, Rect } from '../../trtc_define';
import { TRTCDeviceManager } from '../DeviceManager';
declare const NodeTRTCEngine: any;
export declare enum TRTCMediaSourceType {
    kCamera = 0,
    kScreen = 1,
    kImage = 2
}
export declare type TRTCMediaSource = {
    sourceType: TRTCMediaSourceType;
    sourceId: string;
    zOrder: number;
    enableGreenScreen?: boolean;
    rect: Rect;
    isSelected?: boolean;
    rotation?: TRTCVideoRotation;
    fillMode?: TRTCVideoFillMode;
    mirrorType?: TRTCVideoMirrorType;
};
export declare type TRTCMediaMixingEncParam = {
    videoEncoderParams: TRTCVideoEncParam;
    canvasColor: number;
};
/**
 * @namespace TRTCMediaMixingEvent
 * @description 目前只支持 `Windows` 操作系统
 */
export declare enum TRTCMediaMixingEvent {
    /**
     * @description 媒体源选中事件
     *
     * @event TRTCMediaMixingEvent#onSourceSelected
     * @param {TRTCMediaInfo | null} mediaSource 新选中的媒体源数据，取消选中则为`null`
     */
    onSourceSelected = "onSourceSelected",
    /**
     * @description 媒体源移动事件
     *
     * @event TRTCMediaMixingEvent#onSourceMoved
     * @param {TRTCMediaInfo} mediaSource 被移动的媒体源
     * @param {Rect} rect 移动后的位置、区域数据
     */
    onSourceMoved = "onSourceMoved",
    /**
     * @description 媒体源尺寸变化事件
     *
     * @event TRTCMediaMixingEvent#onSourceResized
     * @param {TRTCMediaInfo} mediaSource 尺寸变化的媒体源
     * @param {Rect} rect 尺寸变化后的位置、区域数据
     */
    onSourceResized = "onSourceResized",
    /**
     * @description 媒体源鼠标右键事件
     *
     * @event TRTCMediaMixingEvent#onRightButtonClicked
     * @param {TRTCMediaInfo} mediaSource 鼠标右键点击的媒体源
     */
    onRightButtonClicked = "onRightButtonClicked"
}
export declare enum TRTCMediaMixingErrorCode {
    Success = 0,
    Error = -1,
    InvalidParams = -2,
    NotFoundSource = -3,
    ImageSourceLoadFailed = -4
}
/**
 * 本地混流管理器
 */
export declare class TRTCMediaMixingManager {
    private logPrefix;
    private nodeMediaMixingPlugin;
    private nodeTRTCCloud;
    private deviceManager;
    private eventEmitter;
    private publishParams;
    private mediaMixingDesigner;
    private windowID;
    private view;
    private resizeObserver;
    private sourceList;
    constructor(options: {
        deviceManager: TRTCDeviceManager;
        nodeTRTCCloud: typeof NodeTRTCEngine.NodeRemoteTRTCCloud;
    });
    destroy(): void;
    private eventHandler;
    /**
     * 设置混流视频预览参数
     *
     * @param windowID {Number|Uint8Array} - 操作系统层的窗口 ID，Electron 下可以通过 Electron API [BrowserWindow.getNativeWindowHandle()]{@link https://www.electronjs.org/docs/latest/api/browser-window#wingetnativewindowhandle} 接口获取
     * @param viewOrRegion {HTMLElement | Rect | null} - 本地混流视频显示位置
     *  - 传入 HTMLElement 元素，则 SDK 将本地混流视频显示在 HTMLElement 元素内，同时支持点击选中、移动、缩放媒体源，支持触发右键菜单事件。HTMLElement 元素必须是块元素。
     *  - 传入 Rect 显示区域，则 SDK 将本地混流视频显示在 Rect 指定区域内，不支持点击选中、移动、缩放媒体源，不支持触发右键菜单事件，这些功能您可以在 Web 页面中自行实现。
     *  - 传入 null 则 SDK 将停止显示本地混流视频。
     *
     * @example
     * // Display in HTML Element
     * import TRTCCloud from 'trtc-electron-sdk';
     *
     * const trtcCloud = TRTCCloud.getTRTCShareInstance({
     *   isIPCMode: true
     * });
     *
     * const mediaMixingManager = trtcCloud.getMediaMixingManager();
     *
     * const windowID = 0; // Use Electron API BrowserWindow.getNativeWindowHandle()
     * const previewDOM = document.getElementById("preview-local-mixed-media-stream");
     * mediaMixingManager.setDisplayParams(windowID, previewDOM);
     *
     * @example
     * // Display in a rectangle section
     * import TRTCCloud from 'trtc-electron-sdk';
     *
     * const trtcCloud = TRTCCloud.getTRTCShareInstance({
     *   isIPCMode: true
     * });
     *
     * const mediaMixingManager = trtcCloud.getMediaMixingManager();
     *
     * const windowID = 0; // Use Electron API BrowserWindow.getNativeWindowHandle()
     * const previewDOM = document.getElementById("preview-local-mixed-media-stream");
     * const domRect = previewDOM.getBoundingClientRect();
     * const rect = {
     *   left: domRect.left * window.devicePixelRatio,
     *   right: domRect.right * window.devicePixelRatio,
     *   top: domRect.top * window.devicePixelRatio,
     *   bottom: domRect.bottom * window.devicePixelRatio
     * };
     *
     * mediaMixingManager.setDisplayParams(windowID, previewDOM);
     */
    setDisplayParams(windowID: number | Uint8Array, viewOrRegion: HTMLElement | Rect | null): void;
    /**
     * 添加媒体源
     * @param mediaSource {TRTCMediaSource} - 媒体源信息
     * @returns {Promise<Rect>}
     */
    addMediaSource(mediaSource: TRTCMediaSource): Promise<Rect>;
    /**
     * 删除媒体源
     * @param mediaSource {TRTCMediaSource} - 媒体源信息
     * @returns {Promise<void>}
     */
    removeMediaSource(mediaSource: TRTCMediaSource): Promise<void>;
    /**
     * 更新媒体源
     * @param mediaSource {TRTCMediaSource} - 媒体源信息
     * @returns {Promise<void>}
     */
    updateMediaSource(mediaSource: TRTCMediaSource): Promise<void>;
    /**
     * 设置摄像头采集参数
     * @param cameraID {string} - 摄像头 ID
     * @param params {TRTCCameraCaptureParams} - 摄像头采集参数
     */
    setCameraCaptureParam(cameraID: string, params: TRTCCameraCaptureParams): void;
    /**
     * 开始推流
     * @returns {Promise<void>}
     */
    startPublish(): Promise<void>;
    /**
     * 停止推流
     * @returns {Promise<void>}
     */
    stopPublish(): Promise<void>;
    /**
     * 更新本地混流编码参数
     * @param params {TRTCMediaMixingEncParam} - 推流视频编码参数、背景色等参数
     * @returns {Promise<void>}
     */
    updatePublishParams(params: TRTCMediaMixingEncParam): Promise<void>;
    /**
     * @private
     * 设置服务进程程序路径
     *
     * 开发模式，默认路径：node_modules\\trtc-electron-sdk\\build\\Release\\liteav_media_server.exe
     * 构建模式，默认路径：${resourcesPath}\\liteav_media_server.exe
     *
     * 如果用户应用有特殊配置，默认路径可能找不到服务进程程序，需要自行传入路径。
     *
     * @param path {string} - 服务进程程序路径
     *
     * @returns {Promise<void>}
     */
    setMediaServerPath(path: string): Promise<void>;
    /**
     * 注册事件监听
     *
     * @param event {TRTCMediaMixingEvent} - 事件名称
     * @param func {Function} - 事件回调函数
     */
    on(event: TRTCMediaMixingEvent, func: (...args: any[]) => void): void;
    /**
     * 取消事件监听
     *
     * @param event {TRTCMediaMixingEvent} - 事件名
     * @param func {Function} - 事件回调函数
     */
    off(event: TRTCMediaMixingEvent, func: (...args: any[]) => void): void;
    private initResizeObserver;
    private onPreviewAreaResize;
    private onVisibilityChange;
    private setDisplayRect;
    private createDesigner;
    private destroyDesigner;
    private listenDesignerEvent;
    private unlistenDesignerEvent;
    private onError;
    private onSourceSelected;
    private onSourceMoved;
    private onSourceResized;
    private onRightButtonClicked;
    private isSameMediaSource;
    private isMediaSourceExisted;
    private findMediaSourceIndex;
    private findSelectedMediaSource;
    private unselectMediaSource;
    startCameraDeviceTest(windowID: number | Uint8Array, rect?: Rect): Promise<number>;
    stopCameraDeviceTest(): Promise<number>;
    setCameraTestRenderMirror(mirror: boolean): void;
    setCameraTestDeviceId(cameraId: string): void;
    setCameraTestResolution(width: number, height: number): void;
    setCameraTestVideoPluginPath(path: string): void;
    setCameraTestVideoPluginParameter(params: string): void;
}
export default TRTCMediaMixingManager;
