对于一个音视频通话,你可以使用云端录制功能,录制音视频文件。
你可以使用 StartRecord 这个 OpenAPI 实现这一功能。

接口行为

你可以调用 StartRecord 接口,指示 RTC 按照你设定的配置进行录制。设置包括:单流/合流,布局模板,音视频文件参数等。
录制分为单流录制和合流录制:

你需要在接口调用中配置存储空间,选择将录制结果存储在存储平台中。目前支持的存储平台包括:火山引擎视频点播 VOD、火山引擎对象存储 TOS、Amazon S3、阿里云对象存储 OSS、华为云 OBS、腾讯云 COS 和七牛云 Kodo。
你也可以在控制台配置存储空间和文件格式,效果与调用 OpenAPI 一致。

如果你已开通录制开始的消息通知功能,在开始云端录制时,你能够收到相关回调通知。关于消息通知服务,参看开通消息通知服务。

录制文件生成后,不推荐调用 GetRecordTask接口获取录制生成的文件,强烈建议接入录制结束回调事件。

前置条件

在开始录制前,你必须已经在控制台上开启录制功能,参看在控制台开启/关闭云端录制功能。

调用接口

关于调用接口的服务地址、通信协议、字符编码和签名机制,参看调用 OpenAPI。

接口限制

QPS 不得超过 60。

请求方式

使用 Post 方式发起请求。

请求参数

以下是接口特有的请求参数。关于其他公共请求参数,参看请求参数。

Query
参数名类型必填示例值描述
ActionString是StartRecord接口名称,本接口取值:StartRecord
VersionString是2022-06-01接口版本,本接口取值:2022-06-01
Body
参数名类型必填示例值描述
AppIdString是Your_AppId你的音视频应用的唯一标志
BusinessIdstring否Your_BusinessId业务标识
RoomIdString是Your_RoomId房间的 ID,是房间的唯一标志
TaskIdString是Your_TaskId云端录制任务 ID。你必须对每个云端录制任务设定 TaskId,且在后续进行任务更新和结束时也须使用该 TaskId。关于 TaskId 的详细说明,参看 TaskId说明 。 关于 TaskId 及以上 Id 字段的命名规则,参看 ID。
RecordModeUint32否0使用此参数设定录制模式:单流/合流录制。0 表示合流录制,1 表示单流录制。默认值为 0。
TargetStreamsStreams否你可以通过本参数设定需要录制的音视频流。如果参数为空,默认录制对房间内所有人进行录制。无论合流还是单流录制,最多17人。此参数中的 stream 不得和 ExcludeStreams 中重复。
ExcludeStreamsStreams否你可以通过本参数设定 不 需要录制的音视频流,即录制流的黑名单。参数默认为空。黑名单中的流不得超过 17 路。不支持将屏幕流添加到黑名单中。此参数中的 stream 不得和 TargetStreams 中重复。
EncodeEncode否音视频编码参数。
  • 单流录制时,你仅可以设置 VideoFps 和 VideoBitrate。
  • 合流录制时,你仅可以设置 VideoWidth,VideoHeight,VideoFps,和 VideoBitrate。
  • LayoutLayout否布局参数。仅在合流模式下支持设置布局参数。
    ControlControl否
    FileFormatConfigFileFormatConfig否录制文件的格式设置
    FileNameConfigFileNameConfig否录制文件的命名设置,参看录制文件名
    StorageConfigStorageConfig是录制文件的存储平台。
    目前支持:火山引擎视频点播 VOD 、火山引擎对象存储 TOS、Amazon S3、阿里云对象存储 OSS、华为云 OBS、腾讯云 COS 和七牛云 Kodo。
    TaskId 说明:

    TaskId 是任务的标识,在一个 AppId 的 RoomId 下 taskID 是唯一的,不同 AppId 或者不同 RoomId 下 TaskId 可以重复,因此 AppId + RoomId + TaskId 是任务的唯一标识,可以用来标识指定 AppId 下某个房间内正在运行的任务,从而能在此任务运行中进行更新或者停止此任务。

    录制文件名:

    录制文件的名称由 StorageConfig.Type 和 FileNameConfig 共同决定。

    例如:生成的录制文件开始时间的时间戳为 1645769481126,时长为30s,生成的随机八位字符为 c4694fa1,此时录制文件名为:

    文件名在 视频点播平台 上可以重复,但在 Tos 或第三方存储平台上默认不可以重复。
    如果你设置了 Pattern,需自行保证最终文件名的唯一性,否则在 Tos 或第三方存储平台上同名文件将被覆盖; 你也可以给对应bucket开启版本控制,允许文件名重复,防止被覆盖的情况发生。

    请求示例代码
    Query
    https://rtc.volcengineapi.com?Action=StartRecord&Version=2022-06-01
    
    Body

    自动布局模式:

    {
        "AppId" : "Your_AppId",
        "BusinessId" : "Your_BusinessId",
        "RoomId" : "Your_RoomId",   
        "TaskId": "Your_TaskId",
        "RecordMode": 0,
        "FileFormatConfig": {
            "FileFormat": ["HLS", "FLV"]
        },
        "FileNameConfig": {
            "Prefix": ["directory1", "directory2"],
            "Pattern": ""
        },
        "StorageConfig": {
            "Type": 0,
            "TosConfig": {
                "UserAccountId": "Your_UserAccountId",
                "Region": "Your_Region",
                "Bucket": "Your_Bucket"
            }
        }
    }
    

    自定义布局模式:

    {
        "AppId": "Your_AppId",
        "BusinessId" : "Your_BusinessId",
        "RoomId": "Your_RoomId",
        "TaskId": "Your_TaskId",
        "RecordMode": 0,
        "FileFormatConfig": {
            "FileFormat": ["HLS", "FLV"]
        },
        "FileNameConfig": {
            "Prefix": ["directory1", "directory2"],
            "Pattern": ""
        },
        "StorageConfig": {
            "Type": 0,
            "TosConfig": {
                "UserAccountId": "Your_UserAccountId",
                "Region": "Your_Region",
                "Bucket": "Your_Bucket"
            }
        }
        "TargetStreams": {
            "StreamList": [
                {
                    "Index": 0,
                    "UserId": "Your_UserId_3"
                },
                {
                    "Index": 1,
                    "UserId": "Your_UserId_4",
                    "StreamType": 1
                }
            ]
        },
        "Layout": {
            "LayoutMode": 2,
            "CustomLayout": {
                "Canvas": {
                    "Width": 860,
                    "Height": 340,
                    "Background": "#303342"
                },
                "Regions": [
                    {
                        "StreamIndex": 0,
                        "LocationX": 0,
                        "LocationY": 0,
                        "WidthProportion": 0.5,
                        "HeightProportion": 1,
                        "Zorder": 0,
                        "Alpha": 1,
                        "RenderMode": 0
                    },
                    {
                        "StreamIndex": 1,
                        "LocationX": 0.5,
                        "LocationY": 0,
                        "WidthProportion": 0.5,
                        "HeightProportion": 1,
                        "Zorder": 1,
                        "Alpha": 1,
                        "RenderMode": 1
                    }
                ]
            }
        }
    }
    
    返回调用结果

    返回值 Result 仅在请求成功时返回"ok",失败时为空。

    正常返回示例
    {
        "Result": "ok",
        "ResponseMetadata": {
            "RequestId": "Your_RequestId",
            "Action": "StartRecord",
            "Version": "2022-06-01",
            "Service": "rtc",
            "Region": "cn-north-1"
            }
    }
    
    json