Skip to content

WebRTC相关技术

简介

WebRTC的诞生,就是基于浏览器的多媒体即时通信。而且 WebRTC 能够实现:实时双向音视频、主流浏览器支持、开发者容易入手、使用范围广且技术开源成熟等条件,且具有毫秒级的延迟特性。

而且,它在浏览器端有成熟的 API ,我们无需多少代码就可以满足无客户端视频通话的目的。可以说,WebRTC 是将前端技术和音视频嫁接起来最佳的媒介

建立连接流程

WebRTC建立连接的流程如下:

A 为caller(呼叫端),B为callee(被呼叫端)。

  1. 首先 A 呼叫 B ,呼叫之前我们一般通过WebSocket等协议,让对方能收到信息。
  2. B 接受应答,A 和 B 双方开始创建RTCPeerConnection,用来关联 A 和 B 的 SDP 会话信息。getUserMedia() API获取支持的本地视频和音频流。
  3. A 调用 CreateOffer 创建信令,同时通过 setLocalDescription 方法在本地实例 PeerConnection 中存储一份。
  4. 调用信令服务器将 A 的SDP转发给B。
  5. B 接收到 A 的 SDP 后调用 setRemoteDescription ,将其储存在初始化好的 PeerConnection 实例中。
  6. B 同时调用 createAnswer 创建应答 SDP ,并调用 setLocalDescription 储存在自己本地 PeerConnection 实例中)。
  7. B 继续将自己创建的应答 SDP 通过服务器转发给 A。
  8. A 调用 setRemoteDescription 将 B 的 SDP 储存在本地 PeerConnection 实例。
  9. 在会话的同时,从图中我们可以发现有个 ice candidate ,这个信息就是 ICE(Interactive Connectivity Establishment)候选信息,A 发给 B 的 B 储存,B 发给 A 的 A 储存,直至候选完成。找到较好的可用传输路径。
  10. 开始流媒体传输,一旦连接建立完成并完成参数协商,端点将开始相互发送音视频数据媒体流。
  11. 关闭连接:当连接结束后需要关闭连接,释放资源。

需要注意的是,WebRTC连接需要一个信令服务器来协商连接设置和媒体流交换,但是建立连接的过程并不需要实际的服务器,可以通过P2P的方式直接建立连接。可以搭建作为中转服务器为无法直连的客户提供转发服务。

STUN服务

STUN(Session Traversal Utilities for NAT,NAT会话穿越应用程序)是一种网络协议,它允许位于NAT(或多重NAT)后的客户端找出自己的公网地址,查出自己位于哪种类型的NAT之后以及NAT为某一个本地端口所绑定的Internet端端口。这些信息被用来在两个同时处于NAT路由器之后的主机之间创建UDP通信。该协议由RFC 5389定义。

这个服务主要是一个打洞服务,让nat后的主机能够相互直连通信。

TURN服务

TURN的全称为Traversal Using Relays around NAT,是STUN/RFC5389的一个拓展,主要添加了Relay功能。如果终端在NAT之后, 那么在特定的情景下,有可能使得终端无法和其对等端(peer)进行直接的通信,这时就需要公网的服务器作为一个中继, 对来往的数据进行转发。这个转发的协议就被定义为TURN。

这个服务虽然和STUN配套使用,当常常单独部署。用于打洞失败的场景,帮助用户转发流量。使nat后的用户可用成功连接。