常见架构
目前常用的多人通话架构主要为Mesh方案、SFU结构、MCU结构。
MCU结构
MCU 架构是非常成熟的技术,在硬件视频会议中应用非常广泛。MCU 架构是非常成熟的技术,在硬件视频会议中应用非常广泛,比较有名的项目是 FreeSWITCH。该方案由一个服务器和多个终端组成,如下图所示,各终端将自己要共享的音视频流发送给媒体服务器,服务器端将会混合在同一个房间中的所有终端的音视频流,最终生成一个混合后的音视频流再发给各个终端。实际上服务器端就是一个音视频混合器, 要进行解码、混流、重新编码的操作,因此这种方案服务器对CPU的消耗巨大,已逐步被淘汰。
MCU 的优势:
- 技术非常成熟,有硬件MCU和软件MCU,在硬件视频会议中应用非常广泛,但已逐步被淘汰。
- 作为音视频网关,通过解码、再编码可以屏蔽不同编解码设备的差异化,满足更多客户的集成需求,提升用户体验和产品竞争力。
- 一致性好,将多路视频混合成一路,所有参与人看到的是相同的画面,客户体验非常好。
- 带宽成本低
MCU 的缺点:
- 重新解码、编码、混流都需要大量的运算,对CPU资源的消耗很大。
- 重新解码、编码、混流会带来延迟。
- 由于机器资源耗费很大,所以MCU所能提供的容量有限,一般十几路视频就会达到上限。
SFU结构
SFU架构方案也是由一个服务器和多个终端组成,但SFU 不对音视频进行混流,收到某个终端共享的音视频流后,就直接将该音视频流转发给房间内的其他终端。实际上可以理解为一个音视频路由转发器,目前 WebRTC 多方通信媒体服务器都是SFU架构。这种架构灵活性能高,搭配视频的 Simulcast 模式或 SVC 模式,使其成为更多公司的选择。
SFU的优势:
- 数据包直接转发,不需要编码、解码,对 CPU 资源消耗很小。
- 直接转发也极大地降低了延迟,提高了实时性。
- 灵活性,能够更好地适应不同的网络状况和终端类型。目前 SFU 实现都支持 SVC 模式和simulcast模式,用于适配 WiFi、4G 等不同网络状况,以及 Phone、Pad、PC 等不同终端设备。
SFU的缺点:
- 带宽成本高(若n个用户通话,对于每个客户端,存在1条上传和n-1条下载)。
- 数据包直接转发,参与人观看多路视频的时候可能会出现不同步;相同的视频流,不同的参与人看到的画面也可能不一致
- (混流)参与人同时观看多路视频,在多路视频窗口显示、渲染等会带来很多麻烦,尤其对多人实时通信进行录制,多路流也会带来很多回放的困难。总之,整体在通用性、一致性方面比较差。
Mesh架构
Mesh结构是一个网状结构,多个终端之间两两进行连接。这种方案对各终端的带宽要求比较高。
Mesh的优势:
- 不需要服务器中转数据,现有 WebRTC 通信模型就可以实现NAT穿透,不需要单独开发媒体服务器。
- 能够充分利用客户端的带宽资源。
- 能够节省服务器的资源,控制成本。
Mesh的缺点:
- 参与人越多,占用的带宽就越大。除此之外
- 对 CPU、Memory 等资源具有极大的考验
- 如果有部分用户的网络不能实现 NAT 穿越,但还想让这些人与其他人互通,需要更可靠的穿透方案。
多个PeerConnection与单个PeerConnection多个SSRC的区别
多人通话方案中通常有两种协商方案,建立多个PeerConnection和建立单个PeerConnection但包含多个SSRC。licode/kurento/janus 基于多PeerConnection,Mediasoup和jitsi基于单PeerConnection多SSRC方案。他们的区别在于:
- 多peerConnection易于加入和删除,断开或增加peerconnection即可,不用重新协商
- 多peerConnection可以连接到不同的目的地
- 多peerConnection中,每个RTPconnection有自己的NAT,增加网络、内存、CPU开销
- 多peerConnection的Web-internal视图混乱
- 多peerConnection中,不同peerconnetion 的ssrc值可能相同,跟踪和调试增加困难