WebRTC
概念
把实时音视频引入到浏览器中的技术。由 W3C 和 IETF 联合制定。
WebRTC 核心代码是使用 C++ 编写,且为了支持 Android 和 iOS 分别包含了Java 和 oc 的 SDK ,window 和 Linux 平台则直接调用 webrtc 的 c++ 接口。
运行模式
webrtc 应用在 web 端或者 native 端都会有三种运行模式。
- P2P (Peer to Peer)
- SFU (Selective Forwarding Unit)
- MCU (Multi-point Control Unit)
P2P (又称 Mesh 架构)
P2P 模式会尽量在客户端之间直接建立媒体数据连接,避免使用服务器转发数据。
优点:
可以减少租用服务器和网络带宽成本。
服务端比较 “轻量”,TURN 服务器比较简单,一定比例的 P2P 成功率可极大减轻服务端的压力
缺点:
客户端的网络连接质量难以得到保证,音视频通话效果往往会差一些。
每新增一个客户端,所有的客户端都需要新增一路数据上行,客户端上行带宽占用太大。因此,通话人数越多,效果越差
无法在服务端对视频进行额外处理,如:录制存储回放、实时转码、智能分析、多路合流、转推直播等等
当两人时:
当三人时:
SFU 模式
是一种通过服务器来路由和转发 WebRTC 客户端音视频数据流的方法。
SFU 会吧自己伪装成一个 WebRTC 的 Peer 客户端,
SFU 还有一个最重要的能力就是具备 one-to-many 的能力,即可以将一个 Client 端的数据转发到多个 Client 端。
这种结构下,无论多少人同时进行视频通话,每个 WebRTC 的客户端只需要连接一个 SFU 服务器,上行一路数据即可,极大减少了多人视频通话场景下 Mesh 模型给客户端带来的上行带宽压力。
MCU
SFU 虽然解决了每个客户端上行的带宽压力,但下行依然是多路流,随着人数的增多,下行带宽压力依然很大,所以还有一种 MCU 的结构,
优点
可以将各路客户端上行的视频流合成为一路,再转发给其他客户端,
缺点
合流需要转码,对服务端压力比较大,下发给客户端的流也是固定的合流画面,灵活性不是很好