WebRTC(Web Real-Time Communication)(网页实时通信)是一个谷歌开源项目,它提供了一套标准API,使Web应用可以直接提供实时音视频通信功能,不再需要借助任何插件。
音视频会议、在线教育、即时通信工具、游戏、人脸识别
WebRTC由四部分组成,分别为两个WebRTC终端、一个信令服务器、一台中继服务器(STUN/TURN)和两个NAT,这是最经典的一对一通信架构。
通话过程需要三个主要步骤分别是:媒体协商、网络协商、建立连接。
首先两个客户端想要创建连接,一般来说需要有一个双方都能访问的服务器来帮助它们交换连接所需要的信息。这个服务器叫做信令服务器。
与服务器建立连接后,通信的双方就可以通过信令服务器彼此交换必要的信息了,比如告诉对方自己的外网IP地址和端口是多少等。
双方交换的媒体数据由SDP(Session Description Protocol,会话描述协议)描述
在交换信息之前WebRTC终端还要与STUN/TURN服务器建立连接。这样做的目的是通过STUN/TURN服务器获得各自的外网IP地址和端口。
WebRTC终端拿到自己的外网IP地址和端口后,再通过信令服务器交换给对方。当彼此获得对方地址后,它们就可以尝试NAT穿越,进行P2P连接了。这个过程涉及NAT及ICE协议。
STUN是指简单UDP穿透NAT,这项技术允许位于NAT后的客户端找出自己的公网IP地址,以及查出自己位于哪种类型的NAT及NAT所绑定的Internet端口。
TURN是指使用中继穿透NAT,是STUN的一个扩展,主要添加了中继功能。
如果终端在进行NAT之后,在特定的情景下有可能使得终端无法和其他终端进行直接的通信,这时就需要将公网的服务器作为一个中继,对来往的数据进行转发。这个转发采用的协议就是TURN。