实现单流转码录制
云端录制支持单流录制、合流录制和页面录制三种模式,其中单流录制模式指分别录制频道中每个 UID 的音频流和视频流,录制结束后每个 UID 会生成对应的音频文件和视频文件。
举例来说,当频道中有两个用户 uid1
和 uid2
,且同时录制音视频时,单流录制标准模式生成的文件如下图所示:
本文介绍如何使用云端录制的 RESTful API 并设置核心字段,进行单流录制。
本文实现的是单流转码录制,即录制结束后生成指定格式的录制文件。如需使用不转码录制,可以参考单流音频不转码录制文档。
前提条件
开始前,你可以参考开始云端录制了解云端录制的基础流程。
实现方法
1. 获取 Resource ID
开始录制前,调用 acquire
方法请求一个用于云端录制的 Resource ID。
请求示例如下:
-
请求 URL:
HTTPhttps://api.sd-rtn.com/v1/apps/{yourappid}/cloud_recording/acquire
-
请求 Body 示例:
JSON{
"cname": "httpClient463224",
"uid": "527841",
"clientRequest": {
"resourceExpiredHour": 24,
"scene": 0
}
}
2. 开始单流录制
在调用 start
方法时,将 mode
参数设置为 individual
,即可进行单流录制。
录制模式的设置必须在开始录制的时候完成,不支持在录制开始后切换模式。
该模式下,你需要对 clientRequest
设置如下字段:
字段 | 配置内容 | 是否选填 |
---|---|---|
token | String 类型,动态密钥。 | 如果录制的频道使用了 Token,则为必填 |
appsCollection | JSON Object。用于设置云端录制应用。如需使用延时转码,则将 combinationPolicy 字段设置为 postpone_transcoding 。 | 如果使用延时转码则为必填 |
transcodeOptions | JSON Object,用于配置录制文件延时转码属性。 | 如果使用延时转码则为必填 |
recordingConfig | JSON Object,用于配置音频流订阅、转码、输出音频属性。云端录制会根据此设置订阅频道内的媒体流,并生成录制文件或截图。 | 必填 |
recordingConfig.streamMode | String 类型,单流录制模式下,媒体流输出模式。推荐设置为 standard 或 default ,以获得能够直接播放的音视频文件。 | 选填 |
recordingFileConfig | JSON Object,录制文件设置,主要用于设置录制生成的视频文件类型。 | 选填 |
storageConfig | JSON Object,第三方云存储设置,用于指定录制文件的第三方存储平台和地区。 | 必填 |
不开启延时转码
进行普通的单流录制,不开启延时转码时,请求 Body 示例如下:
{
"cname": "httpClient463224",
"uid": "527841",
"token": "<token if any>",
"clientRequest": {
"recordingConfig": {
"channelType": 1,
"streamTypes": 2,
"streamMode": "default",
"videoStreamType": 0,
"maxIdleTime": 30,
"subscribeAudioUids": [
"123",
"456"
],
"subscribeVideoUids": [
"123",
"456"
],
"subscribeUidGroup": 0
},
"recordingFileConfig": {
"avFileType": [
"hls"
]
},
"storageConfig": {
"vendor": 2,
"region": 3,
"bucket": "xxxxx",
"accessKey": "xxxxx",
"secretKey": "xxxxx",
"fileNamePrefix": [
"directory1",
"directory2"
]
}
}
}
开始延时转码
如果普通的单流录制不满足你的业务需求,你可以进一步设置延时转码。设置后,录制服务会在录制后 24 小时内(特殊情况下会到 48 小时以上)对录制文件进行转码生成 MP4 文件,并将 MP4 文件上传至你指定的第三方云存储。
在延时转码场景下,录制文件会在声网边缘服务器上缓存,最长不超过 24 小时。如果你的业务对信息安全敏感,为了确保数据合规,请慎重考虑是否使用延时转码功能。如有任何疑虑,请联系声网技术支持。
开启延时转码的单流录制下,请求 Body 示例如下:
{
"cname": "httpClient463224",
"uid": "527841",
"token": "<token if any>",
"clientRequest": {
"appsCollection": {
"combinationPolicy": "postpone_transcoding"
},
"transcodeOptions": {
"container": {
"format": "mp4"
},
"transConfig": {
"transMode": "postponeTranscoding"
}
},
"recordingConfig": {
"channelType": 1,
"streamTypes": 2,
"streamMode": "default",
"videoStreamType": 0,
"maxIdleTime": 30,
"subscribeAudioUids": [
"123",
"456"
],
"subscribeVideoUids": [
"123",
"456"
],
"subscribeUidGroup": 0
},
"recordingFileConfig": {
"avFileType": [
"hls"
]
},
"storageConfig": {
"vendor": 2,
"region": 3,
"bucket": "xxxxx",
"accessKey": "xxxxx",
"secretKey": "xxxxx",
"fileNamePrefix": [
"directory1",
"directory2"
]
}
}
}
3. 停止单流录制
录制完成后,调用 stop
方法离开频道,停止录制。录制停止后如需再次录制,必须再调用 acquire
方法请求一个新的 Resource ID。
请求示例如下:
-
请求 URL:
HTTPhttps://api.sd-rtn.com/v1/apps/<yourappid>/cloud_recording/resourceid/<resourceid>/sid/<sid>/mode/individual/stop
-
请求 Body 示例:
JSON{
"cname": "httpClient463224",
"uid": "527841",
"clientRequest": {}
}
录制生成文件
单流录制模式下录制文件的音视频编码配置如下:
- 音频编码配置:采样率固定为 48 kHz,声道数和码率与原始音频流一致。
- 视频编码配置:与原始视频流一致。
根据录制内容的不同,录制生成的文件如下表所示:
录制内容 | 字段设置 | 录制生成文件 |
---|---|---|
仅录制音频 | 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 格式的音频、视频文件可以直接播放。
开发注意事项
在进行单流录制过程中,你需要关注如下注意事项:
-
使用标准模式录制(
streamMode
为standard
),如果录制过程中将 Native 端切换到 Web 端(或反之),录制结束后你会获得 M3U8 格式和 MPD 格式的两个音视频索引文件,无法连贯播放整个录制过程。 -
如果在录制过程中禁用视频轨道,则录制效果详见下表:
发流端类型 禁用视频轨道的方法 录制效果 Native 端 调用 muteLocalVideoStream
或disableVideo
方法不继续生成视频切片文件,在本切片内用户画面显示最后一帧。 Web 端 调用 setEnabled
方法不继续生成视频切片文件,在本切片内用户画面显示最后一帧。
参考文档
相关文档
在单流转码录制过程中,你还可以参考如下文档:
API 参考
你可以参考以下方法了解字段详情: