有奖捉虫:办公协同&微信生态&物联网文档专题 HOT
注意
接入白板推流后,白板推流服务会把白板画面推送到指定的音视频房间,如果客户端不需要展示白板推流的画面,请根据白板推流的用户 ID 进行过滤。

交互流程

接入白板推流后,从开始上课到结束上课,一般经过如下几个交互过程:
?
?

白板推流

准备 PushUserIdPushUserSig

白板推流服务需要通过 IM 服务实时拉取白板操作信令进行白板渲染,同时需要进入到实时音视频房间内把白板画面以主路流的方式推送到房间内,以便其他用户进行流订阅,因此需要您提供一个白板推流服务进房时使用的PushUserId以及PushUserSig,生成PushUserIdPushUserSig的方法请参考 如何计算 UserSig
注意
PushUserSig签名请设置一个较长的有效期,至少比课堂时长要长,避免由于签名过期导致白板推流中断的情况。

开始白板推流

在需要进行白板推流时,例如老师学生都已经准备好开始上课,您可以使用 开始白板推流 接口来通知白板推流服务开始白板推流,在请求接口时,需要使用到上一步准备好的PushUserIdPushUserSig
白板推流开始后,会有 推流开始 事件回调,建议提前注册好事件回调监听,具体注册方式参考 事件通知综述
说明
由于网络延迟等因素,发送请求后,实际白板推流操作将在2s左右后进行。 目前服务端 API 接口只支持区域广州,在调用 API 时,Region 参数请填写ap-guangzhou

停止白板推流

在课堂结束或者需要停止白板推流的时候,您可以使用 结束白板推流 接口通知白板推流服务停止当前推流。
白板推流开始后,会有 推流结束 事件回调,建议提前注册好事件回调监听,具体注册方式参考 事件通知综述
说明
由于网络延迟等因素,发送请求后,实际白板推流操作将在2s左右后进行。 目前服务端 API 接口只支持区域广州,在调用 API 时,Region参数请填写ap-guangzhou

白板混流

注意
白板混流依赖实时音视频的云端混流转码功能,使用云端混流功能将产生相应的费用,具体计费规则请参考 云端混流转码计费说明
通常情况下,白板推流与房间内的其他音视频流都是独立的音视频流,观看端需要分别订阅各路流,并按照布局来进行视频播放,同时云端录制录下来的视频也是一个个独立的视频,这大大提高了客户端开发以及后续回放视频生成的复杂度。
通过把白板推流与实时音视频云端混流的能力结合起来,可以实现白板视频流与房间内其他音视频流混合成一路,从而达到我们期望的效果,同时降低客户端与录制回放的复杂度。
云端混流 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()
?
// 指定输出参数,决定混流后的视频流去向,如果旁路推流和云端录制选择的是全局自动,则可以忽略这里的参数。
request.OutputParams = &trtc.OutputParams{
// 在OutputParams中指定StreamId,表示这路混流视频需要旁路推流,这里的字符串可自行定义。
StreamId: common.StringPtr("1400000001_880528_mix_stream"),
// 在OutputParams中指定RecordId,表示这路混流视频需要录制,这里的字符串可自行定义。
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())
}
?
实时音视频云端混流的具体使用方法可以参考相关指引文档 云端混流转码

观看白板推流

注意
观看白板推流会产生相应的观看费用,具体计费规则可以参考 视频通话计费说明CDN 旁路直播观看费用说明
白板推流服务负责把白板画面以主路流的方式推送到指定的音视频房间内,观看端想要对这路流进行观看的话,通常有两种方式:
进入房间实时观看:观看端集成实时音视频 SDK,进入到相同的音视频房间,通过 SDK API 对相应的流进行订阅。具体实现可以参考相关指引文档 导入 SDK 到项目中
通过 CDN 旁路直播观看:开通旁路推流,通过直播 CDN 拉流观看。 具体实现可以参考相关指引文档 实现 CDN 直播观看
?


http://www.vxiaotou.com