对接腾讯云实时音视频(TRTC)云端录制

2022-03-03 09:51:18 浏览数 (1)

在使用腾讯云实时音视频时,是由前端直接使用 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(StartMCUMixTranscodeStopMCUMixTranscode)用于实现云端混流、云端录制和旁路直播三个功能:

云端能力

如何开始?

如何停止?

云端录制

调用 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 的参数比较简单,只需要SdkAppIdRoomId就可以了,这里就不说了。

RoomId 是腾讯云 RTC 返回的 roomid。而需要重点说明的是 startMCUMixTranscode 的参数:

代码语言:javascript复制
$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

调试了半天才发现需要设置此参数才能开启云端录制。

0 人点赞