屏幕共享录制
更新时间: 2021/03/26 22:00:50
NERTC SDK 通过辅流形式实现屏幕共享功能,本地服务端录制 SDK 可实现通话过程中屏幕共享过程录制。单流录制的场景下,辅流画面可以单独生成录制文件,也可以通过 video_with_substream_layout 设置辅流和主流录制在一个视频文件中;合流录制场景下,音视频通话过程中各端的视频流和屏幕共享视频流均可以录制。
单流录制屏幕共享
初始化时,默认为单流录制模式,即分别录制房间内每个成员的音频流和视频流。单流录制场景下,如果未设置单流模式的屏幕共享辅流布局,此时如果有成员开启了屏幕共享,默认只录制其 Camera 主流视频,不录制屏幕共享辅流视频。 如果您的业务场景中包含辅流形式的屏幕共享,建议在初始化时设置辅流相关的录制参数。
- 设置 video_with_substream_layout,即单流模式的屏幕共享辅流布局。
- (可选)将 video_substream_split 设置为 true,表示辅流画面单独生成录制文件,开启辅流视频的房间成员会生成两个视频文件,即包含屏幕共享和 Camera 视频的文件,和单独的屏幕共享视频文件。
- (可选)将 mixed_audio_substream 设置为 true,表示合并音频和辅流视频文件。
合流录制屏幕共享
在使用合流录制模式时,您需要设置合流布局,即房间内所有发流用户视窗的大小及其在视频画布上的位置,进行合流布局。如果有成员开启了屏幕共享,且未设置包含屏幕共享画面的合流录制布局,则不会录制屏幕共享画面。 如果开启了合流录制、且业务场景中包含辅流形式的屏幕共享,建议根据以下步骤设置辅流相关录制参数。
-
(可选)初始化时设置辅流录制文件相关参数。
- 将 video_substream_split 设置为 true,表示辅流画面单独生成录制文件。
- 将 mixed_audio_substream 设置为 true,表示合并音频和辅流视频文件。
-
加入房间后,通过 setVideoMixingLayout 设置视频合流布局。
-
layout 字段 设置为 kNERtcLayoutCustom,表示使用自定义合流布局。
注意:如果设置为 kNERtcLayoutGrid 自适应布局,则根据默认布局录制 Camera 主流视频,不录制屏幕共享辅流视频。
-
设置画面布局时,添加指定 uid 的辅流画面作为画布中的子窗口,此时 substream 应设置为 true。
-
自定义画面布局设置请参考【合流布局】。
示例代码
本节以设置 3 人画面的合流布局为例,并结合示例代码介绍如何在自定义合流布局中添加成员 1 的屏幕共享辅流画面。 在示例中,第一个加入房间的用户,其屏幕共享视频在画布上显示为大视窗,铺满整个画布;其主流视频显示为小视窗,和其他两位用户的主流视频并排悬浮在大视窗之上。
nerecord::VideoMixingLayout layout;
nerecord::NERtcRegion regions[4];
/* 成员1的屏幕共享 */
regions[0].uid = <uid1>;
regions[0].substream = true;
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;
/* 成员1的视频 */
regions[1].uid = <uid1>;
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;
/* 成员2的视频 */
regions[2].uid = <uid2>;
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;
/* 成员3的视频 */
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);