WebRTC
WebRTC 实战
我们都知道浏览器本身不支持相互之间建立信道进行通信,都需要通过服务器进行中转。比如现在有两个客户端—甲、乙,他俩想要进行通信,首先需要甲和服务器、乙和服务器之间建立信道。甲给乙发送消息时,甲先将消息发送到服务器上,服务器对甲的消息进行中转,发送到乙处,反过来也是一样。这样甲与乙之间的一次消息要通过两段信道,通信的效率同时受制于这两段信道的带宽。同时这样的信道并不适合数据流的传输,如何建立浏览器之间的点对点传输,一直困扰着开发者。因此
WebRTC vs WebSockets
WebRTC 架构
下面是

整体架构分为应用层和核心层。应用层提供实现相关业务逻辑
- 第一层为
C++ API ,其中最主要的是PeerConnection ,这个接口需要重点学习和掌握。 - 第二层为
Session 层,为上下文管理层,应用里的音频和视频及非音视频的数据处理逻辑都可以在这层进行。 - 第三层为引擎和传输层,包括音频引擎和视频引擎,以及音视频的传输,这也是整个架构中最重要的一层。
- 第四层与硬件相关,包括音视频的采集和网络的
IO 。
注意,
- Voice Engine(音频引擎模块
) :包含编码能力、音频缓冲Buff (防网络抖动) 、回音消除(实时连麦关键点) 。 - Video Engine(视频引擎模块
) :包含编码能力(如VP8 ) 、视频缓冲、图像增强。 - Transport(传输模块
) :传输协议在底层使用UDP ,上层使用的RTP (为安全起见增加SRTP ) ,还有P2P 机制,包括STUN 、TURN 和ICE 。
我们知道