片头语:在学习WebRTC首先最好具备一定的音视频相关基础知识,可以参考https://blog.csdn.net/xiaomucgwlmx/article/details/102838490,里边有很详细的介绍总结以供参考,接下来让我们一起来认识一下WebRTC。
WebRTC学习进阶之路系列总目录:https://blog.csdn.net/xiaomucgwlmx/article/details/103204274
WebRTC的相关介绍很多地方都有(详细可以参考:https://baike.baidu.com/item/WebRTC/5522744?fr=aladdin),我这里就不详细赘述,重点总结一下:
正如我这个系列文章开篇所总结的目录:https://mp.csdn.net/postedit/103204274
Google给我们提供了一个非常方便的实时互动例子,网址:https://appr.tc/,可以直接实现音视频实时互动,直接输入房间号就可以,感兴趣伙伴可以体验下,很赞。
知其原理方可延展,首先我们先来看一下官方为我们提供的架构图:
我们简单来讲述一下:
(1)应用层:紫色部分是Web开发者API层;
(2)核心层:蓝色实线部分是面向浏览器厂商的API层(也就是红色框标内模块,也是本人专注研究的部分)
(3)核心层:蓝色虚线部分浏览器厂商可以自定义实现
(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是开源的项目,代码通过我们可以直接git clone,后边会具体介绍如何拉取和编译WebRTC的源码,这里抛砖引玉先整体性的介绍一下WebRTC的源码目录结构,先整体上有个印象和框架在,后边也会逐步的进行分析。如下图,每一项已有简单的内容介绍:
下边这个是我自己在Windows下编译源码生成的VS2017的工程目录:
这块先不着急,简单了解下就行,后续会进阶分析。
这样,我们就对WebRTC有了一个整体的认识和了解,方便我们后续的学习之路,下一遍我们来一起研究下网络编程基础、TCP/IP详解。
WebRTC学习进阶之路系列总目录:https://blog.csdn.net/xiaomucgwlmx/article/details/103204274