UNPKG

trtc-electron-sdk

Version:

trtc electron sdk

395 lines (394 loc) 16.2 kB
import { TRTCCameraCaptureParams, Rect, TRTCScreenCaptureProperty } from '../../trtc_define'; import { TRTCMediaSource, TRTCMediaMixingEncParam, ITRTCMediaMixingManager, TRTCPhoneMirrorParam, TRTCStreamLayout } from './types'; import { TRTCDeviceManager } from '../DeviceManager'; export { TRTCMediaMixingErrorCode, TRTCMediaSourceType, TRTCMediaSource, TRTCMediaMixingEncParam, TRTCPhoneMirrorParam, TRTCStreamLayoutMode, TRTCUserStream, TRTCStreamInfo, TRTCStreamLayout } from './types'; declare const NodeTRTCEngine: any; /** * @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", /** * @description 错误事件 * * @event TRTCMediaMixingEvent#onError * @param {TRTCMediaMixingErrorCode} errCode 错误码 * @param {String} errorMessage 错误信息 * */ onError = "onError", /** * @description 设备插入事件 * * @event TRTCMediaMixingEvent#onSourcePlugged * @param {TRTCPhoneMirrorParam} source 投屏手机状态信息 * @param {String} detail 投屏手机状态变化详情 */ onSourcePlugged = "onSourcePlugged", /** * @description 设备链接事件 * * @event TRTCMediaMixingEvent#onSourceConnected * @param {TRTCPhoneMirrorParam} source 投屏手机状态信息 * @param {String} detail 投屏手机状态变化详情 */ onSourceConnected = "onSourceConnected", /** * @description 设备断开链接事件 * * @event TRTCMediaMixingEvent#onSourceDisconnected * @param {TRTCPhoneMirrorParam} source 投屏手机状态信息 * @param {String} detail 投屏手机状态变化详情 */ onSourceDisconnected = "onSourceDisconnected", /** * @description 设备拔出事件 * * @event TRTCMediaMixingEvent#onSourceUnplugged * @param {TRTCPhoneMirrorParam} source 投屏手机状态信息 * @param {String} detail 投屏手机状态变化详情 */ onSourceUnplugged = "onSourceUnplugged", /** * @description 媒体源画面大小发生变化 * * 当输入媒体源的画面大小发生变化时,会通过该接口返回该输入源最新的尺寸,您可以根据该尺寸来动态调整画面的比例。 * @event TRTCMediaMixingEvent#onMediaSourceSizeChanged * @param {TRTCMediaSource} mediasource 媒体源信息 * @param {Object} size 媒体源最新的画面大小 * @param {Number} size.width 媒体源最新宽度 * @param {Number} size.height 媒体源最新高度 */ onMediaSourceSizeChanged = "onMediaSourceSizeChanged" } /** * 本地混流管理器 */ export declare class TRTCMediaMixingManager implements ITRTCMediaMixingManager { private logPrefix; private nodeMediaMixingPlugin; private nodeTRTCCloud; private deviceManager; private eventEmitter; private publishParams; private mediaMixingDesigner; private windowID; private view; private resizeObserver; private mixingVideoWidth; private mixingVideoHeight; private sourceList; private streamLayoutManager; constructor(options: { deviceManager: TRTCDeviceManager; nodeTRTCCloud: typeof NodeTRTCEngine.NodeRemoteTRTCCloud; }); destroy(): void; /** * @deprecated * @private * 设置视频流预览参数 * * @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, rect); */ setDisplayParams(windowID: number | Uint8Array, viewOrRegion: HTMLElement | Rect | null): void; /** * 设置视频流预览区域 * * @param windowID {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.bindPreviewArea(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.bindPreviewArea(windowID, rect); */ bindPreviewArea(windowID: 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; /** * 设置手机投屏参数 * @param phoneMirrorSourceId {string} - 手机投屏媒体源 ID * @param param {TRTCPhoneMirrorParam} - 手机投屏参数,目前只支持优先投屏 */ setPhoneMirrorParam(phoneMirrorSourceId: string, param: TRTCPhoneMirrorParam): void; /** * 设置屏幕采集参数 * @param screenOrWindowID {String} - 屏幕 ID 或 窗口 ID * @param property {TRTCScreenCaptureProperty} - 屏幕采集属性 */ setScreenCaptureProperty(screenOrWindowID: string, property: TRTCScreenCaptureProperty): void; /** * 本地混流开始推流 * @returns {Promise<void>} */ startPublish(): Promise<void>; /** * 本地混流停止推流 * @returns {Promise<void>} */ stopPublish(): Promise<void>; /** * 更新本地混流编码参数 * @param params {TRTCMediaMixingEncParam} - 推流视频编码参数、背景色等参数 * @returns {Promise<void>} */ updatePublishParams(params: TRTCMediaMixingEncParam): Promise<void>; /** * 设置连麦视频流布局 * * @param layout {TRTCStreamLayout} - 视频流布局信息 * * @example * // 设置自定义连麦布局 * import TRTCCloud, { TRTCStreamLayout, TRTCStreamLayoutMode, TRTCVideoFillMode } from 'trtc-electron-sdk'; * * const trtcCloud = TRTCCloud.getTRTCShareInstance({ * isIPCMode: true * }); * * const mediaMixingManager = trtcCloud.getMediaMixingManager(); * if (mediaMixingManager) { * const streamLayout: TRTCStreamLayout = { * "layoutMode": TRTCStreamLayoutMode.Custom, * "userList": [ * { * "userId": "", // 本地用户 userId * "rect": { * "left": 0, * "top": 0, * "right": 296, * "bottom": 494 * }, * "fillMode": TRTCVideoFillMode.TRTCVideoFillMode_Fill, // 视频填满显示区 * "zOrder": 0 * }, * { * "userId": "849014", * "rect": { * "left": 296, * "top": 0, * "right": 592, * "bottom": 247 * }, * "fillMode": TRTCVideoFillMode.TRTCVideoFillMode_Fill, * "zOrder": 1 * }, * { * "userId": "p20", * "rect": { * "left": 296, * "top": 247, * "right": 592, * "bottom": 494 * }, * "fillMode": TRTCVideoFillMode.TRTCVideoFillMode_Fill, * "zOrder": 2 * } * ] * }; * mediaMixingManager.setStreamLayout(streamLayout); * } * * @example * // 清除连麦布局,本地混流恢复居中填充显示(默认效果) * import TRTCCloud, { TRTCStreamLayout, TRTCStreamLayoutMode, TRTCVideoFillMode } from 'trtc-electron-sdk'; * * const trtcCloud = TRTCCloud.getTRTCShareInstance({ * isIPCMode: true * }); * * const mediaMixingManager = trtcCloud.getMediaMixingManager(); * if (mediaMixingManager) { * const streamLayout: TRTCStreamLayout = { * "layoutMode": TRTCStreamLayoutMode.None * }; * mediaMixingManager.setStreamLayout(streamLayout); * } */ setStreamLayout(layout: TRTCStreamLayout): 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 updateMixingVideoSize; private listenDesignerEvent; private unlistenDesignerEvent; private onError; private onSourceSelected; private onSourceMoved; private onSourceResized; private onRightButtonClicked; private isSameMediaSource; private isMediaSourceExisted; private findMediaSourceIndex; private findSelectedMediaSource; private unselectMediaSource; private handleCppCallbackEvent; private onMediaSourceSizeChanged; private onPhoneMirrorSourceChanged; 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;