import { TRTCVideoRotation, TRTCVideoFillMode, TRTCVideoMirrorType, TRTCVideoEncParam, TRTCCameraCaptureParams, Rect, TRTCScreenCaptureProperty } from '../../trtc_define';
export declare enum TRTCMediaMixingErrorCode {
    Success = 0,
    Error = -1,
    InvalidParams = -2,
    NotFoundSource = -3,
    ImageSourceLoadFailed = -4,
    CameraNotAuthorized = -5,
    CameraIsOccupied = -6,
    CameraDisconnected = -7,
    UnsupportedOnlineVideoProtocol = -8,
    UnsupportedLocalVideoFileFormat = -9,
    OnlineVideoConnectFailed = -10,
    OnlineVideoConnectionLost = -11,
    NoAvailableHevcDecoder = -12,
    VideoFileNotExist = -13,
    /**
     * SDK 兜底超时（addMediaSource 在 cpp / js 双层超时内未收到底层 onXxxStarted 回调）。
     *
     * 取一个远离 SDK 自然错误码区间（-1..-13）的值，便于上层稳定区分。
     * 必须与 C++ 端 `kInsertTimeoutErrCode`（SourceManagerProxy）保持一致。
     */
    InsertTimeout = -9001
}
export declare enum TRTCMediaSourceType {
    kCamera = 0,
    kScreen = 1,
    kImage = 2,
    kPhoneMirror = 4,
    kOnlineVideo = 5,
    kVideoFile = 6
}
export declare type TRTCPhoneMirrorParam = {
    platformType: number;
    connectType: number;
    deviceId: string;
    deviceName: string;
    placeholderImagePath: string;
    frameRate: number;
    bitrateKbps: number;
};
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;
    selectedBorderColor?: number | 0xFFFF00;
};
export declare enum TRTCStreamLayoutMode {
    Custom = "Custom",
    None = "None"
}
export declare type TRTCUserStream = {
    userId: string;
    fillMode?: TRTCVideoFillMode;
    rect?: Rect;
    zOrder?: number;
};
export declare type TRTCStreamInfo = {
    userId: string;
    x: number;
    y: number;
    w: number;
    h: number;
    zOrder?: number;
    fillMode?: TRTCVideoFillMode;
};
export declare type TRTCStreamLayout = {
    layoutMode: TRTCStreamLayoutMode;
    userList?: Array<TRTCUserStream>;
    size?: {
        width: number;
        height: number;
    };
    streams?: Array<TRTCStreamInfo>;
};
export declare type TRTCOnlineVideoParam = {
    networkCacheSizeKB: number;
    playoutVolume: number;
};
export declare type TRTCVideoFileParam = {
    playoutVolume: number;
};
export interface ITRTCMediaMixingManager {
    addMediaSource(mediaSource: TRTCMediaSource): Promise<void>;
    removeMediaSource(mediaSource: TRTCMediaSource): Promise<void>;
    updateMediaSource(mediaSource: TRTCMediaSource): Promise<void>;
    setCameraCaptureParam(cameraID: string, param: TRTCCameraCaptureParams): void;
    setPhoneMirrorParam(phoneMirrorSourceId: string, param: TRTCPhoneMirrorParam): void;
    setScreenCaptureProperty(screenWindowID: string, property: TRTCScreenCaptureProperty): void;
    startPublish(): Promise<void>;
    stopPublish(): Promise<void>;
    updatePublishParams(params: TRTCMediaMixingEncParam): Promise<void>;
    /**
     * @deprecated
     */
    setDisplayParams(windowID: number | Uint8Array, regionOrView: HTMLElement | Rect | null): void;
    bindPreviewArea(windowID: Uint8Array, view: HTMLElement | Rect | null): Promise<void>;
    setStreamLayout(options: TRTCStreamLayout): void;
    destroy(): void;
    on(event: string, func: (...args: any[]) => void): void;
    off(event: string, func: (...args: any[]) => void): void;
}
export interface ITRTCMediaMixingEvent {
    onSourceSelected(mediaSource: TRTCMediaSource | null): void;
    onSourceMoved(mediaSource: TRTCMediaSource, rect: Rect): void;
    onSourceResized(mediaSource: TRTCMediaSource, rect: Rect): void;
    onRightButtonClicked(mediaSource: TRTCMediaSource | null): void;
    onSourcePlugged(source: TRTCMediaSource | TRTCPhoneMirrorParam, detail: string): void;
    onSourceConnected(source: TRTCMediaSource | TRTCPhoneMirrorParam, detail: string): void;
    onSourceDisconnected(source: TRTCMediaSource | TRTCPhoneMirrorParam, detail: string): void;
    onSourceUnplugged(source: TRTCMediaSource | TRTCPhoneMirrorParam, detail: string): void;
}
export interface ITRTCMediaMixingService {
    startMediaMixingServer(path: string): Promise<void>;
    stopMediaMixingServer(): Promise<void>;
}
export interface ITRTCMediaMixingServiceEvent {
    onMediaMixingServerLost(): void;
}
