webRTC架构说明

本文涉及的产品
数据传输服务 DTS,数据迁移 small 3个月
推荐场景:
MySQL数据库上云
简介: WebRTC系列

首先我们通过webRTC官网上的一张图了解一下webRTC的架构:
WebRTC架构图

网上也有很多资料说这张图在webRTC的官网上,但是很多童鞋根本就找不到。这是因为很多童鞋没有进行科学上网:
WebRTC架构说明英文文档:https://webrtc.github.io/webrtc-org/architecture/

对于WebRTC的架构说明,官方的英文文档已经说的很清楚了,所以本文可能更多的是充当这一个翻译者的角色。下面我们从上往下分别了解WebRTC的架构设计。

三层架构

首先我们从图中可以看出webRTC被划分成了三部分,分别是绿色部分、深紫色部分以及浅紫色部分。

其中最上层的带箭头的浅紫色部分是指开发者的应用层,就是指开发者基于webRTC技术规范所开发的应用程序。严格来说这并不属于WebRTC的架构内容。

其中深紫色的中间层Web API (Edited by W3C WG)部分表示的是WebRTC开放给应用层开发人员调用的API(主要是JavaScript API 供web端使用),
在这层中开发者无需关心复杂的底层技术,只需了解webRTC的大致流程原理,调其API即可利用WebRTC实现点对点的通讯功能。

其次绿色部分才是WebRTC的核心功能层,而这一层又被分为了四个子核心功能层。分别是C++API层、会话管理层、引擎层、驱动层。

Your web app层

也就是带箭头的浅紫色层Your web app # 1...。上面已经提到严格来说这并不属于WebRTC的架构内容,所以这里就不作介绍了。

Web API层

Web API层也就是深紫色部分Web API (Edited by W3C WG),表示的是WebRTC开放给应用层开发人员的API(主要是JavaScript API 供web端使用),
在这层中开发者无需关心复杂的底层技术,只需了解webRTC的大致流程原理,调其API即可利用webRTC实现点对点的通讯功能。

WebRTC C++ API层

绿色部分包裹的浅紫色WebRTC C++ API (PeerConnection)部分,这部分主要是一些C++的接口层,这一层提供了一些 C++ API,主要是供浏览器支持WebRTC规范而调用的API,又比如需要Android上实现webRTC功能就需要编写JNI函数调用这一层API。
这一层的主要作用就是把WebRTC的核心功能暴露出来,如设备管理,音视频流数据采集等,方便各个软件厂商集成到自家应用中,比如浏览器厂商等。

其中 PeerConnection是该层最核心的一个模块,即对等连接模块;该模块中实现了很多功能,如P2P穿墙打洞、通信链路的建立和优选、流数据传输、非音视频数据传输、传输质量报告和统计等等。

Session management层

绿色部分被Session management / Abstract signaling (Session)标注的一层就是会话管理层。
这一层提供了会话功能管理功能,可进行创建会话、管理会话、管理上下文环境等。而这一层又会涉及到各种协议,比如说信令服务器的SDP协议等,主要用于进行信令交互和管理 RTCPeerConnection的连接状态。

引擎层

这一层为WebRTC核心层中最重、最复杂的一层。而这一层又分为三个小模块,分别是:Voice Engine(音频引擎)、Video Engine(视频引擎)以及Transport(传输模块)。

第一个模块 Voice Engine(音频引擎), Voice Engine是一个包含了系列音频处理功能的框架,如音频采集、音频编解码、音频优化(包括降噪、回声消除等)等一系列的音频功能。

第二个模块Video Engine(视频引擎),Video Engine是一个包含了系列视频处理功能的框架,如视频采集、视频编解码、根据网络抖动动态修改视频传输质量、图像处理等。

第三个模块Transport(传输模块),在WebRTC中,数据传输除了音视频等流媒体数据之外,还可以传输文件、文本、图片等其他二进制数据,这些功能就是这个模块所提供的。

从图中我们可以看出每个引擎的下面又包含多个子引擎,下面我们再来讲解各个引擎下的子引擎功能。

iSAC / iLBC Codec

iSAC和iLBC是WebRTC内置的音频编码器。其中iSAC是针对VoIP(Voice over Internet Protocol,即基于IP的语音传输)和音频流在宽带和超宽带环境中进行音频传输的编解码器,
是WebRTC音频引擎的默认的编解码器,技术成熟,且被广泛应用在各种实时通信软件中;而iLBC则是VoIP在窄带环境中的语音编解码器,在网络丢包较为严重的情况下仍能保持较好通话质量。

