TUIMediaMixingManager

最近更新时间:2024-09-03 18:25:12

我的收藏

简介

TUIMediaMixingManager 是本地混流管理器,支持将本地的多路视频流合并成一路视频流发送。
安装方式
// 使用 npm
npm i @tencentcloud/tuiroom-engine-electron@2.4.0-alpha.3 --save

// 使用 pnpm
pnpm i @tencentcloud/tuiroom-engine-electron@2.4.0-alpha.3 --save

// 使用 yarn
yarn add @tencentcloud/tuiroom-engine-electron@2.4.0-alpha.3

使用示例:
import TUIRoomEngine, { TUIMediaMixingManager } from '@tencentcloud/tuiroom-engine-electron';

const mediaMixingManager: TUIMediaMixingManager = TUIRoomEngine.getMediaMixingManager();

API

API
说明
设置本地混流服务进程的程序路径
设置本地混流视频预览窗口及区域
添加多媒体源
删除多媒体源
更新多媒体源
设置摄像头采集参数
开始本地混流并推流
结束本地混流和推流
修改本地混流参数

类型定义

类型
说明
摄像头采集参数
本地混流配置参数
媒体源数据
TUIRect
矩形坐标区域,包含 left、top、right、bottom 属性
屏幕/窗口数据
混流视频编码参数

枚举定义

枚举
说明
摄像头采集模式
媒体源填充模式
媒体源镜像模式
媒体源旋转角度
媒体源类型
分辨率模式(横屏分辨率/竖屏分辨率)
视频分辨率

API 详情

setMediaServerPath()

设置本地混流服务进程的程序路径。创建实例对象后,必须先调用此方法,其它方法的调用才能生效。
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>

setDisplayParams()

设置本地混流视频预览窗口及区域
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.devicePixelRatio
right: clientRect.right * window.devicePixelRatio, // Notice: window.devicePixelRatio
top: clientRect.top * window.devicePixelRatio, // Notice: window.devicePixelRatio
bottom: clientRect.bottom * window.devicePixelRatio, // Notice: window.devicePixelRatio
});
参数
参数
类型
校验
默认值
说明
windowID
Uint8Array
-
-
混流视频预览窗口 ID,通过 Electron API BrowserWindow.getNativeWindowHandle() 拿到
rect
TUIRect
-
-
混流视频预览区域位置、大小
返回值 void

addMediaSource()

添加多媒体源
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 path
zOrder: 1, // should be unique among all media sources
rect: {
left: 0,
top: 0,
right: 640,
bottom: 360
},
};
mediaMixingManager.addMediaSource(mediaSource);
参数
参数
类型
校验
默认值
说明
mediaSource
-
-
媒体源信息
返回值 Promise<TUIRect> 返回默认添加位置

removeMediaSource()

删除多媒体源
import TUIRoomEngine, { TUIMediaMixingManager } from '@tencentcloud/tuiroom-engine-electron';

const mediaMixingManager: TUIMediaMixingManager = TUIRoomEngine.getMediaMixingManager();
const mediaSource:TUIMediaSource = {
sourceType: TUIMediaSourceType.kCamera, // required
sourceId: '', // required
zOrder: 1, // any valid value
rect: { // any valid value
left: 0,
top: 0,
right: 640,
bottom: 360
},
};
mediaMixingManager.removeMediaSource(mediaSource);
参数
参数
类型
校验
默认值
说明
mediaSource
-
-
媒体源信息
返回值 Promise<void>

updateMediaSource()

更新多媒体源
import TUIRoomEngine, { TUIMediaMixingManager } from '@tencentcloud/tuiroom-engine-electron';

const mediaMixingManager: TUIMediaMixingManager = TUIRoomEngine.getMediaMixingManager();
const mediaSource:TUIMediaSource = {
sourceType: TUIMediaSourceType.kCamera, // required
sourceId: '', // required
zOrder: 1, // should be unique among all media sources
rect: { // any valid value
left: 0,
top: 0,
right: 640,
bottom: 360
},
};
mediaMixingManager.updateMediaSource(mediaSource);
参数
参数
类型
校验
默认值
说明
mediaSource
-
-
媒体源信息
返回值 Promise<void>

setCameraCaptureParam()

设置摄像头采集参数
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
-
-
摄像头采集参数
返回值

startPublish()

开始本地混流并推流 注意:进房后才能成功推流。
import TUIRoomEngine, { TUIMediaMixingManager } from '@tencentcloud/tuiroom-engine-electron';

const mediaMixingManager: TUIMediaMixingManager = TUIRoomEngine.getMediaMixingManager();
mediaMixingManager.startPublish();
返回值 Promise<void>

stopPublish()

结束本地混流和推流
import TUIRoomEngine, { TUIMediaMixingManager } from '@tencentcloud/tuiroom-engine-electron';

