WebRTC (Web Real-Time Communications) 是一项实时通讯技术,它允许网络应用或者站点,在不借助中间媒介的情况下,建立浏览器之间点对点(Peer-to-Peer)的连接,实现视频流和(或)音频流或者其他任意数据的传输。WebRTC包含的这些标准使用户在无需安装任何插件或者第三方的软件的情况下,创建点对点(Peer-to-Peer)的数据分享和电话会议成为可能。
简而言之,WebRTC就是W3C定的一个Web标准,用来做二进制数据传输用的,各浏览器只要支持WebRTC,就可以不通过插件,直接在Web端实现诸如音频、视频、文件等二进制数据的传输。方便之处在于:不需要再使用Flash、Silverlight之类的插件了。but!理想很丰满,现实往往很残酷,WebRTC从诞生之初到现在仍然还有很多地方布满了坑。
step1. 开通云服务
小程序跟 WebRTC 的互通是基于实时音视频(TRTC)服务实现的,需要开通该服务。
注册账号之前点先领取腾讯云2860元代金券,用于购买腾讯云CVM云服务器、云数据库产品时可以用来抵用,节约财务成本。
越简单越容易忽略,必须要强调说明,并不是所有的Web运行环境都支持WebRTC,支持WebRTC的Web运行环境也不一定会支持所有的API及特性,因此,先要确定Web运行环境是否能支持,可以通过检测页面看一下(需要访问外国网站,覆盖了WebRTC几乎所有API方法)或腾讯云WebRTCAPI.js的检查。
出于安全考虑,WebRTC只允许在HTTPS环境下使用,否则浏览器将不允许页面获取音频或视频设备,调试时请使用HTTPS或localhost。
数据对象指的是浏览器能够管理的输入/输出设备,因为 WebRTC 的设备管理方式是浏览器先将输入/输出设备抽象为 MediaStream 对象,再通过 API 将 MediaStream 对象提供给 Web 页面使用,如果浏览器无法识别到设备,那么 Web 页面必然是获取不到数据的。
WebRTC 的工作流程,如下图。详见WebRTC通信流程
看上去比较复杂,可以花时间理解一下交互过程。简单来说分两部分:
这里以腾讯云当前提供的 WebRTC SDK 即 WebRTCAPI.js 为例 ,简述一下其工作过程如下:
1、 SDK 封装的 getLocalStream
是通过浏览器的 MediaDevice
和 getUserMedia
标准方法来得到设备的数据( MediaStream
对象),通过 getLocalStream
拿到 MediaStream
对象后将其赋值给页面的 <video>
标签元素的 srcObject
属性即可显示播放,在本地进行预览;
2、SDK 与服务端通过 websocket 方式建立信令通道,SDK 封装的方法为 enterRoom
;
3、wss 连接建立后,SDK 会与服务端进行 SDP 协商,交换双方的音视频支持能力及相关参数;
4、 SDP 协商成功后,SDK 与服务端节点建立 RTCPeerConnection
,这个过程会有 P2P 打洞(ICE),为了提高打洞成功率,服务端提供了 STUN 服务器,SDK 会与服务器 P2P 直连后进行数据收发,SDK 封装的的方法是 startRTC
;
5、每个加入房间的用户,都会先按照 1-4 步,与服务端建立 wss 连接传递信令,同时通过 RTCPeerConnection
将数据发送到服务端。新进入用户后,已经在房间里的用户(包括新加入成功的用户)将会通过 wss 接收到其他用户进入房间的通知;
6、然后每个用户会与服务端协商 SDP 信息,协商成功后,服务端会将远端的用户数据通过 RTCPeerConnection.onTrack
传输给每个在房间的用户,SDK 将其封装在 onRemoteStreamUpdate
事件;用户通过 onRemoteStreamUpdate
获取到远端的 MediaStream
对象,然后将其赋值给页面的 <video>
标签元素,展示远端用户的画面;
7、上面的 1-6 步即从开始到通话的过程,在通话过程中间,如果有人员退出,SDK 会通过 wss 收到服务端的通知,并通过 onRemoteStreamRemove
得知变化,在本地移除 <video> 标签,直至最终所有人停止推流(stopRTC
)退出(quit
)。
navigator.mediaDevices.enumerateDevices()
看看能不能获取到设备列表,拿不到说明浏览器都没有识别到设备,检查浏览器或检查设备;navigator.mediaDevices.getUserMedia({"audio":true,"video":true})
看能不能正常返回 MediaStream 对象,不能正常返回说明浏览器没有拿到数据,检查一下浏览器的配置。
设备采集、编解码、网络都在浏览器手里攥着,SDK没办法控制,所以,尽量保持设备好、浏览器好、网络好。
小程序跟 WebRTC 的互通是基于实时音视频(TRTC)服务实现的,需要开通该服务。
注册账号之前点先领取腾讯云2860元代金券,用于购买腾讯云CVM云服务器、云数据库产品时可以用来抵用,节约财务成本。
1、腾讯云产品3折特惠,热门云产品3折起,服务更稳,速度更快,价格更优
了解腾讯云官网的 webrtc 服务,可以对接 Chrome 端的 H5 视频通话,因为不是本文档的重点,此处不做赘述。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。