Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【实时音视频】live-pusher/live-player与trtc-wx入门介绍

【实时音视频】live-pusher/live-player与trtc-wx入门介绍

原创
作者头像
circleRich
修改于 2022-05-24 03:50:15
修改于 2022-05-24 03:50:15
2.7K00
代码可运行
举报
文章被收录于专栏:小程序TRTC小程序TRTC
运行总次数:0
代码可运行

第一次接触trtc小程序的同学和可能会对茫茫多的api接口产生疑惑,createPusher是做什么的,enterRoom又是干嘛,为什么我调用了之后没有用,硬件设备我又要怎么控制?

这里就要解释一下trtc-wx的定位,它是一个辅助,用于帮业务层简化代码,它不能单独使用,需要与微信小程序的原生组件live-pusher/live-player进行搭配使用。

一、小程序推拉流实现逻辑(live-pusher、live-player与底层之间的关系)

要说trtc-wx那么小程序这两个原生标签就是不能绕开的东西,小程序通过live-pusher/live-player与底层建立联系,如下图所示:它们的调用逻辑链比较简单,小程序之所以可以对手机硬件进行控制(开启摄像头、麦克风等),就是因为我们通过调用链执行了底层代码,底层通过硬件驱动控制硬件设备,这部分不是这篇要说的重点,大量的工作微信已经帮助我们实现,开发者只需要关注应用层代码即可。

小程序调用逻辑链
小程序调用逻辑链

回到live-pusher/live-player,标签本身有很多属性,我们可以把这两个原生标签当作是一个组件,通过传值给该组件,组件对值做一定处理传递到底层,底层调用驱动控制硬件设备,同样对音视频的解码播放也是在这个过程中完成,调用api也是同样的道理,具体api可以查看文档:wx.createLivePusherContextwx.createLivePlayerContext

二、trtc-wx.js的作用

通过上面描述我们已经知道,只需要有一个推拉流地址我便可以直接实现推拉流,那么trtc-wx是是用来做什么的?

这里需要重新提一下trtc-wx的定位是辅助,它集成了腾讯云的trtc-room协议,相较于普通的rtmp协议它包含房间概念并且对数据流做了优化处理,使得会议、直播室等业务场景的处理更加简便、推拉流延迟更低。

因此你可以把trtc-wx当作一个推拉流地址生成器以及回调翻译器,以enterRoom举例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
enterRoom(options) {
    this.setData({
        pusher: this.TRTC.enterRoom({
          sdkAppID: 1400xxxxx, // 您的腾讯云账号
          userID: 'trtc-user', //当前进房用户的userID
          userSig: 'xxxxxxx', // 您服务端生成的userSig
          roomID: 1234, // 您进房的房间号,
          enableMic: true, // 进房默认开启音频上行
          enableCamera: true, // 进房默认开启视频上行
        }),
    }, () => {
        this.TRTC.getPusherInstance().start() // 开始进行推流
    })
},

enterRoom:接口的返回值pusher为一个对象,对象包含live-pusher组件所需要的属性信息。这时候我们结合上面所说的小程序推拉流实现逻辑,仅仅是js层调用enterRom而没有调用到底层sdk,因此也不会产生推流,其意义相当于const name = 'xxx',name却没有被使用,因此需要通过setData将值传递给live-pusher,live-pusher监听到属性的change做一些业务处理后传递给底层sdk。

这时候回过头看一下调用enterRoom传入的参数,sdkAppID、userID、userSig、roomID是用来生成pusherUrl的必要参数,enableMic、enableCamera则为非必传的配置项,而这些配置项我们也可以直接赋值给live-pusher,并不一定需要通过trtc-wx返回的pusher对象去赋值,这也是为什么把trtc-wx当作推拉流地址生成器的原因。

下面来说trtc-wx的另一大作用--回调翻译器,以代码为例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<live-pusher
    url="{{pusher.url}}"
    bindstatechange="_pusherStateChangeHandler"
    bindnetstatus="_pusherNetStatusHandler"
    binderror="_pusherErrorHandler"
    bindbgmstart="_pusherBGMStartHandler"
    bindbgmprogress="_pusherBGMProgressHandler"
    bindbgmcomplete="_pusherBGMCompleteHandler"
    bindaudiovolumenotify="_pusherAudioVolumeNotify"
/>
 // 请保持跟 wxml 中绑定的事件名称一致
_pusherStateChangeHandler(event) {
    this.TRTC.pusherEventHandler(event)
},
_pusherNetStatusHandler(event) {
    this.TRTC.pusherNetStatusHandler(event)
},
_pusherErrorHandler(event) {
    this.TRTC.pusherErrorHandler(event)
},
_pusherBGMStartHandler(event) {
    this.TRTC.pusherBGMStartHandler(event)
},
_pusherBGMProgressHandler(event) {
    this.TRTC.pusherBGMProgressHandler(event)
},
_pusherBGMCompleteHandler(event) {
    this.TRTC.pusherBGMCompleteHandler(event)
},
_pusherAudioVolumeNotify(event) {
    this.TRTC.pusherAudioVolumeNotify(event)
}

