设置合流布局
更新时间: 2021/05/27 01:12:37
在使用合流录制模式时,您需要设置合流布局,即房间内所有发流用户视窗的大小及其在视频画布上的位置,进行合流布局。
本地服务端录制支持两种合流布局的方式:
- 自适应布局:目前本地服务端录制提供预设的自适应布局,将参数 VideoMixingLayout 中的 layout 字段设置为kNERtcLayoutGrid,即可实现预设的自适应布局效果。
- 自定义合流布局:支持自定义设置用户画面的大小,指定用户画面在视频画布上的相对位置。
自适应布局
布局样式会根据房间人数自适应。每个用户视窗平铺在画布上,大小一致。
规则 | 说明 |
---|---|
画面显示规则 |
|
布局规则 |
|
画面自适应 | 如果实际视频流的宽高比与视窗的宽高比不一致,视频画面会被裁剪以适应视窗的大小。 |
示例图:
1 人 | 2 人 | 3~4 人 |
---|---|---|
5~9 人 | 10~16 人 | 17 人 |
---|---|---|
自定义合流布局
如果预设的布局样式无法满足您的场景需求,您可以通过 API 实现自定义合流布局,灵活设置用户画面的大小,指定用户画面在视频画布上的相对位置。
屏幕共享场景请使用自定义合流布局,并通过 setVideoMixingLayout: regions的substream设置为true 在画布中添加辅流画面的小视窗。
实现方法
在加入房间后,先通过 VideoMixingLayout 类设置合流布局的参数,然后调用 setVideoMixingLayout 实现自定义的合流布局。
设置视频合流布局时,需在 VideoMixingLayout 中传入以下参数:
参数 | 说明 |
---|---|
backgroundColor | 画布的背景颜色。可根据所需颜色填写对应的 6 位 RGB 值,如 "#000000"。 |
regionCount | 房间内显示头像或视频的成员数量。 |
regions | 房间内每位成员在画布上的画面,包含如下参数:
|
示例代码
本节以设置 4 人画面的合流布局为例,并结合示例代码介绍如何设置自定义合流布局。 在示例中,第一个加入房间的用户在画布上显示为大视窗,铺满整个画布;其他三个用户显示为小视窗,悬浮在大视窗上面,效果如下图所示:
cppnerecord::VideoMixingLayout layout;
nerecord::NERtcRegion regions[4];
regions[0].uid = <uid1>;
regions[0].x = 0;
regions[0].y = 0;
regions[0].width = 1;
regions[0].height = 1;
regions[0].alpha = 1;
regions[0].renderMode = nerecord::kNERtcRenderModeHidden;
regions[1].uid = <uid2>;
regions[1].x = 0.01;
regions[1].y = 0.76;
regions[1].width = 0.23;
regions[1].height = 0.23;
regions[1].alpha = 1;
regions[1].renderMode = nerecord::kNERtcRenderModeHidden;
regions[2].uid = <uid3>;
regions[2].x = 0.26;
regions[2].y = 0.76;
regions[2].width = 0.23;
regions[2].height = 0.23;
regions[2].alpha = 1;
regions[2].renderMode = nerecord::kNERtcRenderModeHidden;
regions[3].uid = <uid3>;
regions[3].x = 0.51;
regions[3].y = 0.76;
regions[3].width = 0.23;
regions[3].height = 0.23;
regions[3].alpha = 1;
regions[3].renderMode = nerecord::kNERtcRenderModeHidden;
layout.regionCount = 4;
layout.regions = regions;
layout.layout = kNERtcLayoutCustom;
layout.backgroundColor = "#ffffff";
engine->setVideoMixingLayout(layout);