声网录制SDK或者云录制提供的合流录制模式,可以将频道内所有 UID的音视频或者指定UID音频或视频混合录制为一个音视频文件。使用该录制方式,可实现各种定制化的录制视频样式需求。详见:官网文档

例如:

  • 泛金融双录场景,客服与客户的音视频,可采用简单的上下或者左右布局。
  • 教育1v1或者小班课场景,课件与老师学生视频,可采用垂直布局。
  • 娱乐场景里,多主播连麦PK,可采用自适应布局或者悬浮布局。

那么,该如何正确的使用布局参数,才能实现最终想要的效果呢?核心原则是以发流端视频流的分辨率来设置录制视频分辨率。

垂直布局:



  • 1 - 5 人布局。小视窗宽度是总宽的 1/5,视窗高度是总高的 1/4
  • 6 - 7 人布局,小视窗宽度是总宽的 1/7,视窗高度是总高的 1/6
  • 占据大视窗的用户id,可通过maxResolutionUid指定。
  • 大视窗是缩放模式,即分辨率与大视窗比例不一致时,会缩放而产生黑边。小视窗是裁剪模式

若占据大视窗的发流端视频流分辨率是1280x720,占据视窗宽度4/5,那么录制分辨率宽=1280/4x5=1600。所以,录制分辨需要设置1600x720

例如下面的实现效果:



自适应布局:




  • 视窗都是裁剪模式,即视频分辨率与视窗宽高比不一致时,会发生视频裁剪,不会产生黑边。
  • 如果远端只有1人,分辨率是640x480,那么录制分辨率设置640x480
  • 如果远端有2个人,分辨率是480x640,那么录制分辨率设置960x640

悬浮布局:



  • 视窗都是裁剪模式,即视频分辨率与视窗宽高比不一致时,会发生视频裁剪,不会产生黑边。
  • 占据大视窗的视频为第一个上线的远程视频用户
  • 该布局相对简单,只需要将录制视频分辨率 等于 占据大视窗位置的发流端视频流分辨率

自定义布局:

当预设的布局样式都满足不了场景需求时,可直接调用声网布局API实现。详见:官网API



Layout:VideoMixingLayout 成员函数:

VideoMixingLayout () { 
 int canvasWidth; //画布宽度 ,一般等于分辨率:宽 
 int canvasHeight; //画布高度 ,一般等于分辨率:高 
 const char* backgroundColor ; //背景颜色。对应的 6 位 RGB 值 
 uint32_t regionCount; //用户数量 
 const Region* regions; //频道内每位用户在画布中的的 
      regions: 
 int uid; //待显示在该区域的用户的 UID 
 double x; //横坐标起始位置,取值从左到右,取值范围是 [0.0,1.0] 
 double y; //纵坐标起始位置,取值从左到右,取值范围是 [0.0,1.0] 
 double width; //占据宽度的相对值,取值范围是 [0.0,1.0] 
 double height; //占据高度的相对值,取值范围是 [0.0,1.0] 
 int renderMode; //渲染模式;0:裁剪模式;1:缩放模式 ......
}

在布局中,最重要的四个参数:x,y = 起始坐标; w,h = 所占画布宽高,详见下图复杂布局参数:


全屏录制:

在互动方式多样化,互动频次越来越频繁的情况下,自定义的视频布局可能仍然满足不了一些更复杂的场景录制需求。例如课程中,老师与学生的文字互动,学生答对题目时的奖杯动效等一系列非视频互动。

针对该场景,声网云录制将于10月中旬上线URL全屏录制功能。即:仅需要一个URL播放链接,声网云录制即可以将url链接播放的所有内容录制成mp4,实现了真正的所见即所得。