WebRTC
是一项实时通讯技术。它允许网络应用或者站点,在不借助中间媒介的情况下,建立浏览器之间点对点的连接。
- 实现视频流和(或)音频流或者其他任意数据的传输。
WebRTC
包含的这些标准使用户在无需安装任何插件或者第三方的软件的情况下。
- 创建点对点的数据分享和电话会议成为可能。
实时通信和即时通信区别
IM
即时通信:
- 通过文字聊天、语音消息发送、文件传输等方式通信,考虑的是可靠性
RTC
实时通信:
- 音视频通话、电话会议,考虑的是低延时
应用场景
WebRTC
的能力使其适用于各种实时通信场景:
点对点通讯:
WebRTC
支持浏览器之间进行音视频通话,例如语音通话、视频通话等电话会议:
WebRTC
可以支持多人音视频会议,例如腾讯会议、钉钉会议等屏幕共享:
WebRTC
不仅可以传输音视频流,还可以用于实时共享屏幕直播:
WebRTC
可以用于构建实时直播,用户可以通过浏览器观看直播内容
WebRTC通信过程
WebRTC
实现一对一通信需要哪些基本条件?
WebRTC
终端(两个):
- 本地和远端,负责音视频采集、编解码、NAT 穿越以及音视频数据传输等
Signal
信令服务器:
- 自行实现的信令服务,负责信令处理,如加入房间、离开房间、媒体协商消息的传递等
STUN/TURN
服务器:
- 负责获取
WebRTC
终端在公网的IP
地址,以及NAT
穿越失败后的数据中转服务
通信过程如下:
本地(
WebRTC
终端)启动后,检测设备可用性,如果可用后开始进行音视频采集工作。本地就绪后,发送 加入房间 信令到
Signal
服务器
Signal
服务器创建房间,等待加入对端(
WebRTC
终端)同样操作,加入房间,并通知另一端双端创建媒体连接对象
RTCPeerConnection
,进行媒体协商双端进行连通性测试,最终建立连接
将采集到的音视频数据通过
RTCPeerConnection
对象进行编码,最终通过P2P
传送给对端/本地,再进行解码、展示
多人音视频三大架构
Mesh
Mesh
架构是利用WebRTC
对等连接,在参与会议的各方之间两两P2P
连接,即P2P2P2P
,形成一个网状结构。优势
实现简单,只需要
ICE
服务器用于实现P2P
穿越就行不需要服务器中转数据,节省开发和成本
充分利用了客户端的带宽资源
缺陷
每端都需要将自己的媒体流发送到其他各端,并从其他各端获取流,占用带宽较多,参与人越多,占用的带宽就越大
所以对带宽的要求极高,
Mesh
架构在真实的应用场景中几乎没有人使用
MCU
MCU
架构由一个中心化的MCU
服务器(对媒体流进行编码、转码、解码、混合处理)和多个终端组成一个星形结构。各终端将自己要共享的音视频流发送给服务器,服务端进行混合后再将复合流发到各端。
优势
每个终端只需发送一份媒体流,再接收单个复合流,减少客户端带宽压力
接收的复合流,所有参与人看到的是相同的画面,客户体验非常好
缺陷
- 需要一台强大的机器来解码、合成和重新编码这些大量运算的工作,对
CPU
资源的消耗很大
SFU
SFU
架构同MCU
,也是由一个中心化的服务器和多个终端组成。但与
MCU
不同的是,SFU
服务器不对音视频进行编码、解码、混流等算力较高的工作。
- 只负责转发媒体或者存储媒体,实际上就是一个音视频路由转发器。
SFU
是最近几年流行的新架构,目前WebRTC
多方通信媒体服务器大多都是SFU
架构。优势
服务端压力相对较小,由于是数据包直接转发,不需要编码、解码,对
CPU
资源消耗很小直接转发也极大地降低了延迟,提高了实时性
对客户端的宽带要求适中,针对低延迟、高带宽媒体转发进行了优化
缺陷
- 由于是数据包直接转发,参与人观看多路视频的时候可能会出现不同步
- 相同的视频流,不同的参与人看到的画面也可能不一致
综合来说:
SFU
是三种架构方案中优势最明显而劣势相对较少,是目前最优的一种多方通信架构方案。