Web Real-Time Communication(Web实时通信,WebRTC)由一组标准、协议和JavaScript API组成,用于实现浏览器之间(端到端)的音频、视频及数据共享。WebRTC使得实时通信变成一种标准功能,任何Web应用都无需借助第三方插件和专有软件,而是通过简单地JavaScript API即可完成。
名词
1 STUN
Session Traversal Utilities for NAT (STUN) – RFC 5389
2 TURN
中继方式 NAT 穿透(Traversal Using Relay NAT (TURN) – RFC 5766)
3 ICE
交互式连接建立(Interactive Connectivity Establishment (ICE) – RFC 5245)
一种综合性的NAT穿越技术,它是一种框架,可以整合各种NAT穿越技术如STUN、TURN(Traversal Using Relay NAT 中继NAT实现的穿透)。ICE会先使用STUN,尝试建立一个基于UDP的连接,如果失败了,就会去TCP(先尝试HTTP,然后尝试HTTPS),如果依旧失败ICE就会使用一个中继的TURN服务器。
通信的两侧可能会处于不同的网络环境中,有时会存在好几层的访问控制、防火墙、路由跳转,所以我们需要一种方法在复杂的网络环境中找到对方,并且连接到相应的目标。WebRTC 使用集成了 STUN、TURN 的 ICE 来进行双方的数据通信。
4 SDP
会话描述协议(Session Description Protocol)
为了连接到其他用户,我们必须要对其他用户的设备情况有所了解,比如音频视频的编码解码器、使用何种编码格式、使用何种网络、设备的数据处理能力,所以我们需要一张“名片”来获得用户的所有信息,而 SDP 为我们提供了这些功能。
一个 SDP 的握手由一个 offer 和一个 answer 组成。
5 RTCPeerConnection 对象
RTCPeerConnection 对象是 WebRTC API 的入口,它负责创建、维护一个 WebRTC 连接,以及在这个连接中的数据传输。目前新版本的浏览器大都支持了这一对象,但是由于目前 API 还不稳定,所以需要加入各个浏览器内核的前缀,例如 Chrome 中我们使用 webkitRTCPeerConnection 来访问它。
SCTP
SRTP
DTLS
架构
WebRTC的分层协议图
连接模型
P2P Mesh
音视频数据流只在终端用户之间相互传输,不经过任何服务器节点,而且每个人都要与其它所有人建立P2P连接。
SFU 方案
(Selective Forward Unit)。SFU从发布客户端复制音视频流的信息,然后分发到多个订阅客户端。典型的应用场景是1对多的直播服务。
一个会议室 n 人,SFU 服务器的宽带是:
- incoming = bitrate x n
- outgoing = bitrate x n + hangouts x n x (n-2)
说明:bitrate:主画面码率,hangouts:小窗口码率
participants | resolution(bitrate/hangouts) | incoming | outgoing |
---|---|---|---|
4 | 720P(1.5Mbps/0.3Mbps) | 1.5x4=6Mbps | 1.5x4+0.3x4x(4-2)=8.4Mbps |
9 | VGA(0.6Mbps/0.3Mbps) | 0.6x9=5.4Mbps | 0.6x9+0.3x9x(9-2)=24.3Mbps |
MCU
(Multi-point Control Unit)。MCU是传统视频会议系统中的核心控制单元,在WebRTC的系统实现中, 适合于多人音视频通话场景,MCU可以对接收到的多路流进行转码和混合,并向每个终端输出单路流。
NAT 穿透
ICE
单 PeerConnection 方案 VS 多 PeerConnection 方案
单 PeerConnection 方案
多 PeerConnection 方案
流程
标准WebRTC连接建立流程
端口分配
Hangouts 方式
视频最多人数
- 微信最多9人
- Google Hangouts - 一次会议中最多有25位参与者,过去是最多容纳10个人。当我第一次也是唯一一次使用它进行WebRTC培训时,参会者人数一超过10人就卡死了,导致了我只能选择使用其他视频会议服务。
- Hangouts Meet - 在单个会话中将其参与者人数限制在50人以内
- Houseparty - 8名参与者
- Skype - 25名参与者
- http://appear.in - 使用专业帐户登录,单个房间内最多支持12个参与者
- Amazon Chime - 桌面版16位参与者,iOS上最多8位参与者(尚未支持安卓)
- Atlassian Stride and Meet Jitsi - 50位参与者
WebRTC API
WebRTC实现了三个API,分别是:
- MediaStream:通过MediaStream的API能够通过设备的摄像头及话筒获得视频、音频的同步流
- RTCPeerConnection:RTCPeerConnection是WebRTC用于构建点对点之间稳定、高效的流传输的组件
- RTCDataChannel:RTCDataChannel使得浏览器之间(点对点)建立一个高吞吐量、低延时的信道,用于传输任意数据
价格
即时通讯云
http://www.easemob.com/pricing/im
参考资料
- 深入理解WebRTC
- 聊聊WebRTC网关服务器1:如何选择服务端端口方案?
- 聊聊WebRTC网关服务器2:如何选择PeerConnection方案?
- 聊聊WebRTC网关服务器3:如何优化Server的线程方案?
- 聊聊WebRTC网关服务器4:QoS方案分析
- WebRTC 是如何进行通信的,WebRCT 的三种网络结构
- WebRTC网关服务器搭建:开源技术 vs 自行研发
- 即构自研WebRTC网关服务器架构实践
- WebRTC视频通话中最多能容纳多少用户?
- How Many Users Can Fit in a WebRTC Call?
- WebRTC媒体服务器
- WebRTC 开发实践:为什么你需要 SFU 服务器
- 视频监控录像计算工具
- 帧率,分辨率,码流的关系以及硬盘容量计算方法