注意
白板推流录制
白板推流服务本身不提供录制功能,不过可以结合实时音视频服务的云端录制功能来进行白板推流录制。
实时音视频云端录制提供了两种录制模式:全局自动录制和指定用户录制。
全局自动录制(推荐)
在实时音视频云端录制的全局自动录制模式下,每一个 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和UserSigtrtcParams.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 mainimport ("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和SecretKeycredential := common.NewCredential("您的SecretID","您的SecretKey",)cpf := profile.NewClientProfile()cpf.HttpProfile.Endpoint = "tiw.tencentcloudapi.com"client, _ := tiw.NewClient(credential, "ap-guangzhou", cpf)request := tiw.NewStartWhiteboardPushRequest()// 这里请修改为真实的SdkAppID及RoomIDrequest.SdkAppId = common.Int64Ptr(1400000001)request.RoomId = common.Int64Ptr(880528)// 这里请修改为真实的UserID及UserSigrequest.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和UserSigrequest.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 mainimport ("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和SecretKeycredential := 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", 使用的时候请修改为真实的白板推流用户IDrequest.LayoutParams = &trtc.LayoutParams{Template: common.Uint64Ptr(2),MainVideoUserId: common.StringPtr("tic_push_user_880528_test"),MainVideoStreamType: common.Uint64Ptr(0),}// 这里请修改为真实的SdkAppID及RoomIDrequest.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())}