本文介绍使用云端录制 RESTful API 进行单流录制的重点步骤。建议你同时参考云端录制 RESTful API 快速开始了解云端录制的基础流程。
文中的单流录制均指单流转码录制,如需使用单流音频不转码录制,请参考单流音频不转码录制文档。
云端录制共支持三种录制模式:
单流录制模式下,分别录制频道中每个 UID 的音频流和视频流。声网推荐你在开始录制时选择单流录制的标准模式,录制结束后每个 UID 均获得能够直接播放的音视频文件。设置方式详见开始录制。
举例来说,当频道中有两个用户 uid1 和 uid2,且同时录制音视频时,单流录制标准模式生成的文件如下图所示:
在开始录制前,必须调用 acquire
方法请求一个用于云端录制的 resource ID。如果要使用延时转码功能,需要将 scene
设置为 2
。
请求 URL:
https://api.sd-rtn.com/v1/apps/{yourappid}/cloud_recording/acquire
Content-type
为 application/json;charset=utf-8
Authorization
为 Basic authorization,生成方法请参考 RESTful API 认证。
请求包体内容:
{
"cname": "httpClient463224",
"uid": "527841",
"clientRequest": {
"resourceExpiredHour": 24,
"scene": 0
}
}
在调用 start
方法时,你需要将 mode
参数设置为 individual
,开启单流录制模式。该模式下,你还需要通过 recordingConfig
设置单流录制的详细信息,以及通过 storageConfig
设置第三方云存储的信息。
声网推荐你在开始录制时选择标准模式,即 recordingConfig
中的 streamMode
设置为 standard
,以获得能够直接播放的音视频文件。
单流录制支持的 clientRequest
参数包括:
参数 | 配置内容 | 是否选填 |
---|---|---|
token |
String 类型,动态密钥。 | 如频道使用了 token,则为必填 |
appsCollection |
JSON Object,应用设置。如需使用延时转码,则将 combinationPolicy 字段设置为 postpone_transcoding 。设置该场景后,录制服务会在录制后 24 小时内(特殊情况下会到 48 小时以上)对录制文件进行转码生成 MP4 文件,并将 MP4 文件上传至你指定的第三方云存储。 |
使用延时转码则为必填 。 |
recordingConfig |
JSON Object,用于配置音频流订阅、转码、输出音频属性,详见录制设置。 | 必填 |
recordingConfig.streamMode |
String 类型,单流录制模式下,媒体流的输出模式。推荐设置为 standard 。 |
选填 |
recordingFileConfig |
JSON Object,录制文件设置。 | 选填 |
storageConfig |
JSON Object,第三方云存储设置。 | 必填 |
region
必须与调用 acquire
时设置的 region
一致。请求 URL:
https://api.sd-rtn.com/v1/apps/{yourappid}/cloud_recording/resourceid/{resourceid}/mode/individual/start
Content-type
为 application/json;charset=utf-8
Authorization
为 Basic authorization,生成方法请参考 RESTful API 认证。
请求包体内容:
实时录制标准模式
{
"uid": "527841",
"cname": "httpClient463224",
"clientRequest": {
"token": "<token if any>",
"recordingConfig": {
"maxIdleTime": 30,
"streamTypes": 2,
"streamMode": "standard",
"channelType": 0,
"videoStreamType": 0,
"subscribeVideoUids": [
"123",
"456"
],
"subscribeAudioUids": [
"123",
"456"
],
"subscribeUidGroup": 0
},
"storageConfig": {
"accessKey": "xxxxxxf",
"region": 3,
"bucket": "xxxxx",
"secretKey": "xxxxx",
"vendor": 2,
"fileNamePrefix": [
"directory1",
"directory2"
]
}
}
}
延时转码
设置该场景后,录制服务会在录制后 24 小时内(特殊情况下会到 48 小时以上)对录制文件进行转码生成 MP4 文件,并将 MP4 文件上传至你指定的第三方云存储。
{
"uid": "527841",
"cname": "httpClient463224",
"clientRequest": {
"token": "<token if any>",
"appsCollection": {
"combinationPolicy": "postpone_transcoding"
},
"recordingConfig": {
"maxIdleTime": 30,
"streamTypes": 2,
"channelType": 0,
"videoStreamType": 1,
"subscribeVideoUids": [
"123",
"456"
],
"subscribeAudioUids": [
"123",
"456"
],
"subscribeUidGroup": 0
},
"storageConfig": {
"accessKey": "xxxxxxf",
# 必须设置为中国大陆地区内
"region": 3,
"bucket": "xxxxx",
"secretKey": "xxxxx",
"vendor": 2,
"fileNamePrefix": [
"directory1",
"directory2"
]
}
}
}
录制完成后,调用 stop
方法离开频道,停止录制。录制停止后如需再次录制,必须再调用 acquire
方法请求一个新的 resource ID。
请求 URL:
https://api.sd-rtn.com/v1/apps/<yourappid>/cloud_recording/resourceid/<resourceid>/sid/<sid>/mode/individual/stop
Content-type
为 application/json;charset=utf-8
Authorization
为 Basic authorization,生成方法请参考 RESTful API 认证。
请求包体内容:
{
"cname": "httpClient463224",
"uid": "527841",
"clientRequest": {}
}
默认情况下,云端录制会订阅频道内所有发布的音视频流。你可以使用 API 进行灵活的 UID 订阅。你可以设置音频和视频的订阅白名单或黑名单,还可以在录制过程中更新订阅名单。
在开始录制时,你可以通过 start
方法中的相关参数设置订阅的黑白名单。在录制过程中,你可以通过 update
方法中的 streamSubscribe
参数更新订阅名单。
选择以下参数之一设置音频订阅名单。两者不可同时设置。
subscribeAudioUids
:指定要订阅的音频流,即音频订阅白名单。
unSubscribeAudioUids
:指定不订阅的音频流,即音频订阅黑名单。
选择以下参数之一设置视频订阅名单。两者不可同时设置。
subscribeVideoUids
:指定要订阅的视频流,即视频订阅白名单。
unSubscribeVideoUids
:指定不订阅的视频流,即视频订阅黑名单。
假设录制开始时,频道内共有 111、222、333、444 四个用户,中途又进入两个 UID 未知的用户。下表列出了几种常见的订阅方式以及推荐的参数设置。
订阅方式 | 推荐参数设置 |
---|---|
订阅全部音频流和视频流 | 无需设置订阅相关参数。 |
订阅全部音频流,只订阅 111 和 222 的视频流 | subscribeAudioUids : ["#allstream#"] subscribeVideoUids: ["111","222"] |
订阅全部音频流,不订阅 111 和 222 的视频流 | subscribeAudioUids: ["#allstream#"] unSubscribeVideoUids: ["111","222"] 云端录制会订阅全部音频流以及 333、444 和两个 UID 未知用户的视频流。 |
订阅全部音频流,不订阅视频流 | subscribeAudioUids: ["#allstream#"] 将 streamType 设置为 0 ,也可达到同样的效果。 |
不订阅 222 的音频流,只订阅 111 的视频流 | unSubscribeAudioUids: ["222"] subscribeVideoUids: ["111"] 云端录制会订阅 111、333、444 和两个 UID 未知用户的音频流,以及 111 的视频流。 |
单流录制模式下录制文件的音视频编码配置如下:
根据录制内容的不同,录制生成的文件如下表所示:
录制内容 | 参数设置 | 录制生成文件 |
---|---|---|
仅录制音频 | streamTypes 设为 0 |
每个 UID 生成一个 M3U8 文件和多个 TS 文件。TS 文件内仅存储该 UID 的音频数据。 |
仅录制视频 | streamTypes 设为 1 |
每个 UID 生成一个 M3U8 文件和多个 TS/WebM 文件,TS/WebM 文件内仅存储该 UID 的视频数据。 |
同时录制音视频,且使用录制的标准模式 | streamTypes 设为 2 ,streamMode 设为 standard 。 |
每个 UID 生成一个 M3U8 音频文件、一个 M3U8 视频文件、一个合并的 M3U8 音视频文件,以及多个 TS 音频切片文件和 TS 视频切片文件。 如果在 Web 端使用 VP8 编码,录制结束后你可以获得合并的 MPD 音视频索引文件,以及多个 WebM 格式的音频文件和多个 WebM 格式的视频文件。 |
你可以直接播放 M3U8 或 MPD 音视频文件。
录制文件的命名规则详见管理录制文件。
["#allstream#"]
指定频道内所有 UID。recordingConfig
中的 streamTypes
为 0
(只订阅音频),则不可设置视频订阅名单; 如果 recordingConfig
中的 streamTypes
为 1
(只订阅视频),则不可设置音频订阅名单。streamMode
为 standard
),如果录制过程中将 Native 端切换到 Web 端(或反之),录制结束后你会获得 M3U8 格式和 MPD 格式的两个音视频索引文件,无法连贯播放整个录制过程。发流端类型 | 禁用视频轨道的方法 | 录制效果 |
---|---|---|
Native | 调用 muteLocalVideoStream 或 disableVideo 方法 |
不继续生成视频切片文件,在本切片内用户画面显示最后一帧。 |
Web SDK 3.x | 调用 muteVideo 方法 |
持续生成视频切片文件,用户画面为黑屏。 |
Web SDK 4.x | 调用 setEnabled 方法 |
不继续生成视频切片文件,在本切片内用户画面显示最后一帧。 |