1 前言

WebRTC前世今生,在2010年google收购了GlobalIpSolutions公司,并在2011年将其开源。WebRTC主要是用于web浏览器的多媒体及时通讯技术,可以实现在没有其他中间媒介的情况下实现点对点通讯。本文主要目的是了解WebRTC的整体框架,为后续深入学习WebRTC框架打下基础。

2 整体框架介绍

WebRTC目前比较普遍的框架描述如下图所示,WebRTC整体架构从上到下一共分为三层,最上层是WbeAPI层,这一层是暴露给开发人员的用于开发WebRTC应用的JavaScript API;中间的那一层是WebRTC技术最为关键核心的一层,一共包括三个模块,分别是音频引擎、视频引擎以及网络传输;最下层是由各厂商自主开发的一层,用于实现音视频的采集和网络IO。
在这里插入图片描述

2.1 音频引擎

音频引擎(VoiceEngine)负责WebRTC的音频通信,通过一套完整的音频处理框架,解决了音频从外接设备如麦克风读入数据然后再通过网络进行传输的音频处理问题。主要分为两个模块:音频编解码和语音信号处理。其核心是回声消除(AcousticEchoCancceler,AEC)和降噪(NoiseReduction,NR)。回声消除是一种改善声音质量,消除产生的回声或防止其发生的方法。降噪是从信号中去除噪声的过程。音频机制主要分为iSAC和iLBC两大类编解码器。iLBC编解码器该窄带音频编解码器适用于IP上的语音通信。

2.2 视频引擎

视频引擎(VideoEngine)负责WebRTC的视频通信,通过一套完整的视频处理框架,解决了视频从外接设备如摄像头采集数据然后再通过网络传输最后显示视频的视频处理问题。主要分为两个模块:视频图像编解码和视频图像处理。视频图像编解码方面,默认的编解码器是VP8,比较适合实时通信场景下的视频编解码。视频图像处理方面,通过两种方式来保证传输的视频图像的高质量、美观性,一方面,利用视频抖动缓冲器来减小由于抖动和丢包带来的影响,另一方面对采集到的图像进行颜色增强、降噪等处理来提升图像清晰度。

3.3 网络传输

网络传输负责音视频数据的传输,通过一套完整的传输框架,解决了音视频数据的加密传输和防火墙穿透问题。一方面,通过SRTP协议保证音视频数据在加密的状态下进行传输,另一方面,通过整合了STUN和TURN的ICE协议来保证音视频数据可以突破防火墙和NAT网络的限制。

3 目录结构

WebRTC目录结构大致如下,其中核心模块是modules层,这个部分功能相对独立可以单独剥离运用,类似一个音视频的工具箱,涵盖了比较全面的音视频组件,音视频QOS策略主要是集中在这部分。网络P2P模块是另一个核心功能,对于点对点网络连接研究很有帮助。后续将根据各个模块和数据流进一步深入研究。
在这里插入图片描述
webrtc的框架结构共可以分为5层. 每层的大致作用如下:
接口层: 该层主要由mediaengine模块充当, 其主要作用为连接Java层与C++/C层, 向Java层提供JNI接口, 用于上层调用; 同时提供回调定义, 用于下层回调.
逻辑层: 该层主要由audio_engine和video_engine模块组成, 其主要维护了音/视频通道的逻辑处理关系, mediaengine模块通过VoiceEngineData/VideoEngineData来调用逻辑层. 而逻辑层则通过VoEBase/ViEBase来管理各自的通道及切换逻辑, 并通过其他类来调用组件层相关接口.
组件层: 该层由modules模块构成, 向上提供了所有音/视频相关的操作组件, 逻辑层可以通过这些组件抽象地调用编解码功能或下层硬件设备及文件. 该层也可以视为是对具体平台操作的抽象.
通用操作层: 该层由common_audio和common_video模块构成, 其作用主要是提供了一些通用的工具函数, 用于不同组件之间的公共调用. 可以视为工具类.
平台封装层: 该层由system_wrapper模块构成, 其作用主要为跨平台接口, 将不同平台间的常用系统接口进行封装及抽象, 便于不同平台之间的移植.

Logo

致力于链接即构和开发者,提供实时互动和元宇宙领域的前沿洞察、技术分享和丰富的开发者活动,共建实时互动世界。

更多推荐