NetEQ for voice

NetEQ是网络语音信号处理的组件,这个算法能自适应网络环境的变化,有效的处理因网络抖动而导致数据丢包所造成的音频质量问题,这一技术可谓是当年WebRTC的前身GIPS的看家本领。

Echo Canceler/Noise Reduction

Echo Canceler是处理回声消除模块,能有效的消除采集音频带来的回声影响,比如说在实时音视频通话的过程中,打开手机扬声器的话,
本来的需求是录制本人的声音实时发送给对方的,但是由于存在回声,也会把对方说话的声音也录制进去。目前笔者测试发现市场上的一些手机录音的时候
本身是自带了回音消除功能,而且Android也提供有相关的API,但是好像大多数情况下,这个API都没起作用,可能是由于厂商兼容性问题,甚至有可能是直接阉割掉这个功能了。
因此想要做到录音是全平台适配回声消除功能的话就可以使用WebRTC的这个功能。而iOS平台上的录音是带有回声消除功能的。

而Noise Reduction则是抑制噪音模块(也就是降噪),如有效的抑制多种噪音(如嘶嘶声,风扇噪音等)。

VP8 Codec

VP8是第八代的On2视频,能以更少的数据提供更高质量的视频,而且只需较小的处理能力即可播放视频,为致力于实现产品及服务差异化的网络电视、IPTV和视频会议公司提供理想的解决方案。

其数据压缩率和性能方面比市场上其他编解码器高,其功能特点非常适合实时通信,是WebRTC中默认的视频编解码器。

VP9是Google提供的开源的免费视频codec,是VP8的后续版本,初始开发时命名为下一代开源视频或者VP-NEXT。

VP9的开发始于2011年Q3,试图降低VP8的50%的码率而保持相同的质量,另外希望VP9比H.265( High Efficiency Video Coding)有更好的编码效率。

Video Jitter Buffer

Video Jitter Buffer——视频抖动缓冲器,实时视频通信难免会因为网络的原因导致视频的抖动或者视频数据的丢失,
视频抖动缓冲器依靠独特的算法,有效的解决这类情况对直播会议质量造成较大的影响。

Image enhancements

mage enhancements——图像质量增强模块,这个模块是用来做图像处理以提升视频画面质量的,如图像明暗度检测、颜色增强、降噪处理等。

SRTP

SRTP属于传输模块中的内容,在了解SRTP之前我们先来了解一下RTP。

RTP 是(Real Time Protocol)提供了具有实时特征的、端到端的数据传送服务协议。而我们通常所说的RTCP等则是对RTP的控制协议。

RTP不像http和ftp等可完整的下载整个影视文件,它是以固定的数据格式在网络上发送数据,如果RTP的头部几个字节表示什么,音频数据或者视频数据包含在RTP中那几个字节中等等。

在RTP中,并未考虑到数据传输的安全性,比如没有加密功能,所以不符合安全性要求较高的应用需求,因此为了解决此问题,SRTP应运而生。
SRTP(SecureReal-time Transport Protocol)是在RTP的基础上加入了安全机制的传输协议,SRTP为数据提供了加密、消息认证、完整性保证和重放保护等功能,最大程度保障了数据传输的安全性。
所以RTP与SRTP的关系大概就是http与https的关系。

Multiplexing

Multiple exing,通道复用,即多个流数据传输共用一个通道, 以此提高传输效率。

说实话,目前笔者也不懂这个是如何复用的,先搁置一下呗。。。

P2P STUN+TURN+ICE

前面已经说过WebRTC是一种基于P2P的通信技术。而STUN、TURN、ICE这些则是实现P2P的一些关键技术。

STUN、TURN、ICE又称为NAT穿透,在现实生活中不同局域网中的内外ip是无法直接通信的,比如说局域网A中192.168.2.1与局域网B中192.168.2.2是无法互相直接发送消息的,
那么如果要在两个不同的局域网中建立起可以直接通信的通道就得依靠STUN+TURN+ICE这些技术。

而STUN、TURN和ICE又是使用不同方案进行穿透的,这个不是三言两语可以说的清楚的,后面我们结合例子再详细了解一下。

驱动层

