WebRTC实时通信技术介绍

WebRTC (Web Real-Time Communications) 是一项实时通讯技术,它允许网络应用或者站点,在不借助中间媒介的情况下,建立浏览器之间点对点(Peer-to-Peer)的连接,实现视频流和(或)音频流或者其他任意数据的传输,其技术使用ICE协议框架WebRTC包含的这些标准使用户在无需安装任何插件或者第三方的软件的情况下,创建点对点(Peer-to-Peer)的数据分享和电话会议成为可能。简单地说就是在web浏览器里面引入实时通信,包括音视频通话等。

WebRTC实现了基于网页的语音对话或视频通话,目的是无插件实现web端的实时通信的能力。WebRTC提供了视频会议的核心技术,包括音视频的采集、编解码、网络传输、展示等功能,并且还支持跨平台,包括linuxwindowsmacandroid等。

 

ICE

交互式连接建立Interactive Connectivity Establishment (ICE) 是一个允许你的浏览器和对端浏览器建立连接的协议框架。在实际的网络当中,有很多原因能导致简单的从A端到B端直连不能如愿完成(如:防火墙)。这就需要绕过阻止建立连接的防火墙,给你的设备分配一个唯一可见的地址(通常情况下我们的大部分设备没有一个公网地址),如果路由器不允许主机直连,还得通过一台服务器转发数据。

 

ICE通过使用以下几种技术完成上述工作:

1、 STUN服务:

NAT的会话穿越功能Session Traversal Utilities for NAT (STUN) 是一个允许位于NAT后的客户端找出自己的公网地址,判断出路由器阻止直连的限制方法的协议。客户端通过给公网的STUN服务器发送请求获得自己的公网地址信息,以及是否能够被(穿过路由器)访问。

当一个请求发送到STUN服务的时候,STUN服务查看这个请求的来源地址,并把地址放到 packet里面,然后发回去。所以现在WebRTC 知道 Peer 的公网IP地址了,之后STUN
服务就不会参与到 Peer Peer 之间的通信链路中去了,也就不需要转发流。通常情况下,是可以建立通信的,但不是在所有的情况下都能正常工作。例如:一般情况下,路由器的WAN口有一个公网IP,所有连接这个路由器LAN口的设备会分配一个私有网段的IP地址(例如192.168.1.3)。私网设备的IP被映射成路由器的公网IP和唯一的端口,通过这种方式不需要为每一个私网设备分配不同的公网IP,但是依然能被外网设备发现。一些路由器严格地限定了部分私网设备的对外连接。这种情况下,即使STUN服务识别了该私网设备的公网IP和端口的映射,依然无法和这个私网设备建立连接。这种情况下就需要转向TURN协议。

 



2、 TURN服务:

一些路由器使用一种“对称型NAT”NAT模型。这意味着路由器只接受和对端先前建立的连接(就是下一次请求建立新的连接映射)。NAT的中继穿越方式Traversal Using Relays around NAT
(TURN)
通过TURN服务器中继所有数据的方式来绕过对称型NAT”。就需要在TURN服务器上创建一个连接,然后告诉所有对端设备发包到服务器上,TURN服务器再把包转发给你。

例如,如果 peer-to-peer 通信失败的话,提供一个 cloud fallback。当无法建立端到端的链接时,转而调用云服务中的 relay。请求:给我一个公共的IP地址。由于这个公共地址是在云服务上。任何人都可以和他建立链接。也就意味着这个call可以建立起来。即使你在一个受限制的网络环境中,甚至在一个网络代理后面。数据是通过中转服务器发送的,使用中转服务器的带宽,缺点是,由于数据实际上是通过服务器中继的,因此会产生运营成本。但这意味着这个通话可以在几乎所有的网络环境下正常的工作。能确保 call 可以在绝大数网络环境下正常工作。