WebRTC音视频开发:React+Flutter+Go实战
上QQ阅读APP看书,第一时间看更新

1.2 WebRTC整体架构

WebRTC目前已经形成了一个HTML5的规范。由W3C组织来制定并维护这个标准,其总体架构如图1-1所示。

图1-1 WebRTC整体架构图

对于这个框架,不同的开发人员关注的内容不同,例如:

·Video Conference、Video Call、Remote Education为应用层,指具体的音视频应用,是应用开发人员最关注的。

·Web API部分是Web应用开发者API层,为上层应用层提供API服务,是应用开发者调用的接口。

·C++ API部分是面向浏览器厂商的API层。

·Session Management为信令管理层,可由开发者自行定义实现。

·VoiceEngine、VideoEngine以及Transport为WebRTC的核心内容,可由WebRTC的应用SDK厂商进行优化处理。

·Audio Capture、Video Capture可供浏览器厂商自定义实现。

WebRTC架构图中涉及的内容及概念较多,接下来将详细说明。

1.Web应用

Web开发者可以基于Web API开发基于视频、音频的实时通信应用,如视频会议、远程教育、视频通话、视频直播、游戏直播、远程协作、互动游戏、实时人脸识别、远程机械手操作等。

2.Web API

Web API是面向第三方开发者的WebRTC标准API(JavaScript),使开发者能够容易地开发出类似于网络视频聊天的Web应用,最新的技术进展可以参考W3C的WebRTC文档https://www.w3.org/TR/webrtc/,常用的API如下所示。

·MediaStream:媒体数据流,如音频流、视频流等。

·RTCPeerConnection:该类很重要,提供了应用层的调用接口。

·RTCDataChannel:传输非音视频数据,如文字、图片等。

WebRTC的API接口非常丰富,更多详细的API可以参考网址https://developer.mozilla.org/zh-CN/docs/Web/API/WebRTC_API,该文档提供了中文说明。

3.C++ API

底层API使用C++语言编写,使浏览器厂商容易实现WebRTC标准的Web API,抽象地对数字信号过程进行处理。如RTCPeerConnection API是每个浏览器之间点对点连接的核心,RTCPeerConnection是WebRTC组件,用于处理点对点间流数据的稳定和有效通信。

4.Session Management

Session Management是一个抽象的会话层,提供会话建立和管理功能。该层协议留给应用开发者自定义实现。对于Web应用,建议使用WebSocket技术来管理信令Session。信令主要用来转发会话双方的媒体信息和网络信息。

5.Transport

Transport为WebRTC的传输层,涉及音视频的数据发送、接收、网络打洞等内容,可以通过STUN和ICE组件来建立不同类型的网络间的呼叫连接。

6.VoiceEngine

VoiceEngine(音频引擎)是包含一系列音频多媒体处理的框架,包括从音频采集到网络传输端等整个解决方案。VoiceEngine是WebRTC极具价值的技术之一,是Google收购GIPS公司后开源的,目前在VoIP技术上处于业界领先地位。下面介绍主要的模块。

·iSAC(Internet Speech Audio Codec)是针对VoIP和音频流的宽带和超宽带音频编解码器,是WebRTC音频引擎的默认编解码器,参数如下所示。

·采样频率:16kHz,24kHz,32kHz(默认为16kHz)。

·自适应速率为:10kbps~52kbps。

·自适应包大小:30ms~60ms。

·算法延时:frame+3ms。

·iLBC(Internet Low Bitrate Codec)是VoIP音频流的窄带语音编解码器,参数如下所示。

·采样频率:8kHz。

·20ms帧比特率为15.2kbps。

·30ms帧比特率为13.33kbps。

·NetEQ For Voice是针对音频软件实现的语音信号处理元件。NetEQ算法是自适应抖动控制算法以及语音包丢失隐藏算法,该算法能够快速且高解析度地适应不断变化的网络环境,确保音质优美且缓冲延迟最小,是GIPS公司独特的技术,能够有效地处理网络抖动和语音包丢失时对语音质量产生的影响。NetEQ也是WebRTC中一个极具价值的技术,对于提高VoIP质量有明显效果,与AEC、NR、AGC等模块集成使用效果更好。

·Acoustic Echo Canceler(AEC,回声消除器)是一个基于软件的信号处理元件,能实时地去除Mic采集到的回声。

·Noise Reduction(NR,噪声抑制)也是一个基于软件的信号处理元件,用于消除与相关VoIP的某些类型的背景噪声(如嘶嘶声、风扇噪音等)。

7.VideoEngine

VideoEngine是WebRTC视频处理引擎,包含一系列视频处理的整体框架,从摄像头采集视频到视频信息网络传输再到视频显示,是一个完整过程的解决方案。下面介绍主要的模块。

·VP8是视频图像编解码器,也是WebRTC视频引擎默认的编解码器。VP8适合实时通信应用场景,因为它主要是针对低延时而设计的编解码器。VPx编解码器是Google收购ON2公司后开源的,现在是WebM项目的一部分,而WebM项目是Google致力于推动的HTML5标准之一。

·Video Jitter Buffer(视频抖动缓冲器)模块可以降低由于视频抖动和视频信息包丢失带来的不良影响。

·Image Enhancements(图像质量增强)模块对网络摄像头采集到的视频图像进行处理,包括明暗度检测、颜色增强、降噪处理等功能,用来提升视频质量。