TUIMediaMixingManager
是本地混流管理器,支持将本地的多路视频流合并成一路视频流发送。// 使用 npmnpm i @tencentcloud/tuiroom-engine-electron@2.4.0-alpha.3 --save// 使用 pnpmpnpm i @tencentcloud/tuiroom-engine-electron@2.4.0-alpha.3 --save// 使用 yarnyarn add @tencentcloud/tuiroom-engine-electron@2.4.0-alpha.3
import TUIRoomEngine, { TUIMediaMixingManager } from '@tencentcloud/tuiroom-engine-electron';const mediaMixingManager: TUIMediaMixingManager = TUIRoomEngine.getMediaMixingManager();
API | 说明 |
设置本地混流服务进程的程序路径 | |
设置本地混流视频预览窗口及区域 | |
添加多媒体源 | |
删除多媒体源 | |
更新多媒体源 | |
设置摄像头采集参数 | |
开始本地混流并推流 | |
结束本地混流和推流 | |
修改本地混流参数 |
类型 | 说明 |
摄像头采集参数 | |
本地混流配置参数 | |
媒体源数据 | |
矩形坐标区域,包含 left、top、right、bottom 属性 | |
屏幕/窗口数据 | |
混流视频编码参数 |
枚举 | 说明 |
摄像头采集模式 | |
媒体源填充模式 | |
媒体源镜像模式 | |
媒体源旋转角度 | |
媒体源类型 | |
分辨率模式(横屏分辨率/竖屏分辨率) | |
视频分辨率 |
import TUIRoomEngine, { TUIMediaMixingManager } from '@tencentcloud/tuiroom-engine-electron';const mediaMixingManager: TUIMediaMixingManager = TUIRoomEngine.getMediaMixingManager();async function initMediaServer() {const isPackaged = location.href.startsWith("file"); // Same with Electron `app.isPackaged`const resourcesPath = (globalThis as any).process.resourcesPath;let mediaServerPath = '';if (isPackaged) {mediaServerPath = `${resourcesPath}\\\\liteav_media_server.exe`;} else {const appPath = ''; // Value from Electron main process: app.getAppPath()mediaServerPath = `${appPath}\\\\node_modules\\\\trtc-electron-sdk\\\\build\\\\Release\\\\liteav_media_server.exe`;}mediaMixingManager.setMediaServerPath(mediaServerPath);}initMediaServer();
参数 | 类型 | 校验 | 默认值 | 说明 |
path | string | - | - | 本地混流服务进程的程序路径 |
Promise
<void
>import TUIRoomEngine, { TUIMediaMixingManager } from '@tencentcloud/tuiroom-engine-electron';const mediaMixingManager: TUIMediaMixingManager = TUIRoomEngine.getMediaMixingManager();// Value from Electron main BrowserWindow.getNativeWindowHandle()const nativeWindowHandle = new Uint8Array(8);const previewDOMNode = document.getElementByID("preview-media-mixing");const clientRect = previewDOMNode.getBoundingClientRect();mediaMixingManager.setDisplayParams(window.nativeWindowHandle, {left: clientRect.left * window.devicePixelRatio, // Notice: window.devicePixelRatioright: clientRect.right * window.devicePixelRatio, // Notice: window.devicePixelRatiotop: clientRect.top * window.devicePixelRatio, // Notice: window.devicePixelRatiobottom: clientRect.bottom * window.devicePixelRatio, // Notice: window.devicePixelRatio});
参数 | 类型 | 校验 | 默认值 | 说明 |
windowID | Uint8Array | - | - | 混流视频预览窗口 ID,通过 Electron API BrowserWindow.getNativeWindowHandle() 拿到 |
rect | - | - | 混流视频预览区域位置、大小 |
void
import TUIRoomEngine, { TUIMediaMixingManager } from '@tencentcloud/tuiroom-engine-electron';const mediaMixingManager: TUIMediaMixingManager = TUIRoomEngine.getMediaMixingManager();const mediaSource:TUIMediaSource = {sourceType: TUIMediaSourceType.kCamera,sourceId: '', // camera ID, screen ID, window ID or image pathzOrder: 1, // should be unique among all media sourcesrect: {left: 0,top: 0,right: 640,bottom: 360},};mediaMixingManager.addMediaSource(mediaSource);
参数 | 类型 | 校验 | 默认值 | 说明 |
mediaSource | - | - | 媒体源信息 |
Promise
<TUIRect> 返回默认添加位置import TUIRoomEngine, { TUIMediaMixingManager } from '@tencentcloud/tuiroom-engine-electron';const mediaMixingManager: TUIMediaMixingManager = TUIRoomEngine.getMediaMixingManager();const mediaSource:TUIMediaSource = {sourceType: TUIMediaSourceType.kCamera, // requiredsourceId: '', // requiredzOrder: 1, // any valid valuerect: { // any valid valueleft: 0,top: 0,right: 640,bottom: 360},};mediaMixingManager.removeMediaSource(mediaSource);
参数 | 类型 | 校验 | 默认值 | 说明 |
mediaSource | - | - | 媒体源信息 |
Promise
<void
>import TUIRoomEngine, { TUIMediaMixingManager } from '@tencentcloud/tuiroom-engine-electron';const mediaMixingManager: TUIMediaMixingManager = TUIRoomEngine.getMediaMixingManager();const mediaSource:TUIMediaSource = {sourceType: TUIMediaSourceType.kCamera, // requiredsourceId: '', // requiredzOrder: 1, // should be unique among all media sourcesrect: { // any valid valueleft: 0,top: 0,right: 640,bottom: 360},};mediaMixingManager.updateMediaSource(mediaSource);
参数 | 类型 | 校验 | 默认值 | 说明 |
mediaSource | - | - | 媒体源信息 |
Promise
<void
>import TUIRoomEngine, { TUIMediaMixingManager, TUICameraCaptureMode } from '@tencentcloud/tuiroom-engine-electron';const mediaMixingManager: TUIMediaMixingManager = TUIRoomEngine.getMediaMixingManager();mediaMixingManager.setCameraCaptureParam('<camera ID>', {mode: TUICameraCaptureMode.kCameraCaptureManual,width: 1280,height: 720,});
参数 | 类型 | 校验 | 默认值 | 说明 |
cameraId | string | 非空 | - | 摄像头 ID |
param | - | - | 摄像头采集参数 |
import TUIRoomEngine, { TUIMediaMixingManager } from '@tencentcloud/tuiroom-engine-electron';const mediaMixingManager: TUIMediaMixingManager = TUIRoomEngine.getMediaMixingManager();mediaMixingManager.startPublish();
Promise
<void
>import TUIRoomEngine, { TUIMediaMixingManager } from '@tencentcloud/tuiroom-engine-electron';const mediaMixingManager: TUIMediaMixingManager = TUIRoomEngine.getMediaMixingManager();mediaMixingManager.stopPublish();
Promise
<void
>import TUIRoomEngine, {TUIMediaMixingManager,TUIResolutionMode,TUIVideoResolution} from '@tencentcloud/tuiroom-engine-electron';const mediaMixingManager: TUIMediaMixingManager = TUIRoomEngine.getMediaMixingManager();mediaMixingManager.updatePublishParams({inputSourceList: [], // TUIMediaSource[], can be emptyvideoEncoderParams: {videoResolution: TUIVideoResolution.kVideoResolution_1920_1080,resMode: TUIResolutionMode.kResolutionMode_Landscape,videoFps: 30,videoBitrate: 3000,minVideoBitrate: 2000,enableAdjustRes: true},canvasColor: 0xc6c6c6, // integer number of RGB});
参数 | 类型 | 校验 | 默认值 | 说明 |
params | - | - | 本地混流配置参数 |
Promise
<void
>字段 | 类型 | 说明 |
mode | 摄像头采集偏好 | |
width | number | 采集图像宽度 |
height | number | 采集图像高度 |
字段 | 类型 | 说明 |
inputSourceList | 媒体源列表 | |
videoEncoderParams | 混流视频编码参数 | |
canvasColor | number | 混流视频背景色,格式 RGB,默认:0x0 |
字段 | 类型 | 说明 |
sourceType | 媒体源类型 | |
sourceId | string | 媒体源唯一 ID |
rect | 相对于本地混流布局的坐标位置 | |
zOrder | number | 显示层级。显示层级高的媒体源会遮挡显示层级底的媒体源,多个媒体源不能拥有相同层级。 |
rotation | 可选项,旋转角度 | |
fillMode | 可选项,填充模式 | |
mirrorType | 可选项,镜像模式 | |
isSelected | boolean | 可选项,默认:false,是否选中媒体源 |
字段 | 类型 | 说明 |
left | number | 左边线坐标 |
top | number | 顶边线坐标 |
right | number | 右边线坐标 |
bottom | number | 底边线坐标 |
字段 | 类型 | 说明 |
type | 媒体源类型:屏幕/窗口 | |
sourceId | number | 唯一 ID |
sourceName | string | 名称 |
isMinimizeWindow | boolean | 是否最小化窗口 |
isMainScreen | boolean | 是否主屏幕 |
rect | 相对显示屏幕的坐标位置 |
字段 | 类型 | 说明 |
videoResolution | 视频分辨率 | |
resMode | 视频横竖屏模式 | |
videoFps | number | 帧率 |
videoBitrate | number | 码率 |
minVideoBitrate | number | 最小码率 |
enableAdjustRes | boolean | 是否自适应调整码率,默认:true |
枚举项 | 类型 | 说明 |
kCameraResolutionStrategyAuto | number | 自动调整采集参数。SDK 根据实际的采集设备性能及网络情况,选择合适的摄像头输出参数,在设备性能及视频预览质量之间,维持平衡。 |
kCameraResolutionStrategyPerformance | number | 优先保证设备性能。SDK 根据用户设置编码器的分辨率和帧率,选择最接近的摄像头输出参数,从而保证设备性能。 |
kCameraResolutionStrategyHighQuality | number | 优先保证视频预览质量。SDK选择较高的摄像头输出参数,从而提高预览视频的质量。在这种情况下,会消耗更多的 CPU 及内存做视频前处理。 |
kCameraCaptureManual | number | 允许用户设置本地摄像头采集的视频宽高。 |
枚举项 | 类型 | 说明 |
kMediaFillMode_Fill | number | 图像铺满显示区域,超出显示视窗的视频部分将被截掉,画面内容可能显示不完整。 |
kMediaFillMode_Fit | number | 图像长边填满显示区域,短边区域会被填充黑色,画面内容显示完整。 |
枚举项 | 类型 | 说明 |
kMediaMirrorType_Enable | number | 开启镜像 |
kMediaMirrorType_Disable | number | 禁止镜像 |
枚举项 | 类型 | 说明 |
kMediaRotation0 | number | 旋转 0 度 |
kMediaRotation90 | number | 旋转 90 度 |
kMediaRotation180 | number | 旋转 180 度 |
kMediaRotation270 | number | 旋转 270 度 |
枚举项 | 类型 | 说明 |
kCamera | number | 摄像头 |
kScreen | number | 屏幕/窗口 |
kImage | number | 图片 |
枚举项 | 类型 | 说明 |
kResolutionMode_Landscape | number | 横屏模式 |
kResolutionMode_Portrait | number | 竖屏模式 |
枚举项 | 类型 | 说明 |
kVideoResolution_120_120 | number | 建议码率(VideoCall)80kbps; 建议码率(LIVE)120kbps |
kVideoResolution_160_160 | number | 建议码率(VideoCall)100kbps; 建议码率(LIVE)150kbps |
kVideoResolution_270_270 | number | 建议码率(VideoCall)200kbps; 建议码率(LIVE)300kbps |
kVideoResolution_480_480 | number | 建议码率(VideoCall)350kbps; 建议码率(LIVE)500kbps |
kVideoResolution_160_120 | number | 建议码率(VideoCall)100kbps; 建议码率(LIVE)150kbps |
kVideoResolution_240_180 | number | 建议码率(VideoCall)150kbps; 建议码率(LIVE)250kbps |
kVideoResolution_280_210 | number | 建议码率(VideoCall)200kbps; 建议码率(LIVE)300kbps |
kVideoResolution_320_240 | number | 建议码率(VideoCall)250kbps; 建议码率(LIVE)375kbps |
kVideoResolution_400_300 | number | 建议码率(VideoCall)300kbps; 建议码率(LIVE)450kbps |
kVideoResolution_480_360 | number | 建议码率(VideoCall)400kbps; 建议码率(LIVE)600kbps |
kVideoResolution_640_480 | number | 建议码率(VideoCall)1000kbps; 建议码率(LIVE)1500kbps |
kVideoResolution_160_90 | number | 建议码率(VideoCall)150kbps; 建议码率(LIVE)250kbps |
kVideoResolution_256_144 | number | 建议码率(VideoCall)200kbps; 建议码率(LIVE)300kbps |
kVideoResolution_320_180 | number | 建议码率(VideoCall)250kbps; 建议码率(LIVE)400kbps |
kVideoResolution_480_270 | number | 建议码率(VideoCall)350kbps; 建议码率(LIVE)550kbps |
kVideoResolution_640_360 | number | 建议码率(VideoCall)500kbps; 建议码率(LIVE)900kbps |
kVideoResolution_960_540 | number | 建议码率(VideoCall)850kbps; 建议码率(LIVE)1300kbps |
kVideoResolution_1280_720 | number | 建议码率(VideoCall)1200kbps; 建议码率(LIVE)1800kbps |
kVideoResolution_1920_1080 | number | 建议码率(VideoCall)2000kbps; 建议码率(LIVE)3000kbps |
本页内容是否解决了您的问题?