UNPKG

trtc-electron-sdk

Version:

trtc electron sdk

229 lines (228 loc) 8.69 kB
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;