WebRTC提供了一套标准API,使Web应用可以直接提供实时音视频通信功能。大部分浏览器及操作系统都支持WebRTC,直接可以在浏览器端发起实时音视频通话,本文以WebRTC初学者的视角去完成一个1V1网页版实时音视频通话。

完成音视频通话需要了解四个模块:

  • 音视频采集、
  • STUN/TURN 服务器、
  • 信令服务器、
  • 端与端之间P2P连接。

使用WebRTC的API完成音视频采集,配合信令服务器和WebRTC的RTCPeerConnection方法能实现1V1通话,简易流程如下图:

image.png

接下来依次讲解它们的作用和核心API。

目前这项Web技术支持的浏览器有chrome, firefox和safari。

WebRTC 有三个主要的API

  • getUserMedia - 采集本地音频和视频流
  • RTCPeerConnection - 用来创建对端连接并传输音视频的API
  • RTCDataChannel - 用于传输二进制数据。

WebRTC提供端对端的音视频通讯,不需要媒体服务器转发媒体数据,架构简化图如下,

img

WebRTC采集和传输音视频数据的过程可以分为三步进行

  1. 实时捕获本地的音视频流
  2. 实时编码音视频并在网络中向对等端传输多媒体数据
  3. 对等端接受发送者的音视频,实时解码播放

信令

信令是协调通信的过程。为了使WebRTC应用程序能够建立一个”通话”,其客端户需要交换以下信息

会话控制消息用于打开或关闭通信

错误消息

媒体元数据,如编解码器和编解码器设置,带宽和媒体类型

密钥数据,用于建立安全的连接

网络数据,如主机IP地址和端口

这个信令过程需要一个方式使客户端之间来回地进行消息传递, WebRTC标准并没有规定信令方法和协议。

使用socekt.io可以非常容易的创建聊天室 用socket.io当信令服务器

优点

  • 它是开源免费的。
  • 它的表现远比普通的服务-客户端模式应用要好,尤其是在耗时方面。
  • 不需要额外的服务器转发,可以直接在用户之间端到端连接。

Web Socket 和 WebRTC 的区别

设计初衷不同

WebSocket 是一个用于浏览器通信的双向机制。浏览器通信有主要两种传输信道:HTTP 和 WebSockets。

HTTP 主要用于获取网页内容,文字或图片等,是一种客户服务类型协议,其中浏览器是客户端,而网页服务器是服务端。

而对于 WebSocket 而言,浏览器通过一个 WebSocket 连接到网页服务器,与 HTTP 相同也是一个客户服务类型协议。但是 HTTP 是一个单向的信道,而 WebSocket 是双向的,意味着服务器和客户端之间的连接可以一直保持到两者主动断开。

WebSocket 主要用于实时网页应用和聊天应用等,而在这上面 WebRTC 相较于 WebSocket 的优势在于:

  • WebRTC 是为高质量音视频实时通信设计的;
  • WebRTC 提供的浏览器端到端通信远比 WebSocket 提供的服务延迟更低。

实现上的区别

  • WebRTC 使用 UDP 协议,而 WebSocket 使用 TCP 协议;
  • WebRTC 可以同时提供高质量且低延迟的推流。

WebRTC 其实也使用了 WebSocket

WebRTC 其实也使用了 WebSocket,不过是用于搭建 WebRTC的信令机制,但是在连接建立结束后,由于 WebRTC 是端到端连接,因此也不再需要额外服务器。

参考文档

WebRTC 介绍

WebRTC 教程