使用混流录制时,云端录制服务会对房间内的所有音视频流与白板进行混流转码,将其混合在一个画面中。每路音视频流与白板在画面中的显示位置依赖于设置的布局方式,如果原视频的宽高比与混流布局中的宽高比不一致,可能出现裁剪或压缩。
云端录制支持的布局方式如下:
如果某条流只有音频数据,依然会占据一个画面。
在调用 StartRecord 方法时,通过设置 MixMode
参数选择布局方式。在录制过程中可以通过调用 UpdateLayout 方法更改布局方式。
本节将详细介绍几种布局方式,示例中的数字代表流加入房间的先后顺序。
实际布局效果如下所示:
以此类推,优先按列扩展,直至25个画面。
水平布局可以在调用 StartRecord 方法和 UpdateLayout 方法时通过设置 MixMaxResolutionStreamId
来指定大画面显示的流。
MixMaxResolutionStreamId
时,大画面显示最先进入房间的流。 MixMaxResolutionStreamId
但该条流还未进入房间时,该画面显示背景色。 MixMaxResolutionStreamId
参数失效,白板画面会始终占据大画面。 实际布局效果如下所示:
垂直布局可以在调用 StartRecord 方法和 UpdateLayout 方法时通过设置 MixMaxResolutionStreamId
来指定大画面显示的流。
注意事项请参考 水平布局,实际布局效果如下所示:
悬浮布局可以在调用 StartRecord 方法和 UpdateLayout 方法时通过设置 MixMaxResolutionStreamId
来指定大画面显示的流。
注意事项请参考 水平布局,实际布局效果如下所示:
自定义布局可以在调用 StartRecord 方法和 UpdateLayout 方法时通过设置 MixInputList
来设定每个画面的大小、位置、显示的流。
MixInputList
是一个 json 数组,最多可以设置 25 个画面,参数定义如下:
参数 | 类型 | 是否必选 | 描述 |
---|---|---|---|
StreamId | String | 否 | 指定在该画面显示的 streamID,如果未指定,会按照流加入房间的时间顺序进行匹配。 |
ViewType | Int | 否 | 该画面显示内容的类型。
|
Top | Int | 是 | 画布上该画面左上角的 y 轴坐标,取值范围 [0, 1920],不能超过 bottom 的值和画布的高。 |
Left | Int | 是 | 画布上该画面左上角的 x 轴坐标,取值范围 [0, 1920],不能超过 right 的值和画布的宽。 |
Bottom | Int | 是 | 画布上该画面右下角的 y 轴坐标,取值范围 [0, 1920],不能超过画布的高。 |
Right | Int | 是 | 画布上该画面右下角的 x 轴坐标,取值范围 [0, 1920],不能超过画布的宽。 |
Layer | Int | 是 | 该画面的图层优先级,当两个画面发生重叠时,数值大的显示在上方。 |
FillMode | Int | 否 | 实际视频流宽高比与画面不一致时的处理方式。
|
StreamId
但该条流还未进入房间时,该画面显示背景色。 StreamId
,则该画面会被后进入房间的流顶替,如果设置了 StreamId
则该画面依然占据原先的位置显示为背景色。如果设置了补白参数,中途退出房间的流依然会占据原先的画面,停留在最后一帧。 ViewType
设置为 “2” 的画面。 坐标系如下图所示:
在录制过程中,可以随时调用本方法更新混流布局,以下是一个更新自定义布局的示例。
Content-type 为 application/json;charset=utf-8,UpdateLayout 请求包体内容如下:
{
"TaskId": "xxxx",
"MixMode": 1,
"MixInputList": [
{
"StreamId": "xxxx",
"ViewType": 1,
"Top": 0,
"Left": 0,
"Bottom": 720,
"Right": 540,
"Layer": 1
},
{
"StreamId": "",
"ViewType": 1,
"Top": 0,
"Left": 540,
"Bottom": 360,
"Right": 1080,
"Layer": 1
},
{
"StreamId": "",
"ViewType": 1,
"Top": 360,
"Left": 540,
"Bottom": 720,
"Right": 1080,
"Layer": 1
}
]
}
联系我们
文档反馈