WebRtc初识
简介
WebRTC(Web Real-Time Communication)项目的最终目的主要是让Web开发者能够基于浏览器(Chrome\FireFox…)轻易快捷开发出丰富的实时多媒体应用,而无需下载安装任何插件,Web开发者也无需关注多媒体的数字信号处理过程,只需编写简单的Javascript程序即可实现
-
跨平台:windows linux mac android iOS
-
链接的是peer端示意
-
WebRTC由三大模块组成:
- 语音引擎
- 视频引擎
- 网络传输
-
WebRTC支持端到端通信,但还是需要服务器:
- 客户端间交换元数据来协调通信:这被称为信令
- 处理网络地址转换器(Network Address Translator,NAT)和防火墙
- 对等通信失败时数据中转
架构
- 紫色部分是Web开发者API层
- 蓝色实线部分是面向浏览器厂商的API层
- 蓝色虚线部分浏览器厂商可以自定义实现
#信令(理想网络)
信令是协调通信的过程。信令用于交换三种类型的信息:
- 会话控制消息:初始化或关闭通信并报告错误。
- 网络配置:对于外界,我的计算机的IP地址和端口是什么?
- 媒体功能:我的浏览器及其要与之通信的浏览器可以处理哪些编解码器和分辨率
信令协调流程
- PeerA、PeerB分别把自己信息(IP、端口、支持的音视频编解码类型等)告诉信令服务器。
- 信令服务器对媒体能力进行协商,找到一组最佳的音视频格式(webrtc不找最佳,只找排名靠前的),然后分别对PeerA和PeerB发送应答。
- 发向PeerB的应答中包含PeerA的媒体能力和建立媒体连接的IP地址、端口号信息,
- 发向PeerA的应答中包含PeerB的媒体能力和建立媒体连接的IP地址、端口号信息。
- PeerA和PeerB通过对方的媒体流的IP地址和端口号信息,建立链接,就可以直接进行音视频通话了。
WebRTC权威指南一书中的详细流程如下:
NAT
网络地址转换(Network Address Translation,缩写为NAT),也叫做网络掩蔽或者IP掩蔽(IP masquerading),是一种在IP数据包通过路由器或防火墙时重写来源IP地址或目的IP地址的技术
- 被普遍使用在有多台主机但只通过一个公有IP地址访问因特网的私有网络中,同样也让主机之间的通信变得复杂,导致了通信效率的降低。
- NAT 导致WebRTC中本可以直接互通的网络,无法直接通话
- 类型
- 基本网络地址转换(Basic NAT)
- 网络地址端口转换(NAPT)
- 完全圆锥型NAT(Full cone NAT)
- 受限圆锥型NAT(Address-Restricted cone NAT)
- 端口受限圆锥型NAT(Port-Restricted cone NAT)
- 对称NAT(Symmetric NAT)
注意:在对称型网络下,无法实现P2P互通
Client A(局域网IP:192.168.1.5)想与Client B(局域网IP:172.20.6.8)进行视频通话,如图:
- Client A一看是Client B的IP地址是172.20.6.8就蒙了,这是哪里来的设备
- Client B一看Client A的IP地址信息是192.168.1.5,感受也不会好到哪里去
STUN穿透
如上NAT网络下,Client A想要与Client B进行视频通讯,必须要先知道对端在公网的IP地址,这个功能由STUN协议实现
STUN(Session Traversal Utilities for NAT,NAT会话穿越应用程序)是一种网络协议,它允许位于NAT(或多重NAT)后的客户端找出自己的公网地址,查出自己位于哪种类型的NAT之后以及NAT为某一个本地端口所绑定的Internet端端口,这些信息被用来在两个同时处于NAT路由器之后的主机之间创建UDP通信
- 穿透流程 见 信令穿透中转流程图
TURN中转
对称型网络下,是无法实现P2P互通的。这时就需要TURN服务器作为中转。
-
TURN服务器其实和信令服务器互通的原理是一样的。在公网上指定一个固定的公网IP和端口号(默认是3478),实现媒体数据的中继互转功能
-
中转流程 见 信令穿透中转流程图
信令 穿透 中转 流程图
- 信令:处理peer间数据协调
- STUN穿透: 处理NAT和防火墙
- TURN中继:处理p2等通信失败后的数据中转
#多人音视频链接模式
- Mesh/网格模式
- MCU
- 利用mcu的处理和中转功能
- SFU
- 服务器仅数据中转和分发
音频模块
WebRTC语音引擎由一系列音频和网络处理模块组成,包括了从音频采集到网络传输等处理流程的完整解决方案,是WebRTC中最具价值的技术之一。
- 工作流程图如下:
语音引擎的一般工作流程如下:
- 1.发起端进行声音采集
- 2.采集到的声音信号进行回声消除,噪音抑制,自动增益控制处理
- 3.语音压缩编码
- 4.通过Internet网路传输到接收端
- 5.到达接收端,先进入NetEQ模块进行抖动消除,丢包隐藏解码等操作
- 6.将处理过后的音频数据送入声卡设备进行播放