白板推流录制

最近更新时间:2024-09-11 09:08:12

我的收藏
注意
白板推流录制依赖实时音视频的云端录制,开启录制会产生相应的录制费用,具体计费规则参考 云端录制计费说明

白板推流录制

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

全局自动录制(推荐)

在实时音视频云端录制的全局自动录制模式下,每一个 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())
}

实时音视频云端录制的具体配置及使用方法,请参见 实现云端录制与回放