前文《webrtc视频通信总结》总结了webRTC实现的整体流程思路。
通过RtcPeerConnection,coturn服务以及websocket信令服务我们打通了一对一的点对点视频语音通信。
扩展一下思路,单人聊天我们做到了,那可以实现多人聊天也就是所谓的群聊吗?
在网上找了一些方案,大体有MESH、MCU、SFU三种架构。
其中MESH架构是最简单的,它是在原有一对一的基础上的扩展。每一个客户端不再只建立一个连接,而是建立多个连接,分别与群里的其他人建立连接。这种模式下服务器端压力最小,客户端压力最大,所以不适合大型会议,对于客户端的性能要求也比较高。
MCU架构是由服务端来统一处理来自多个客户端的媒体流,并进行合并转码等操作,然后分发给每一个客户端。这种模式下,客户端只需要和服务端进行连接,给服务端发媒体流,并接收来自服务端的媒体流用于前台展示。这种模式下,客户端压力最小,服务端压力最大。而且服务端因为计算量大,可能会有延迟等问题
SFU架构算是一个折中,客户端和服务端连接,只给服务端发送媒体流,服务端把群聊系统里其他客户端的媒体流转发给客户端,这样服务端不需要做转码合并等操作,压力会小一些。