有奖捉虫:办公协同&微信生态&物联网文档专题 HOT
注意
白板推流录制依赖实时音视频的云端录制,开启录制会产生相应的录制费用,具体计费规则参考 云端录制计费说明

白板推流录制

白板推流服务本身不提供录制功能,不过可以结合实时音视频服务的云端录制功能来进行白板推流录制。
实时音视频云端录制提供了两种录制模式:全局自动录制指定用户录制

全局自动录制(推荐)

在实时音视频云端录制的全局自动录制模式下,每一个 TRTC 房间中的每个用户的音视频上行流都会被自动录制下来,录制任务的启动和停止都是自动的,不需要额外操心,比较简单和易用。白板推流作为房间内的一路上行流,同样会被自动录制下来。
全局自动录制配置方法:
1. 登录 实时音视频控制台,在左侧导航栏选择 应用管理
2. 单击应用管理下的录制管理,单击全局自动录制,会显示全局自动录制模板。
3. 全局自动录制模板设置页面中, 录制文件格式选择 MP4,其他设置按实际情况来选择。
4. 点击下方的提交,再次单击勾选全局自动录制。



5. 新建的应用
开通实时音视频云端录制的更多设置内容可以参考实时音视频的 实现云端录制与回放 页面。

指定用户录制

如果您需要精细的控制每一路流的录制情况,例如哪一路流需要录制,哪一路流不需要录制,那么选择指定用户录制模式是比较适合这种场景需求的。
指定用户录制 模式的配置方式与全局自动录制模式的配置方式类似,只是在云端录制形式选择的时候选择 指定用户录制 选项即可。
在选择了指定用户录制模式的情况下,那么想要完成录制,需要做一些额外的工作:
1. 如果需要录制用户单流视频,在用户进房的时候,通过客户端 SDK API,指定 userDefineRecordId,表示这个用户的视频流需要录制。 Android 端代码示例:
mTRTCCloud = TRTCCloud.sharedInstance(getApplicationContext());
mTRTCCloud.setListener(new TRTCCloudImplListener(this));

// 初始化配置 SDK 参数
TRTCCloudDef.TRTCParams trtcParams = new TRTCCloudDef.TRTCParams();
trtcParams.sdkAppId = GenerateTestUserSig.SDKAPPID;
trtcParams.roomId = Integer.parseInt(mRoomId);

// 这里需要修改为真实的UserID和UserSig
trtcParams.userId = "进房UserID";
trtcParams.userSig = "对应的UserSig";

// 指定录制ID,在用户进房的时候会进行录制,需要修改为实际希望的字符串
trtcParams.userDefineRecordId = "xxx";

// 以主播角色身份进入房间
trtcParams.role = TRTCRoleAnchor;

// 进入通话
mTRTCCloud.enterRoom(trtcParams, TRTC_APP_SCENE_VIDEOCALL);

// 开启本地声音采集并上行
mTRTCCloud.startLocalAudio();
// 开启本地画面采集并上行
mTRTCCloud.startLocalPreview(mIsFrontCamera, mLocalPreviewView);

// 设置上行视频编码参数
TRTCCloudDef.TRTCVideoEncParam encParam = new TRTCCloudDef.TRTCVideoEncParam();
encParam.videoResolution = TRTCCloudDef.TRTC_VIDEO_RESOLUTION_640_360;
encParam.videoFps = Constant.VIDEO_FPS;
encParam.videoBitrate = Constant.RTC_VIDEO_BITRATE;
encParam.videoResolutionMode = TRTCCloudDef.TRTC_VIDEO_RESOLUTION_MODE_PORTRAIT;
mTRTCCloud.setVideoEncoderParam(encParam);

2. 如果需要录制白板推流单流视频,在 开始白板推流 的时候,将 AutoRecord 参数指定为 true,表示白板推流这路视频流需要录制。 golang版本代码示例:
package main

import (
"fmt"

"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common"
"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors"
"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile"
tiw "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tiw/v20190919"
)

