本文描述了Google开源的WebRTC项目的架构和关键术语,为后续深入学习WebRTC建立基本的概念。
WebRTC顶层架构
Google的开源WebRTC项目的顶层架构如下图所示:
WebRTC项目可划分为5个抽象层次,这5个抽象层次自底向上分别是:
-
设备抽象层:封装与操作系统相关的音视频采集/渲染设备、网络传输接口。
-
音视频通信引擎层:封装了实时视频通信引擎、实时语音通信引擎、网络传输机制,此层实现了通用的实时音视频通信机制,不包含与具体应用场景相关的候选、媒体、网络协商逻辑。此层是最核心的最复杂的一层,由多个模块构成。
-
会话管理层:封装了基于信令的会话管理相关逻辑。
-
C++ API层:封装了供原生App的C++模块调用的API。
-
Web API层:封装了供浏览器端JavaScript层调用的API。
上述抽象层次的第2层【音视频通信引擎层】可细分为3个独立的功能单元:
-
语音引擎:包含各种音频编解码器、Net EQ(网络均衡器),AEC回声消除,AGC增益,ANS噪声抑制。
-
视频引擎:包含各种视频编解码器、JitterBuffer(抖动缓冲),图像增强(视频图像后期处理)。
-
传输协议栈:包含SRTP传输协议、网络连接复用、P2P传输协议(STUN+TURN+ICE)。
WebRTC传输协议栈
WebRTC相关术语
STUN:全称为Simple Traversal of User Datagram Protocol Through Network Address Translators),中文含义为“简单的用UDP穿透NAT”,是一种Client/Server的协议,也是一种Request/Response的协议,默认端口号是3478。详情参考RFC 3489 - STUN - Simple Traversal of User Datagram Protocol (UDP) Through Network Address Translators (NATs),RFC 5389 - Session Traversal Utilities for NAT。
TURN:全称为Traversal Using Relays around NAT,中文含义为“使用中继穿透NAT:STUN的中继扩展”。TURN与STUN的共同点是通过修改应用层中的私网地址达到NAT穿透的效果,不同点是TURN是作为通讯双方的“中继转发器”的方式实现透传。当两台主机之间不能建立点对点的连接时(P2P打洞失败),TURN协议就是用来允许主机控制中继的操作并且使用中继与对端交换数据。TURN与其他中继控制协议不同的是它能够允许一个客户端使用一个中继地址与多个对端建立通信(模仿全锥型NAT)。详情参考RFC 5766 - Traversal Using Relays around NAT (TURN): Relay Extensions to Session Traversal Utilities for NAT (STUN) 。
ICE:全称为Interactive Connectivity Establishment,中文含义为“交互式连接建立”,由IETF的MMUSIC工作组开发出来的,它所提供的是一种框架,使各种NAT穿透技术可以实现统一。ICE跟STUN和TURN不一样,ICE不是一种协议,而是一个框架(Framework),它整合了STUN和TURN。
此文概括了WebRTC的5个抽象层次,并描述了Web传输协议栈结构及WebRTC相关术语,让读者有一个总体的概念。后续,作者将自顶向下逐层讲解,带领读者全面掌握WebRTC API的用法和WebRTC引擎核心模块的基本原理。