WebRTC视频通话
WebRTC提供了一套标准API,使Web应用可以直接提供实时音视频通信功能。大部分浏览器及操作系统都支持WebRTC,直接可以在浏览器端发起实时音视频通话,本文以WebRTC初学者的视角去完成一个1V1网页版实时音视频通话。
完成音视频通话需要了解四个模块:
- 音视频采集、
- STUN/TURN 服务器、
- 信令服务器、
- 端与端之间P2P连接。
使用WebRTC的API完成音视频采集,配合信令服务器和WebRTC的RTCPeerConnection
方法能实现1V1通话,简易流程如下图:
接下来依次讲解它们的作用和核心API。
目前这项Web技术支持的浏览器有chrome, firefox和safari。
WebRTC 有三个主要的API
- getUserMedia - 采集本地音频和视频流
- RTCPeerConnection - 用来创建对端连接并传输音视频的API
- RTCDataChannel - 用于传输二进制数据。
WebRTC提供端对端的音视频通讯,不需要媒体服务器转发媒体数据,架构简化图如下,
WebRTC采集和传输音视频数据的过程可以分为三步进行
- 实时捕获本地的音视频流
- 实时编码音视频并在网络中向对等端传输多媒体数据
- 对等端接受发送者的音视频,实时解码播放
信令
信令是协调通信的过程。为了使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 是端到端连接,因此也不再需要额外服务器。