func main() {
// 这里需要填上您的真实SecretID和SecretKey
credential := common.NewCredential(
"您的SecretID",
"您的SecretKey",
)
cpf := profile.NewClientProfile()
cpf.HttpProfile.Endpoint = "tiw.tencentcloudapi.com"
client, _ := tiw.NewClient(credential, "ap-guangzhou", cpf)

request := tiw.NewStartWhiteboardPushRequest()

// 这里请修改为真实的SdkAppID及RoomID
request.SdkAppId = common.Int64Ptr(1400000001)
request.RoomId = common.Int64Ptr(880528)

// 这里请修改为真实的UserID及UserSig
request.PushUserId = common.StringPtr("tic_push_user_880528_test")
request.PushUserSig = common.StringPtr("对应的UserSig")

// 这里配置白板视频的宽高及白板初始化参数
request.Whiteboard = &tiw.Whiteboard{
Width: common.Int64Ptr(1280),
Height: common.Int64Ptr(720),
InitParam: common.StringPtr("{\\"ratio\\": \\"16:9\\"}"),
}

// 白板推流提供了备份推流能力,如果需要推一个备份流的话,需要在Backup参数中提供另外一个UserID和UserSig
request.AutoManageBackup = common.BoolPtr(true)
request.Backup = &tiw.WhiteboardPushBackupParam{
PushUserId: common.StringPtr("tic_push_user_880528_test_backup"),
PushUserSig: common.StringPtr("xxxx"),
}

// 设置自动停止推流超时时间,这里设置300,表示超过300s没有人操作白板,则自动停止白板推流
request.AutoStopTimeout = common.Int64Ptr(300)

// 设置AutoRecord为true,表示实时音视频的云端录制需要录制白板推流视频
request.AutoRecord = common.BoolPtr(true)

response, err := client.StartWhiteboardPush(request)
if _, ok := err.(*errors.TencentCloudSDKError); ok {
fmt.Printf("An API error has returned: %s", err)
return
}
if err != nil {
panic(err)
}
fmt.Printf("%s", response.ToJsonString())
}

3. 如果需要录制 MCU 混流视频,在 启动云端混流 的时候,指定 OutputParams.RecordId,表示这路混流视频需要进行录制。 golang版本代码示例:
package main

import (
"fmt"

"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common"
"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors"
"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile"
trtc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/trtc/v20190722"
)

func main() {

// 这里需要填上您的真实SecretID和SecretKey
credential := common.NewCredential(
"您的SecretID",
"您的SecretKey",
)
cpf := profile.NewClientProfile()
cpf.HttpProfile.Endpoint = "trtc.tencentcloudapi.com"
client, _ := trtc.NewClient(credential, "ap-guangzhou", cpf)

request := trtc.NewStartMCUMixTranscodeRequest()

// 在OutputParams中指定RecordId,表示这路混流视频需要录制, 这里的字符串可以修改为想要的字符串
request.OutputParams = &trtc.OutputParams{
RecordId: common.StringPtr("1400000001_880528_mix"),
}

// 指定混流音视频编码参数,可以按需自行调整
request.EncodeParams = &trtc.EncodeParams{
AudioSampleRate: common.Uint64Ptr(48000),
AudioChannels: common.Uint64Ptr(1),
AudioBitrate: common.Uint64Ptr(50),
VideoWidth: common.Uint64Ptr(1280),
VideoHeight: common.Uint64Ptr(720),
VideoBitrate: common.Uint64Ptr(500),
VideoFramerate: common.Uint64Ptr(20),
VideoGop: common.Uint64Ptr(3),
}

// 指定混流布局,这里选择了预定义布局模板2(屏幕分享模板),并设置大屏显示白板推流视频。
// 这里假设白板推流的用户ID为"tic_push_user_880528_test", 使用的时候请修改为真实的白板推流用户ID
request.LayoutParams = &trtc.LayoutParams{
Template: common.Uint64Ptr(2),
MainVideoUserId: common.StringPtr("tic_push_user_880528_test"),
MainVideoStreamType: common.Uint64Ptr(0),
}

// 这里请修改为真实的SdkAppID及RoomID
request.SdkAppId = common.Uint64Ptr(1400000001)
request.RoomId = common.Uint64Ptr(880528)

response, err := client.StartMCUMixTranscode(request)
if _, ok := err.(*errors.TencentCloudSDKError); ok {
fmt.Printf("An API error has returned: %s", err)
return
}
if err != nil {
panic(err)
}
fmt.Printf("%s", response.ToJsonString())
}

实时音视频云端录制的具体配置及使用方法可以参考实时音视频的官网指引文档 实现云端录制与回放