也就是浅蓝色虚线部分,这部分有Audio Capture/Render(音频的采集和渲染模块)、Video Capture(视频采集模块)和Network I/O(网络IO模块)组成。

而这些音视频的采集和渲染,网络IO的传输功能,我们都是直接调用各平台提供的相关API即可实现,至于底层的驱动是如何实现的,笔者也不清楚,也就不在这里误人子弟了。

总结

从WebRTC优秀的分层架构设计中,我们至少学习到优秀的架构设计大多都能做到分而治之。每一层都是一个小的功能点,我们要做的就是将每一层都做得足够优秀,然后再将最优的每一层通过各种组装而铸造一个伟大的项目。

WebRTC其实是一个很庞大的内容,如果能把每一个模块都做得足够优秀,优化得足够好,甚至都可以单独提取出来做一个专业的项目运营了。可想而知要想深入学习研究通透WebRTC需要花费多少的精力以及时间。

WebRTC最为一个建立在音视频基础之上的项目,不仅仅需要了解学习通讯相关的知识,还需要音视频的相关知识,而这些知识想要吃得通透都是需要大量的实战的,
如果要做到知其然也知其所以然,那么就需要童鞋们有强大的自控力以及持续学习的持久力呀。

参考资料

《搞定WebRTC音视频直播通信技术(核心技术精讲篇)》

关注我,一起进步,人生不止coding!!!

相关实践学习
RocketMQ一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
Sqoop 企业级大数据迁移方案实战
Sqoop是一个用于在Hadoop和关系数据库服务器之间传输数据的工具。它用于从关系数据库(如MySQL,Oracle)导入数据到Hadoop HDFS,并从Hadoop文件系统导出到关系数据库。 本课程主要讲解了Sqoop的设计思想及原理、部署安装及配置、详细具体的使用方法技巧与实操案例、企业级任务管理等。结合日常工作实践,培养解决实际问题的能力。本课程由黑马程序员提供。
目录
相关文章
|
29天前
|
Web App开发 编解码 安全
视频会议技术 入门探究:WebRTC、Qt与FFmpeg在视频编解码中的应用
视频会议技术 入门探究:WebRTC、Qt与FFmpeg在视频编解码中的应用
165 4
|
4月前
|
Web App开发 前端开发
ZLMediaKit解决webrtc前端replaceTrack断流问题
ZLMediaKit解决webrtc前端replaceTrack断流问题
|
Web App开发 编解码 算法
WebRTC简介
WebRTC (Web Real-Time Communications) 是一项实时通讯技术,它允许网络应用或者站点,在不借助中间媒介的情况下,建立浏览器之间点对点(Peer-to-Peer)的连接,实现视频流和(或)音频流或者其他任意数据的传输。WebRTC包含的这些标准使用户在无需安装任何插件或者第三方的软件的情况下,创建点对点(Peer-to-Peer)的数据分享和电话会议成为可能。
594 0
WebRTC简介
|
24天前
|
Web App开发 编解码 API
WebRTC简介及使用
WebRTC简介及使用
68 0
|
9月前
|
Web App开发 安全 API
WebRTC 技术在实时通信中的应用与实现
WebRTC(Web Real-Time Communication)是一种支持实时音视频通信的开放式标准。它允许在 Web 浏览器之间进行点对点的音视频通信,而无需安装插件或其他额外的软件。WebRTC 在实时通信领域有着广泛的应用,包括视频通话、音频通话、实时消息等。下面将介绍 WebRTC 技术在实时通信中的应用与实现。
208 0
|
8月前
|
Web App开发 API 开发者
WebRTC技术及其在实时通信中的应用
WebRTC技术及其在实时通信中的应用
123 0
|
10月前
|
Web App开发 安全 JavaScript
WebRTC:实时音视频通信的开发与应用
WebRTC(Web实时通信)是一种开放标准的实时通信技术,使开发者能够在Web浏览器中实现高质量的音视频通信。本文将介绍WebRTC的基本原理和用法,以及如何使用WebRTC构建实时音视频通信应用程序。
302 0
|
11月前
|
Web App开发 编解码 安全
WebRTC的应用
WebRTC的应用
|
Web App开发 人工智能 移动开发
什么是WebRTC
什么是WebRTC
242 0
|
Web App开发 编解码 网络协议
WebRTC 简介
最近一段时间的主要工作内容是开发一个远程控制手机的功能,其中使用到的一个关键技术就是WebRTC,在此准备分享一下我对这个技术的理解。