trtc-electron-sdk
Version:
trtc electron sdk
229 lines (228 loc) • 8.69 kB
TypeScript
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;