WebRTC是什么
WebRTC是一种开源HTML5规范,是一个可以用在视频聊天,音频聊天或 P2P 文件分享等 Web App 中的 API。它的出现就是为了使PC端和移动端能实现实时音视频和数据通信。因此,PC端各大主流浏览器和移动端(包括IOS)都是支持它的。
webRTC有什么特点
最主要的特点就是它能使开发人员通过调用简单的API即可创建出视频会议系统。比如通过MediaStream
就能拿到本地音视频设备的数据,再通过RTCPeerConnection
即可与其他用户进行音视频对话或者数据通信。它屏蔽了音视频的实现细节,大大减少了上手难度,几行代码即可实现,非常简单。
同时,PC端的各大浏览器和移动端(包括IOS)都支持webRTC的。因此,也不需要额外去考虑兼容问题。既减少了开发人员的工作量,也确保了用户体验的兼容性和一致性。
WebRTC是开源免费的,这个很关键。开源免费意味着将会有大批技术人员和公司去使用它,使得它的技术越来越成熟,社区的建设也愈加完善。当有技术问题时,能够在社区里快速找到解决方案。
当然,webRTC本身也是非常厉害之处的。比如,webRTC具有强大的打洞能力,使用STUN、ICE、TURN、RTP-over-TCP的关键NAT和防火墙穿透技术,并支持代理。这些技术名称你可能都没听过,没关系,后面会一一介绍。这里,只需要知道这些名称的作用是让两个用户实现实时音视频和通信,少了它们就无法实现了,就是这么重要。
还有就是webRTC也是支持多种传输协议的。比如当你需要实现实时互动类直播时,可以使用UDP协议,能确保传输速度;如果不在意传输速度,而重点关注音视频的质量,那么也可以使用TCP协议来实现。它能满足多种应用场景,任你选择。
WebRTC组成部分
这里的组成结构并不是指它的内部组成部分,而是指使用webRTC时应该有的组成部分。一个完整的使用webrtc的系统中,应该有 用户、房间、RTCPeerConnection和媒体流四个部分,这四个部分缺一不可。如下图所示:
这里最大的实线框代表房间,虚线框代表用户,MS
代表媒体流,PC
代表RTCPeerConnection。房间的每个用户将本地的媒体流通过RTCPeerConnection传递给其他用户,从而进行实时音视频和数据通信。
这里分别介绍下房间、用户、媒体流和RTCPeerConnection。
房间
在webrtc中是不存在房间这个概念的,房间的存在是为了能使多个用户或参与者能在同一通信环境中进行互动。
房间通常是由应用程序或服务来实现和管理的。可以是临时的,只在特定的通信会话期间存在;也可以是长期的,用于持久性的通信。
在一个房间内,每个用户都可以和其他参与者建立对等连接,实现一对一的音视频和数据通信。当然,用户也可以同时与多个参与者建立连接,每个连接之间互不干扰。
房间的创建和管理一般是需要用到信令服务器的。信令服务器主要负责信令的交换和房间管理。信令交换使得同一个房间里的用户之间可以相互发送信令,即知道房间内还有其他用户并与其建立连接;房间管理则处理用户在房间内的操作,比如进入和离开房间,还有禁言禁音等。
房间的使用场景有很多,比如多人会议或游戏、在线教育、群组聊天等
用户
在webrtc中,用户可以是浏览器,也可以是应用程序,还可以是支持webrtc的设备。只要是支持webrtc,都能成为用户。
每个用户可以是通信的发起方,或者接收方。可以使用媒体捕获设备(如麦克风和摄像头)来采集音频和视频,并将其发送给其他用户。当然,能发送也能接收。接收到其他用户的音视频后也可以通过video
和audio
标签显示或播放出来。
用户之间也是能进行数据通信的,可以互相发送消息,也能发送文件。当然,发送消息和发送文件是不一样的,它们的传输数据类型和大小都不一样,需要根据应用场景进行考虑。
用户是通过信令服务器进行媒体协商和建立连接的。信令服务器负责传递各个用户的媒体信息和网络信息,使两个用户之间能根据传递的信息建立对等连接。简单来说就是,A用户发送A本地的相关设备信息给B用户,B用户拿到A的信息后进行判断,知道A用户是不是在线或者A设备是不是可用等,再决定要不要和A进行连接。如果决定要连接,再把B本地的相关设备信息发给A,然后才能相互建立连接。
媒体流
媒体流也是webrtc中的核心内容,少了它,就相当于是你要发快递,现在快递员有了,装快递的包装盒也有了,但唯独少了要快递的东西。
媒体流就是采集到的音频或视频的实时数据流。它代表从摄像头、麦克风或其他源获取的连续音频或视频数据。
媒体流可以包含单个或多个音频或视频轨道。可以理解为是一条河流,上面可以同时有多条船只,可以有来自麦克风的音频轨道船只,也可以有来自摄像头的视频轨道船只。通过媒体流,再顺着RTCPeerConnection
这条路就能抵达另一个用户。
RTCPeerConnection
这是webrtc中最核心的,也是内容最多的东西了。它表示本地端和远程对等端之间的 WebRTC 连接,提供了创建远程对等端连接、维护和监视连接,以及在连接不再需要时关闭连接的方法。就是说RTCPeerConnection
相当于是一座桥梁,连接了本地和远程。
通过RTCPeerConnection
,两个用户就可以顺利的交换媒体信息和网络信息,建立和维护通信连接。再具体点就是,如媒体协商、 NAT 穿越、音视频数据的接收与发送,甚至它还可以用于非音视频数据的传输等等。所以,它的重要性可想而知,少了它,啥也干不了。
一旦建立好连接,就能实现实时音视频和数据通信了。通过RTCPeerConnection
,应用程序可以实现音视频通话、屏幕共享、发送消息和文件等功能。
小结
本文从webrtc是什么,有什么特点以及有哪些组成部分三个方面来介绍了webrtc。其中重点介绍了webrtc的四个组成部分,分别是房间、用户、媒体流和RTCPeerConnection
,这四个部分缺一不可。
房间是需要使用服务器的,这个会放到最后来介绍。用户和流媒体都是与设备有关,而用户的话,能支持webrtc就能用,不支持也没办法,所以也没有什么需要介绍的;媒体流则有一些比较实用的功能,比如拍照、录制视频或者共享屏幕等。而RTCPeerConnection
则比较复杂,内容也很多,这个会放到后面去介绍。
将从最简单的媒体流开始介绍,从简单功能开始,由浅入深,循序渐进,到最后使用自己训练的模型,再结合webrtc来实现一个简单的音视频会议系统。
项目地址
前端:gitee.com/yoboom/webr… 后端:gitee.com/yoboom/webr…
感兴趣的可以直接去体验一下,欢迎star和提pr