在使用腾讯云实时音视频时,是由前端直接使用 SDK 发起进出房的请求,而不是由后端发起的。
需要在后端增加一个录音的功能,以实现后期的回放。了解到腾讯云可以实现云端录制,只需要调用 API 即可。
TRTC 的云端录制,可以将房间中的每一个用户的音视频流都录制成一个独立的文件,也可以将房间中的多路音视频先进行云端混流,再将混合后的音视频流录制成一个文件:
我们当前的场景是只需要录音,而且是多个用户同时语音交流,所以先需要使用云端混流,然后再使用云端录制。
流程说明
1. 开通录制服务
先参考腾讯云的文档 开通录制服务 ,完成创建应用等配置。
下面的流程也在此文档中有详细说明。
2. 选择录制形式
TRTC 的云端录制服务提供了两种不同的录制形式:全局自动录制
和指定用户录制
。这里根据自己的需求来自行选择。
这里我们选择了指定用户录制,指定用户录制需要通过客户端的 SDK API 或者服务端的 REST API 进行控制。
3. 选择文件格式
云端录制支持 HLS、MP4、FLV 和 AAC 四种不同的文件格式。
我们只需要录制音频,所以选择了AAC
的类型。
4. 选择存储位置
TRTC 云端录制文件会默认存储于腾讯云点播服务上,所以可以跳过。
5. 设置录制回调
需要设置录制回调地址和录制回调密钥。
用于实时接收到新文件的落地通知,因为我们需要实现回放功能,所以需要将播放地址进行存储,就可以在回调中实现。
6. 录制控制
由于我们选择了指定用户录制,所以录制控制选择了 REST API。
TRTC 的服务端提供了一对 REST API(StartMCUMixTranscode
和StopMCUMixTranscode
)用于实现云端混流、云端录制和旁路直播三个功能:
云端能力 | 如何开始? | 如何停止? |
---|---|---|
云端录制 | 调用 StartMCUMixTranscode 时指定 OutputParams.RecordId 参数即可开始录制 | 自动停止,或中途调用 StopMCUMixTranscode 停止 |
云端混流 | 调用 StartMCUMixTranscode 时指定 LayoutParams 参数可设置布局模板和布局参数 | 所有用户退房后自动停止,或中途调用 StopMCUMixTranscode 手动停止 |
旁路直播 | 调用 StartMCUMixTranscode 时指定 OutputParams.StreamId 参数可启动到 CDN 的旁路直播 | 自动停止,或中途调用 StopMCUMixTranscode 停止 |
代码实现
具体的流程需要关注文档服务端 REST API 混流方案
安装 SDk
可以选择安装完整的 SDk,也可以选择仅安装 TRTC 的 SDk。
代码语言:javascript复制composer require tencentcloud/tencentcloud-sdk-php
composer require tencentcloud/trtc
代码
完整的代码可以使用API Explorer
来生成。
- StartMCUMixTranscode
- StopMCUMixTranscode
接口文档:
- StartMCUMixTranscode
- StopMCUMixTranscode
stopMCUMixTranscode
的参数比较简单,只需要SdkAppId
和RoomId
就可以了,这里就不说了。
RoomId
是腾讯云 RTC 返回的 roomid
。而需要重点说明的是 startMCUMixTranscode
的参数:
$params = [
'SdkAppId' => $appId,
'RoomId' => $roomId,
'OutputParams' => [
'StreamId' => $streamId, // 直播流 ID
'PureAudioStream' => 1, // 纯音频
'RecordId' => '2049', // 存储文件名前缀,设置后才能云端录制
],
'EncodeParams' => [
'AudioSampleRate' => 48000, // 混流-输出流音频采样率。取值为[48000, 44100, 32000, 24000, 16000, 8000],单位是Hz。
'AudioBitrate' => 64, // 混流-输出流音频码率。取值范围[8,500],单位为kbps。
'AudioChannels' => 2 // 混流-输出流音频声道数,取值范围[1,2],1表示混流输出音频为单声道,2表示混流输出音频为双声道。
],
'LayoutParams' => [
'Template' => 0, // 混流布局模板ID,0为悬浮模板(默认);1为九宫格模板;2为屏幕分享模板;3为画中画模板;4为自定义模板。
]
];
OutputParams
是 MCU 混流的输出参数,而OutputParams.RecordId
在 数据结构 文档中是一个必填项,表示自定义录制文件名称前缀,这里实际上需要特别注意!!!
在接口文档中只说明是一个前缀,OutputParams.RecordId
是前缀但也不只是前缀:
OutputParams.RecordId
的值是存储到云点播中的文件名前缀,同时也是开启云端录制的配置项。
用于指定是否启动云端录制,如果指定此参数,那么混流后的音视频流会被录制成文件并存储到云点播中。
录制下来的文件会按照 OutputParams.RecordId_开始时间_结束时间
的格式命名,例如:file001_2020-02-16-12-12-12_2020-02-16-13-13-13
。
调试了半天才发现需要设置此参数才能开启云端录制。