通过给live-pusher标签绑定trtc的相关方法,这样在底层将一些回调抛给live-pusher,live- pusher触发这些方法,在通过trtc-wx进行处理抛出给用户,用户只需监听通过trtc-wx翻译过后的事件即可,为什么不让用户自己处理?一方面是因为中间处理过程比较复杂,处理完抛给用户可以让接入更加简单;另一方面,有些特殊状态码是trtc room协议特有的,不方便在live-pusher文档中表述,因此我们封装了trtc-wx

三、trtc-wx接入流程

结合上面所说,trtc-wx的接入流程非常简单:

  1. 生成pusherUrl:调用enterRoom获取返回值后赋值给live-pusher;
  2. 绑定回调:在live-pusher上绑定trtc相关方法后,用户通过trtc.on()进行绑定,事件表
  3. 根据业务需求修改标签属性或者调用 API;

四、常见问题

1. 调用enterRoom接口、属性设置接口,不生效

js层调用enterRoom并没有触发后台相关操作,只有setData将pusherUrl赋值给live-pusher标签后,通过中间层处理,底层才会收到enterRoom,然后抛出进房回调。属性设置接口为相同原因。

2. 收不到对应事件回调

如果只是通过trt.on接口绑定事件,那么是一定不会触发回调的,回调的触发是通过给live-pusher绑定trtc事件,trtc-wx内部经过处理后抛出。

3. 如何实现跨房连麦

trtc room协议是不支持跨房推拉流的,这时候需要使用trtc协议,具体可以参考:【TRTC小程序】跨房连麦功能实现(不混流实现)

五、相关文档汇总

trtc-wx API文档:https://cloud.tencent.com/document/product/647/17018

live-pusher:https://developers.weixin.qq.com/miniprogram/dev/component/live-pusher.html

live-player:https://developers.weixin.qq.com/miniprogram/dev/component/live-player.html

LivePusherContext:https://developers.weixin.qq.com/miniprogram/dev/api/media/live/wx.createLivePusherContext.html

LivePlayerContext:https://developers.weixin.qq.com/miniprogram/dev/api/media/live/wx.createLivePlayerContext.html

