使用 RESTful API 开始云端录制
本文向新手介绍如何使用声网 RESTful API 开始第一次云端录制。
前提条件
开通服务并获取关键参数
参考开通服务在声网控制台开通云端录制,并复制保存如下参数,以供后续使用:
- App ID
- 临时 Token
- 客户 ID
- 客户密钥
开通第三方云存储
云端录制文件需要上传到第三方云存储。开始录制前,请开通第三方云存储服务,并获取如下字段以备后用:
- Bucket
- Access Key
- Secret Key
模拟音视频互动场景
模拟一个音视频互动场景,云端录制服务后续会录制该场景下的音视频。
此处使用声网实时互动 Web Demo 在浏览器中模拟一个基础视频直播场景,频道内有一名主播发流:
- 打开 Web Demo,完成初始化设置。
- 进入基础视频直播页面,在 Channel 填入频道名为 show,点击 Join as host。
如果模拟成功,你会在 local stream 区域看到你的视频画面。
进行云端录制
本节介绍进行云端录制的极简流程。为方便说明,本节以录制之前模拟的音视频直播为例,并假设录制主播的音频和视频录制到 MP4 文件中。
申请录制服务器资源
请求
curl --location --request POST 'https://api.sd-rtn.com/v1/apps/<your_app_id>/cloud_recording/acquire' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'Authorization: <http_basic_auth>' \
--data '{
"cname": "show",
"uid": "123",
"clientRequest": {}
}'
你可以使用第三方在线工具快速得到 Authorization 值。将客户 ID 和客户密钥分别填入 Username 和 Password 框,得到形如 Authorization: Basic NDI1OTQ3N2I4MzYy...YwZjA=
的结果。将该结果替代上述代码中的 Authorization: <http_basic_auth>
即可。
响应
{
"cname": "show",
"uid": "123",
"resourceId": "SGXETXXX"
}
你需要复制 resourceId
以备后用。
开始录制
请求
curl --location --request POST 'https://api.sd-rtn.com/v1/apps/<your_app_id>/cloud_recording/resourceid/<resourceId_returned>/mode/mix/start' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'Authorization: <http_basic_auth>' \
--data '{
"cname": "show",
"uid": "123",
"clientRequest": {
"token": "<your_token>",
"recordingConfig": {
"channelType": 1
},
"storageConfig": {
"vendor": 2,
"region": 3,
"bucket": "<your_storage_bucket_name>",
"accessKey": "<your_storage_access_key>",
"secretKey": "<your_storage_secret_key>",
"fileNamePrefix": [
"quickstart"
]
}
}
}'
"vendor": 2
代表使用阿里云,如果你使用其他云存储厂商,请下表进行赋值:
云存储厂商 | Vendor ID |
---|---|
Amazon S3 | 1 |
阿里云 | 2 |
腾讯云 | 3 |
Microsoft Azure | 5 |
谷歌云 | 6 |
华为云 | 7 |
百度智能云 | 8 |
响应
{
"cname": "show",
"uid": "123",
"resourceId": "SGXETXXX",
"sid": "04a85XXX"
}
你需要复制 sid
以备后用。
查看录制文件
参考第三方云存储官方文档操作,查看云存储中的文件。录制文件位于 quickstart
目录下。如下截图以阿里云为例:
在录制过程中,会有一个 .m3u8
和多个 .ts
文件。点击任意一个 .ts
文件即可播放。
如果还需要查看 .mp4
文件,你需要先结束录制,再查看云存储文件。结束录制可参照如下代码:
curl --location --request POST 'https://api.sd-rtn.com/v1/apps/<your_app_id>/cloud_recording/resourceid/<resourceId_returned>/sid/<sid_returned>/mode/mix/stop' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'Authorization: <http_basic_auth>' \
--data '{
"cname": "show",
"uid": "123",
"clientRequest": {}
}'
最终 quickstart
录制文件夹内包含如下:
.
├── <sid>_show.m3u8
├── <sid>_show_0.mp4
├── <sid>_show_20240507070329192.ts
├── <sid>_show_20240507070346226.ts
├── <sid>_show_20240507070402264.ts
├── <sid>_show_20240507070418236.ts
├── <sid>_show_20240507070434208.ts
├── <sid>_show_20240507070450246.ts
├── <sid>_show_20240507070506218.ts
├── <sid>_show_20240507070522256.ts
├── <sid>_show_20240507070538236.ts
├── <sid>_show_20240507070554266.ts
├── <sid>_show_20240507070610238.ts
├── <sid>_show_20240507070626210.ts
└── <sid>_show_20240507070642248.ts
有关录制文件的详细信息,请参考录制文件介绍。
进阶设置
本文提供的示例代码仅为快速上手时使用。在实际业务中,你需要根据实际业务场景修改请求参数。如下示例代码展示了录制直播频道中所有的音视频流,且输出的视频流需要转码的参数配置:
curl --location --request POST 'https://api.sd-rtn.com/v1/apps/<your_app_id>/cloud_recording/resourceid/<resourceId_returned>/mode/mix/start' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'Authorization: <http_basic_auth>' \
--data '{
"cname": "show",
"uid": "123",
"clientRequest": {
"token": "<your_token>",
"recordingConfig": {
"channelType": 1,
"streamTypes": 2,
"audioProfile": 2,
"maxIdleTime": 30,
"transcodingConfig": {
"width": 640,
"height": 640,
"fps": 15,
"bitrate": 800,
"mixedVideoLayout": 0,
"backgroundColor": "#000000"
},
"subscribeVideoUids": [
"#allstream#"
],
"subscribeAudioUids": [
"#allstream#"
]
},
"recordingFileConfig": {
"avFileType": [
"hls",
"mp4"
]
},
"storageConfig": {
"vendor": 2,
"region": 3,
"bucket": "<your_storage_bucket_name>",
"accessKey": "<your_storage_access_key>",
"secretKey": "<your_storage_secret_key>",
"fileNamePrefix": [
"quickstart"
]
}
}
}'
云端录制支持设置的所有参数请参考 API 文档。