WebRTC 概述

By | 2017年8月9日

什么是WebRTC ?

WebRTC (Web Real-Time Communication) 是一个免费的开源项目,它通过简单的api为浏览器和客户端提供实时通讯能力。

WebRTC是p2p的,为什么依然需要服务器?

  • 为了客户端去协调通讯而交换元数据,即信令。
  • 去解决网络地址交换(NATs)和防火墙。

什么是信令 ?

信令是协调通讯的过程。WebRTC应用为了建立一个通话,客户端需要交换如下信息:
* 用户打开或关闭通讯的session控制消息
* 错误消息
* 媒体元数据例如例如编码解码器和及其设置,宽带和媒体类型等
* 用于建立安全连接的关键信息
* 宽带信息,例如被外部世界看到的host的ip地址和端口

这个信令处理需要一种方式在客户端之间相互传递。这种机制并没有在WebRTC的api种实现,你需要建立自己的信令服务器。换句话说WebRTC没有定义信令的协议等,
也没有指定信令的传输方式,我们可以根据自己的业务需求来使用合适的方式进行传输,可以使用但并不限于(xmpp、sip、websocket、等等方式)。

为什么信令处理没有在WebRTC种定义?

为了避免重复定义并且最大限度的使用已有技术,信令的方法和协议没有被WebRTC标准定义。

使用ICE处理NATs和防火墙

元数据是通过信令服务器中转发给另一个客户端,但是对于流媒体,一旦回话建立,RTCPeerConnection将首先尝试使用点对点连接。简单一点来说就是,每个客户端都有唯一的地址,他能用来和其他客户端进行通讯和数据交换。

现实生活中客户端都位于一个或多个NAT之后,或者一些杀毒软件还阻止了某些端口和协议,或者在公司还有防火墙和代理等等。
WebRTC就是通过ICE这套框架来处理复杂网络环境的,如果想启用这个服务,你必须让你的应用程序传ICE服务器的URL给RTCPeerConnection,ICE试着找最好的路径来让客户端建立连接,他尝试所有的可能的选项,让后选择最合适的方案,ICE首先尝试P2P连接,如果失败就会通过Turn服务器进行转接。换个说法就是:

  1. STUN服务器是用来取外网地址的。
  2. TURN服务器是在P2P失败时进行转发的。
    每个TURN服务器都支持STUN,ICE处理复杂的NAT设置,同时NAT打洞要求不止一个公网IP和端口。

一旦RTCPeerConnection取到了所有的信息,ICE过程就发生了,RTCPeerConnection使用ICE框架取到两点之间最好的路径,当然这个过程离不开STUN和TURN的支持。

STUN

NAT的作用就是提供内外网端口的映射,因为在公网上两个内网客户端要建立直接连接就必须先知道彼此对应的公网地址和端口,这时候知道对方内网IP和地址是没用的。
而STUN的作用就是让客户端先发现自己的公网IP和端口,所以负载不大。

TURN

RTCPeerConnection首先尝试使用P2P,如果失败,将使用TURN转发两个端点的音视频数据。

TURN转发的是两个端点之间的音视频数据,不是信令数据。
因为TURN服务器是在公网上,所以他能被各个客户端找到,另外TURN服务器转发的是数据流,很占用宽带和资源。

发表评论

电子邮件地址不会被公开。 必填项已用*标注