【TRTC小程序】跨房连麦功能实现(不混流实现):https://cloud.tencent.com/developer/article/2002839

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
微信小程序TRTC使用custom自定义面板(实现篇)
本文主要是使用 custom 面板实现直播互动,上下麦操作。如有疑问可参考 微信小程序TRTC使用custom自定义面板(理解篇)。本文只是简单演示如何实现主播与观众进行连麦互动,在实际中,通常是有主播端发起与粉丝进行直播互动,通过粉丝来接受,进行连麦。发送这种消息可以使用IM(即时通讯)完成。
yuliang
2021/03/16
1.4K0
实时音视频 TRTC 常见问题汇总---小程序篇
如有更多需求,或希望深度合作,可以 提交工单 或致电4009100100联系我们。
腾讯视频云-Zachary
2021/09/21
5.9K0
实时音视频 TRTC 常见问题汇总---小程序篇
【玩转腾讯云】<trtc-room>小程序组件使用
< trtc-room >是目前腾讯推出的多端实时音视频的处理方案,官方地址介绍。这里记录一下个人使用这个组件的一些经验。 用上TRTC后,各端互通,甚至可以用小程序,在QQ和微信互通,在网页端,pc端都有很好的支持(Electron也有,前端福音)。加上TIM的即时通信能力,直接可以搭建一个企业级的直播应用,如果加上腾讯白板,直接变成会议小帮手,教学大杀器,业务场景完全可以在实时音视频业务之上自由组合。
sskingss
2021/04/14
11K0
从零开始创建一个超简单的TRTC音视频通讯程序(小程序篇)
出于政策和合规的考虑,微信暂未放开所有小程序对实时音视频功能(即 <live-pusher> 和 <live-player> 标签)的支持:
F颜
2020/06/18
2.2K0
【TRTC小程序】跨房连麦功能实现(不混流实现)
推拉流可通过live-pusher/player自身标签赋值或者wx提供的方法进行控制,参考文档:
circleRich
2022/05/13
2.4K1
【TRTC小程序】跨房连麦功能实现(不混流实现)
打通小程序音视频和webRTC
2017年腾讯视频云团队跟微信团队联合,将视频云 SDK 跟微信小程序整合在一起,并开放内部功能。
腾讯视频云终端团队
2018/05/03
19.5K14
打通小程序音视频和webRTC
小程序<live-pusher>与<live-player>的常见问题
1、<live-pusher> 标签动态修改 enable-camera属性不生效如何解决?
hhualiu
2019/09/05
11.2K2
小程序<live-pusher>与<live-player>的常见问题
微信小程序使用TRTC
在使用之前我们需要了解 <live-player> 和 <live-pusher> 微信小程序原生组件,因为小程序TRTC组件标签 <trtc-room> 是基于这两个标签实现的组件,所以在运行调试时开发工具是不支持的,只能在真机上运行。
yuliang
2021/03/10
3K0
实时音视频,小程序端WebRTC互通
我们在 LiteAVSDK 的最新版本里面加入了对 WebRTC 的支持能力,并且已经跟随微信APP的 6.6.6 版本发布出来,此文档主要介绍如何使用原生的 <live-pusher> 和 <live-player> 标签实现 WebRTC 互通能力。
腾讯云-chaoli
2019/05/24
11.4K0
实时音视频,小程序端WebRTC互通
实时音视频开发学习11 - 小程序端二
小程序实现过程就不按照web端一步步拆分代码,而是直接讲解业务内容。核心内容可以参考trtc—room相关的API,本章内容会讲述大部分内容。地址:
金林学音视频
2020/08/28
1.4K0
实时音视频开发学习11 - 小程序端二
实时音视频开发学习10 - 小程序端一
小程序端双人通话、多人会议和语音聊天室三个功能。双人通话中实现1V1视频通话,在结合Web IM SDK可实现在线问诊或客服;语音聊天室能支持多人互动语音聊天,混音、混响等声音特效,适用于狼人杀、在线语音直播等社交场景;多人会议支持多路音视频通话、大小画面和屏幕分享等功能,适用于远程培训、在线教育等。
金林学音视频
2020/08/27
1.5K0
实时音视频开发学习10 - 小程序端一
实时音视频开发学习14 - 常见问题
V1和V2主要区别在于IM的SDK是否内嵌于TRTC中,V1线路是内嵌,而V2则可选,默认不打包IM的SDK包。V2在通话质量、线路规格、接入难度以及功能扩展上均比V1更有优势。
金林学音视频
2020/08/30
2.9K0
实时音视频开发学习14 - 常见问题
实时音视频 TRTC 常见问题汇总---集成接入篇
TRTC 的日志默认压缩加密,后缀为 .xlog。日志是否加密是可以通过 setLogCompressEnabled 来控制,生成的文件名里面含 C(compressed) 的就是加密压缩的,含 R(raw) 的就是明文的。
腾讯视频云-Zachary
2019/11/01
14.6K1
实时音视频 TRTC 常见问题汇总---集成接入篇
实时音视频 TRTC 常见问题汇总---咨询问题篇
支持的平台包括 iOS、Android、Windows(C++)、Windows(C#)、Mac、Web、Electron、微信小程序、Flutter,更多详情请参见 平台支持。
腾讯视频云-Zachary
2019/11/01
13.4K0
实时音视频 TRTC 常见问题汇总---咨询问题篇
如何让视频会议在小程序上开起来
|导语  使用企业微信跨组织间会议门槛较高,要求外部客户或合作伙伴先建立在企业微信的线上组织才可入会,通过引入小程序入会能力,降低跨组织会议的门槛; 为解决微信用户发起会议,邀请企业微信、微信好友入会的场景,企业微信会议小程序也提供在微信侧接入和发起会议的能力,实现微信用户发起会议邀请企业成员加入会议的能力; 产品功能说明 企业微信的会议是接入了腾讯云提供的XCast SDK,腾讯会议后台提供了Rest APi接口用于创建会议、加入会议、获取会议信息等; 企业微信的会议是接入了腾讯云提供的XCast S
腾讯大讲堂
2020/09/30
12.3K1
【版本发布】腾讯实时音视频TRTC SDK 6.9
新的版本围绕视频画质、直播 CDN 融合、Android 10.0 系统兼容,以及云端录制等几个方面,增加了很多新的功能特性,期待您的使用:
shixin
2020/01/21
2.9K0
TRTC小程序本地关闭音视频,为什么远端收到了退房通知
TRTC小程序会自动进行切换身份,如果本地没有音视频的上行,会自动切换成观众的身份(毕竟在大房间中不可能去维护一个几万人的userList,小程序里面做个循环都费劲)
sskingss
2021/07/13
7100
教你从0到1搭建小程序音视频
升级微信到最新版本,发现页卡 => 小程序 => 搜索“腾讯视频云”,即可打开小程序Demo:
腾讯视频云终端团队
2018/06/28
4.7K2
教你从0到1搭建小程序音视频
微信小程序TRTC使用custom自定义面板(理解篇)
登录腾讯云官网,官网给出了小程序TRTC的Demo分别实现了语音聊天室、双人视频通话、多人视频通话,小程序TRTC提供了custom自定义面板开发者们可以自行设计页面内容和样式,接下来我们就使用custom自定义面板实现一下直播互动功能。
yuliang
2021/03/15
1.6K0
【最佳实践】巡检项:实时音视频 (TRTC) 原生平台 SDK 拉流时序是否正确
客户业务侧调用mTRTCCloud.startRemoteView()接口订阅远端视频流,出现偶现的失败情况,具体操作是在用户进入房间的回调事件onEnterRoom之前调用startRemoteView(),大概率会出现黑屏现象。客户告知希望可以根据自己的业务逻辑去订阅远端流。
jackwlchen
2022/04/29
5530
推荐阅读
相关推荐
微信小程序TRTC使用custom自定义面板(实现篇)
更多 >
LV.0
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验