腾讯视频云trtc-room⼩程序组件使⽤
< trtc-room >是⽬前腾讯推出的多端实时⾳视频的处理⽅案,。这⾥记录⼀下个⼈使⽤这个组件的⼀些经验。
⽤上TRTC后,各端互通,甚⾄可以⽤⼩程序,在QQ和互通,在⽹页端,pc端都有很好的⽀持(Electron也有,前端福⾳)。加上的即时通信能⼒,直接可以搭建⼀个企业级的直播应⽤,如果加上腾讯⽩板,直接变成会议⼩帮⼿,教学⼤杀器,业务场景完全可以在实时⾳视频业务之上⾃由组合。
获取代码
可以在github上下载最新的代码,也可以直接在官⽹上下载代码包,这⾥贴上两个地址
代码clone下来或者是解压完成后,会看到trtc-room的⼀个组件的代码包,如果只是想快速接⼊⼀下的话,可以直接,这⾥注意要开放live-pusher和live-player的权限,⼩程序官⽅对这两个组件是需要单独授权的。
代码介绍
pages
index 三个场景⼊⼝的索引页
meeting 多⼈会议设置页⾯
room 多⼈会议页⾯
videocall 双⼈通话
voice-room 语⾳房
以上是腾讯官⽹⼩程序的图⽚,demo有三个场景,语⾳房,双⼈通话,多⼈会议,这⾥会议场景下,可以设置的地⽅还是⽐较多的,和⾥⾯还有很多其他的属性可以设置。
这⾥提⼀下,组件内的页⾯跳转统⼀使⽤navigateTo,如果使⽤redirectTo进⾏页⾯跳转的,安卓的返回键,可能造成⼩程序挂起的假现象,这⾥页⾯的回收时间依赖于⼩程序的内存回收机制,不建议有live-pusher或live-player的页⾯放在页⾯栈顶。另外,对于⼩程序挂起的问题,已经在推出官⽅的解决⽅案,⼤家可以随时关注最新的动态。
组件trtc-room
common ⾥⾯是组件提供给外部的事件,包括本地和远端的默认状态等等,这⾥⾯都会有⽐较详细的注释
user-controller 这⾥是通讯成员管理模块,⾥⾯是远端成员(下⾏流)管理的模块,⾥⾯会对抛出的事件进⾏处理。这⾥简单介绍⼀下有哪些事件,1031 远端成员进房的通知, 1032 远端成员退房的通知, 1033 远端⽤户视频状态位变更的通知(关闭/开闭), 1034 远端⽤户⾳频状态位变更的通知。
model ⾥⾯定义了本地流(pusher),远端流(stream),和⽤户(user)的基本数据结构,⼀个user可能是有两条stream的,因为pc端或web端开启屏幕分享后是会共享相同的userId的
template ⾥⾯包含了三个模板,分别是1v1,custom,grid,可以根据⾃⼰的类型选取,custom是可以直接通过API的调⽤来设置显⽰位置,我感觉还是不太符合前端的开发习惯,1v1通话模式,和grid的会议模式还是可以直接修改使⽤的。
组件使⽤
我们把这个过程想象成⼀个上⽹的过程。
1. 第⼀步先要⽹管搞个账号才能开机。就是把注册好账号的SDKAppid和SECRETKEY填⼀下。
this.setData({
trtcConfig:{
sdkAppID: '1401000123',  // 开通实时⾳视频服务创建应⽤后分配的 SDKAppID
userID: 'test_user_001', // ⽤户 ID,可以由您的帐号系统指定
userSig: 'xxxxxxxxxxxx', // ⾝份签名,相当于登录密码的作⽤
template: 'grid',        // 画⾯排版模式
}
}
2. 要打游戏了,拉上⼏个哥们(憨憨)进个房。
进房前肯定要看看⾃⼰麦和摄像头⾏不⾏啊,边进边看那些⼈有没有进来,鸽王总是令⼈捉摸不透(先监听⼀下远端事件,别⼀下那些⼈就跑没影了),准备⼯作做好了,进房!
// 发布本地⾳频流和视频流
trtcRoomContext.publishLocalVideo()
trtcRoomContext.publishLocalAudio()
// 监听远端⽤户的视频流的变更事件
<(EVENT.REMOTE_VIDEO_ADD, (event)=>{
// 订阅(即播放)远端⽤户的视频流
let userID = event.data.userID
let streamType = event.data.streamType// 'main' or 'aux'
腾讯客服qqtrtcRoomContext.subscribeRemoteVideo({userID: userID, streamType: streamType})
})
// 监听远端⽤户的⾳频流的变更事件
<(EVENT.REMOTE_AUDIO_ADD, (event)=>{
// 订阅(即播放)远端⽤户的⾳频流
let userID = event.data.userID
trtcRoomContext.subscribeRemoteAudio(userID)
})
// 进⼊房间
<('room joinRoom 进房失败:', res)
})
3.
进去了,不⾏,有些⼈⼀⾔不合就要开团,为了世界和平我要禁了他
unsubscribeRemoteVideo(params)
unsubscribeRemoteAudio(params)
⼥朋友打电话来了,先把⾃⼰的麦关⼀下
unpublishLocalVideo()
unpublishLocalAudio()
不⾏,搞不定⼥朋友了,为了⽣命安全,我决定
exitRoom()
总结
讲讲⾃⼰的体验,组件中云服务是以Faas的形式提供的,⽐较符合现在serverless的发展潮流,⽽且electron端也是有⾮常好的⽀持,跨平台能⼒没的说。⼩程序⾥⾯不可否认确实有些坑,但是腾讯的客服还是可以的,晚上也有⼈,话说这也三班倒吗。。⼩程序⾥⾯的⽀持,腾讯云的产品能算的上同⾏中最⾏的了,别⼈⾏好像也不太⾏。要不是现在⼈不喜欢下APP,我也不会跪着写⼩程序了,算了,真⾹。