云端录制
  • 产品简介
    • 概述
    • 发布日志
    • 计费说明
  • 快速开始
    • 实现云端录制
  • 基础功能
  • 服务端 API v2
  • 常见问题
  • 文档中心
  • 云端录制
  • 基础功能
  • 设置混流布局

设置混流布局

更新时间:2021-12-10 15:29

1 功能描述

使用混流录制时,云端录制服务会对房间内的所有音视频流与白板进行混流转码,将其混合在一个画面中。每路音视频流与白板在画面中的显示位置依赖于设置的布局方式,如果原视频的宽高比与混流布局中的宽高比不一致,可能出现裁剪或压缩。

云端录制支持的布局方式如下:

  • 自定义布局:灵活设置每个画面的位置和大小,最多支持 25 个画面。
  • 平分布局:所有画面平铺显示,根据画面的数量自动调整每个画面的大小和位置,每个画面的大小一致,最多支持 25 个画面。
  • 水平布局:显示一个大画面和若干个小画面,小画面在画布上方从左到右排列,根据画面的数量自动调整每个画面的大小和位置,每个小画面的大小一致,最多支持 25 个画面。
  • 垂直布局:显示一个大画面和若干个小画面,小画面在画布右侧从上到下排列,根据画面的数量自动调整每个画面的大小和位置,每个小画面的大小一致,最多支持 25 个画面。
  • 悬浮布局:显示一个大画面和若干个小画面,大画面铺满整个画布,小画面在画布下方从右到左排列,每个小画面的大小一致,悬浮在大画面上方,最多支持 25 个画面。

如果某条流只有音频数据,依然会占据一个画面。

2 实现方法

在调用 StartRecord 方法时,通过设置 MixMode 参数选择布局方式。在录制过程中可以通过调用 UpdateLayout 方法更改布局方式。

本节将详细介绍几种布局方式,示例中的数字代表流加入房间的先后顺序。

2.1 平分布局

  • 在以下平分布局示例中,如果房间内的流数不足,则剩余位置会空置显示背景色。
  • 未设置补白参数时,中途有流退出房间,则该条流的画面会被后进入房间的流顶替。如果设置了补白参数,中途退出房间的流依然会占据原先的画面,停留在最后一帧。
  • 如果开启了白板录制,当房间内有白板时,白板画面会始终占据1号画面。
  • 如果实际视频流的宽高比与画面的宽高比不一致,原视频会裁剪以适配画面的大小。

实际布局效果如下所示:

以此类推,优先按列扩展,直至25个画面。

2.2 水平布局

水平布局可以在调用 StartRecord 方法和 UpdateLayout 方法时通过设置 MixMaxResolutionStreamId 来指定大画面显示的流。

  • 未设置 MixMaxResolutionStreamId 时,大画面显示最先进入房间的流。
  • 设置了 MixMaxResolutionStreamId 但该条流还未进入房间时,该画面显示背景色。
  • 在以下水平布局示例中,如果房间内的流数不足,则剩余位置会空置显示背景色。
  • 未设置补白参数时,中途有流退出房间,则该条流的画面会被后进入房间的流顶替。如果设置了补白参数,中途退出房间的流依然会占据原先的画面,停留在最后一帧。
  • 如果开启了白板录制,当房间内有白板时,MixMaxResolutionStreamId 参数失效,白板画面会始终占据大画面。
  • 如果实际视频流的宽高比与画面的宽高比不一致,对于大画面,原视频会缩放以适配画面的大小,对于小画面,原视频会裁剪以适配画面的大小。

实际布局效果如下所示:

2.3 垂直布局

垂直布局可以在调用 StartRecord 方法和 UpdateLayout 方法时通过设置 MixMaxResolutionStreamId 来指定大画面显示的流。

注意事项请参考 水平布局,实际布局效果如下所示:

2.4 悬浮布局

悬浮布局可以在调用 StartRecord 方法和 UpdateLayout 方法时通过设置 MixMaxResolutionStreamId 来指定大画面显示的流。

注意事项请参考 水平布局,实际布局效果如下所示:

2.5 自定义布局

自定义布局可以在调用 StartRecord 方法和 UpdateLayout 方法时通过设置 MixInputList 来设定每个画面的大小、位置、显示的流。

MixInputList 是一个 json 数组,最多可以设置 25 个画面,参数定义如下:

参数 类型 是否必选 描述
StreamId String 指定在该画面显示的 streamID,如果未指定,会按照流加入房间的时间顺序进行匹配。
ViewType Int 该画面显示内容的类型。
  • 1:音视频(默认值)
  • 2:白板
类型 2 仅在开启白板录制时有效,仅支持将一个画面设置为白板,超过两个及以上会返回错误。
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 实际视频流宽高比与画面不一致时的处理方式。
  • 1:裁剪模式,该模式下优先保证画面被填满,原视频等比缩放填满画面后,四周超出画面的内容会被裁剪。(默认值)
  • 2:缩放模式,该模式下优先保证原视频的完整性,原视频等比缩放填满画面后,四周会补一圈黑边。
  • 设置了 StreamId 但该条流还未进入房间时,该画面显示背景色。
  • 如果房间内的流数不足,则剩余位置会空置显示背景色。
  • 未设置补白参数时,中途有流退出房间,且该条流的画面未设置 StreamId,则该画面会被后进入房间的流顶替,如果设置了 StreamId 则该画面依然占据原先的位置显示为背景色。如果设置了补白参数,中途退出房间的流依然会占据原先的画面,停留在最后一帧。
  • 如果开启了白板录制,当房间内有白板时,会显示在 ViewType 设置为 “2” 的画面。

坐标系如下图所示:

3 请求示例

在录制过程中,可以随时调用本方法更新混流布局,以下是一个更新自定义布局的示例。

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
        }
    ]
}

相关文档

本篇目录