const mediaMixingManager: TUIMediaMixingManager = TUIRoomEngine.getMediaMixingManager();
mediaMixingManager.stopPublish();
返回值 Promise<void>

updatePublishParams()

修改本地混流参数
import TUIRoomEngine, {
TUIMediaMixingManager,
TUIResolutionMode,
TUIVideoResolution
} from '@tencentcloud/tuiroom-engine-electron';

const mediaMixingManager: TUIMediaMixingManager = TUIRoomEngine.getMediaMixingManager();
mediaMixingManager.updatePublishParams({
inputSourceList: [], // TUIMediaSource[], can be empty
videoEncoderParams: {
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>

类型详情

TUICameraCaptureParam

摄像头采集参数
字段
类型
说明
mode
摄像头采集偏好
width
number
采集图像宽度
height
number
采集图像高度

TUILocalMediaTranscodingParams

本地混流配置参数
字段
类型
说明
inputSourceList
媒体源列表
videoEncoderParams
混流视频编码参数
canvasColor
number
混流视频背景色,格式 RGB,默认:0x0

TUIMediaSource

媒体源数据
字段
类型
说明
sourceType
媒体源类型
sourceId
string
媒体源唯一 ID
rect
TUIRect
相对于本地混流布局的坐标位置
zOrder
number
显示层级。显示层级高的媒体源会遮挡显示层级底的媒体源,多个媒体源不能拥有相同层级。
rotation
可选项,旋转角度
fillMode
可选项,填充模式
mirrorType
可选项,镜像模式
isSelected
boolean
可选项,默认:false,是否选中媒体源

TUIRect

矩形区域
矩形坐标区域,用于控制本地混流时,每一路媒体源在混流布局中的位置。
字段
类型
说明
left
number
左边线坐标
top
number
顶边线坐标
right
number
右边线坐标
bottom
number
底边线坐标

TUIScreenCaptureSourceInfo

屏幕/窗口数据
字段
类型
说明
type
媒体源类型:屏幕/窗口
sourceId
number
唯一 ID
sourceName
string
名称
isMinimizeWindow
boolean
是否最小化窗口
isMainScreen
boolean
是否主屏幕
rect
TUIRect
相对显示屏幕的坐标位置

TUIVideoEncParam

混流视频编码参数
字段
类型
说明
videoResolution
视频分辨率
resMode
视频横竖屏模式
videoFps
number
帧率
videoBitrate
number
码率
minVideoBitrate
number
最小码率
enableAdjustRes
boolean
是否自适应调整码率,默认:true

枚举详情

TUICameraCaptureMode

摄像头采集模式
枚举项
类型
说明
kCameraResolutionStrategyAuto
number
自动调整采集参数。SDK 根据实际的采集设备性能及网络情况,选择合适的摄像头输出参数,在设备性能及视频预览质量之间,维持平衡。
kCameraResolutionStrategyPerformance
number
优先保证设备性能。SDK 根据用户设置编码器的分辨率和帧率,选择最接近的摄像头输出参数,从而保证设备性能。
kCameraResolutionStrategyHighQuality
number
优先保证视频预览质量。SDK选择较高的摄像头输出参数,从而提高预览视频的质量。在这种情况下,会消耗更多的 CPU 及内存做视频前处理。
kCameraCaptureManual
number
允许用户设置本地摄像头采集的视频宽高。

TUIMediaFillMode

媒体源填充模式
如果媒体源的尺寸与显示区域尺寸不一致,媒体源显示后可能被拉伸或者周围出现黑边。
枚举项
类型
说明
kMediaFillMode_Fill
number
图像铺满显示区域,超出显示视窗的视频部分将被截掉,画面内容可能显示不完整。
kMediaFillMode_Fit
number
图像长边填满显示区域,短边区域会被填充黑色,画面内容显示完整。

TUIMediaMirrorType

媒体源镜像模式
枚举项
类型
说明
kMediaMirrorType_Enable
number
开启镜像
kMediaMirrorType_Disable
number
禁止镜像

TUIMediaRotation

媒体源旋转角度
枚举项
类型
说明
kMediaRotation0
number
旋转 0 度
kMediaRotation90
number
旋转 90 度
kMediaRotation180
number
旋转 180 度
kMediaRotation270
number
旋转 270 度

TUIMediaSourceType

媒体源类型
枚举项
类型
说明
kCamera
number
摄像头
kScreen
number
屏幕/窗口
kImage
number
图片

TUIResolutionMode

分辨率模式(横屏分辨率/竖屏分辨率)
枚举项
类型
说明
kResolutionMode_Landscape
number
横屏模式
kResolutionMode_Portrait
number
竖屏模式

TUIVideoResolution

视频分辨率
此处仅定义了横屏分辨率,如果要使用360 × 640这样的竖屏分辨率,需要同时指定 TUIResolutionMode 为 Portrait。
枚举项
类型
说明
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