WebRTC学习进阶之路 --- 概述、原理、源码目录结构与整体架构介绍

片头语:在学习WebRTC首先最好具备一定的音视频相关基础知识,可以参考https://blog.csdn.net/xiaomucgwlmx/article/details/102838490,里边有很详细的介绍总结以供参考,接下来让我们一起来认识一下WebRTC。

WebRTC学习进阶之路系列总目录:https://blog.csdn.net/xiaomucgwlmx/article/details/103204274

一、WebRTC概述

什么是WebRTC?

        WebRTC的相关介绍很多地方都有(详细可以参考:https://baike.baidu.com/item/WebRTC/5522744?fr=aladdin),我这里就不详细赘述,重点总结一下:

  • 音视频处理 + 即时通讯的开源库
  • 2010年Google开源
  • 优秀的跨平台的多媒体架构(还有一个处理音视频的开源库就是FFmpeg,两者是音视频领域的佼佼者,有着各自不同的侧重点,FFmpeg的侧重点是多媒体文件的编辑、音视频的编解码等后处理,而WebRTC的优势是整个网络,网络的抖动、丢包、评估,回音消除、降噪、自动增益等对音频的处理等等

WebRTC能做什么?

  • 音视频实时互动(音视频会议、在线教育、连麦等所有实时互动)
  • 游戏、即时通讯、文件传输(P2P,二进制、文字)等
  • 百宝箱,传输、音视频处理(回音消除、降噪)等等模块(各种模块可以单独抽取出来放到业务项目中使用)

我们要学习什么?

      正如我这个系列文章开篇所总结的目录:https://mp.csdn.net/postedit/103204274

  • WebRTC学习进阶之路 --- 概述、原理、源码目录结构与整体架构介绍
  • WebRTC学习进阶之路 --- 网络编程基础、TCP/IP详解
  • WebRTC学习进阶之路 --- WebRTC网络知识详解(一)(P2P/STUN/TURN/ICE)
  • WebRTC学习进阶之路 --- WebRTC网络知识详解(二)(加解密/opensssl/DTLS/TLS-SRTP)
  • WebRTC学习进阶之路 --- WebRTC网络知识详解(三)(最全流媒体协议(RTP/RTCP/RTSP/RTMP/MMS/HLS/HTTP/ HTTP-FLV(HDL)/SDP))
  • WebRTC学习进阶之路 --- Web服务器原理、服务器基础编程知识
  • WebRTC学习进阶之路 --- WebRTC核心之SDP详解
  • WebRTC学习进阶之路 --- 信令服务器
  • WebRTC学习进阶之路 --- 设备管理、音视频数据采集
  • WebRTC学习进阶之路 --- 非音视频数据传输
  • WebRTC学习进阶之路 --- 异步I/O时间处理、epoll
  • WebRTC学习进阶之路 --- 源码分析

体验一下实时互动

       Google给我们提供了一个非常方便的实时互动例子,网址:https://appr.tc/,可以直接实现音视频实时互动,直接输入房间号就可以,感兴趣伙伴可以体验下,很赞。

二、WebRTC原理与架构

知其原理方可延展,首先我们先来看一下官方为我们提供的架构图:

WebRTC学习进阶之路 --- 概述、原理、源码目录结构与整体架构介绍

我们简单来讲述一下:

架构图颜色标识说明:

(1)应用层:紫色部分是Web开发者API层;

(2)核心层:蓝色实线部分是面向浏览器厂商的API层(也就是红色框标内模块,也是本人专注研究的部分)

(3)核心层:蓝色虚线部分浏览器厂商可以自定义实现

WebRTC架构组件介绍

(1) Your Web App
       Web开发者开发的程序,Web开发者可以基于集成WebRTC的浏览器提供的web API开发基于视频、音频的实时通信应用。

(2) Web API
       面向第三方开发者的WebRTC标准API(Javascript),使开发者能够容易地开发出类似于网络视频聊天的web应用,最新的标准化进程可以查看这里。

(3) WebRTC Native C++ API
       本地C++ API层,使浏览器厂商容易实现WebRTC标准的Web API,抽象地对数字信号过程进行处理。最主要的包括PeerConnection,音视频传输,非音视频数据传输等为数不多的接口,降低应用层开发难度;

(4) Transport / Session
传输/会话层,也就是上下文管理层,管理音视频。非音视频等数据处理逻辑;
    a.  RTP Stack协议栈
         Real Time Protocol
    b.  STUN/ICE
         可以通过STUN和ICE组件来建立不同类型网络间的呼叫连接。
    c.  Session Management
         一个抽象的会话层,提供会话建立和管理功能。该层协议留给应用开发者自定义实现。

(5) VoiceEngine
      音频引擎是包含一系列音频多媒体处理的框架,包括从视频采集卡到网络传输端等整个解决方案。
PS:VoiceEngine是WebRTC极具价值的技术之一,是Google收购GIPS公司后开源的。在VoIP上,技术业界领先,后面的文章会详细了解,现在音频编解码方面用的最多的是OPUS、AAC。

a.  iSAC
Internet Speech Audio Codec
针对VoIP和音频流的宽带和超宽带音频编解码器,是WebRTC音频引擎的默认的编解码器
采样频率:16khz,24khz,32khz;(默认为16khz)
自适应速率为10kbit/s ~ 52kbit/;
自适应包大小:30~60ms;
算法延时:frame + 3ms

b.  iLBC
Internet Low Bitrate Codec
VoIP音频流的窄带语音编解码器
采样频率:8khz;
20ms帧比特率为15.2kbps
30ms帧比特率为13.33kbps
标准由IETF RFC3951和RFC3952定义

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

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

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

(6) VideoEngine
       WebRTC视频处理引擎,VideoEngine是包含一系列视频处理的整体框架,从摄像头采集视频到视频信息网络传输再到视频显示整个完整过程的解决方案。还有H264、openH264等。
a.  VP8
       视频图像编解码器,是WebRTC视频引擎的默认的编解码器,VP8适合实时通信应用场景,因为它主要是针对低延时而设计的编解码器。
       PS:VPx编解码器是Google收购ON2公司后开源的,VPx现在是WebM项目的一部分,而WebM项目是Google致力于推动的HTML5标准之一
b.  Video Jitter Buffer
视频抖动缓冲器,可以降低由于视频抖动和视频信息包丢失带来的不良影响。
c.  Image enhancements
图像质量增强模块
对网络摄像头采集到的图像进行处理,包括明暗度检测、颜色增强、降噪处理等功能,用来提升视频质量。

(6) Transport
      底层用的UDP,上层用的RTP/SRTP、RTCP,Multiplexing,复用,多个流复用同一个通道,

下边最后一层是与硬件相关的,这三个模块都是可重载的,增加灵活度,Chrome就用的自己的音视频渲染,介绍如下:

(7) Audio Capture/Render
     音频的采集与渲染

(8) Video Capture
     视频采集,这里没有视频的渲染,这个需要应用层自己去做

(9) Network I/O
      网络I/O


三、WebRTC的源码目录结构介绍

大家都知道WebRTC是开源的项目,代码通过*我们可以直接git clone,后边会具体介绍如何拉取和编译WebRTC的源码,这里抛砖引玉先整体性的介绍一下WebRTC的源码目录结构,先整体上有个印象和框架在,后边也会逐步的进行分析。如下图,每一项已有简单的内容介绍:

WebRTC学习进阶之路 --- 概述、原理、源码目录结构与整体架构介绍

WebRTC学习进阶之路 --- 概述、原理、源码目录结构与整体架构介绍

WebRTC学习进阶之路 --- 概述、原理、源码目录结构与整体架构介绍

WebRTC学习进阶之路 --- 概述、原理、源码目录结构与整体架构介绍

下边这个是我自己在Windows下编译源码生成的VS2017的工程目录:

   WebRTC学习进阶之路 --- 概述、原理、源码目录结构与整体架构介绍WebRTC学习进阶之路 --- 概述、原理、源码目录结构与整体架构介绍

这块先不着急,简单了解下就行,后续会进阶分析。

这样,我们就对WebRTC有了一个整体的认识和了解,方便我们后续的学习之路,下一遍我们来一起研究下网络编程基础、TCP/IP详解。

WebRTC学习进阶之路系列总目录:https://blog.csdn.net/xiaomucgwlmx/article/details/103204274