屏幕共享录制

更新时间: 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,表示合并音频和辅流视频文件。

合流录制屏幕共享

在使用合流录制模式时,您需要设置合流布局,即房间内所有发流用户视窗的大小及其在视频画布上的位置,进行合流布局。如果有成员开启了屏幕共享,且未设置包含屏幕共享画面的合流录制布局,则不会录制屏幕共享画面。 如果开启了合流录制、且业务场景中包含辅流形式的屏幕共享,建议根据以下步骤设置辅流相关录制参数。

  1. (可选)初始化时设置辅流录制文件相关参数。

    • 将 video_substream_split 设置为 true,表示辅流画面单独生成录制文件。
    • 将 mixed_audio_substream 设置为 true,表示合并音频和辅流视频文件。
  2. 加入房间后,通过 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);
此文档是否对你有帮助?
有帮助
去反馈
  • 单流录制屏幕共享
  • 合流录制屏幕共享
  • 示例代码