码迷,mamicode.com
首页 > Web开发 > 详细

1.3、WebRTC架构

时间:2020-02-27 19:11:23      阅读:78      评论:0      收藏:0      [点我收藏+]

标签:应用开发   管理功能   tps   指定   音视频   语音   相互   视频通信   信号   

文章导读:本文的讲解的是webrtc系统架构,我要求你要Get到这些知识:第一、系统性的学习webrtc架构分层;第二、对每个层有一个清晰的认知。学习完本节内容可以为我们后面讲解核心API起到至关重要的作用。本节可能会涉及一些专业名词,阅读起来可能有些晦涩,所以这里推荐的阅读方式推荐:了解名词,理解架构。

  在之前的文章中,已经简单的提到过webrtc的架构相关的内容,本节的内容将重点分析和讲解webrtc的架构。

  如下图1.3.1,这张图就是来自其官网的webrtc系统分层架构图,本书的讲解也将从这张图开始。

  技术图片

 

 图 1.3.1 (webrtc分层架构图)

图中分为两大部分,分别是深紫色、绿色。另外,浅紫色为Your web app,表示的是用户基于webrtc技术规范自主开发的应用程序,不属于webrtc架构;再往下一层是深紫色的Web API层,表示的是WebRTC开放给开发人员的JavaScript API ,这一层属于应用层,开发者无需关心复杂底层技术,只需知其原理,调其API即可,这也是本书的重点。

  在往下就是一大块绿色的区域,这里就是为webrtc的核心层, 在核心层中分为四个子核心层,下面分别对这些子核心层 一一讲解。

  首先,来看第一个子核心层——WebRTC C++ API,即C++ 接口层。这一层提供了一些 C++ API,数量不多,较大程度降低了开发者的开发难度。这一层的主要作用就是把webrtc的核心功能暴露出来,如设备管理,音视频流数据采集等。方便各个软件厂商集成到自家应用中,比如浏览器厂商、其他应用软件厂商。其中 PeerConnection是该层最核心的一个模块,即对等连接模块;该连接模块中,实现了很多功能,如P2P 穿洞、通信链路的建立和优选、流数据传输、非音视频数据传输、传输质量报告和统计等。

  其次,再来看第二个子核心层—— Session management,即会话管理层。在通信应用中,会话管理是一个非常重要的功能,每个会话中都有自己的上下文环境,这一层主要提供了会话功能管理功能,用于创建会话、管理会话、管理上下文环境。

  再次,看第三个子核心层——引擎层。这一层为webrtc核心层中最重最复杂的一层,分为三大模块,分别是Voice Engine(音频引擎)、Video Engine(视频引擎)、Transport(传输模块)。 这三大模块分别处理音频、视频、传输。从这一分模块的设计可以看出webrtc的设计哲学,音频视频以及传输分而治之,却又相互联系。

  第一个模块Voice Engine, Voice Engine是一个包含了一些列的音频多媒体处理的框架,如音频的采集、优化处理、编码等。分别有这几个重要的功能:①、编解码器,webrtc内置的编码器有iSAC、iLBC。iSAC是针对VoIP(Voice over Internet Protocol,基于IP的语音传输)和音频流的宽带和超宽带音频编解码器,是WebRTC音频引擎的默认的编解码器;iLBC则是VoIP音频流的窄带语音编解码器。②、NetEQ是针对音频进行语音信号处理元件,其算法能自适应网络环境的变化,有效的处理因网络抖动而导致数据丢包所造成的音频质量问题,这一技术可谓是GIPS的看家本领,在webrtc中占据着至关重要的位置。③、Echo Canceler/Noise Reduction,Echo Canceler是处理回声消除模块,能有效的消除采集音频时带来的回声影响;Noise Reduction是抑制噪音模块,如去除背景噪音(嘶嘶声,风扇噪音等)。

  第二个模块Video Engine,Video Engine是一个包含了一系列的视频多媒体处理的框架,如视频采集,优化,编码等。这里分别讨论这些重要的功能:①、编解码器,VP8是专为解决网络传输延时设计的视频编解码器,其应用场景非常适合实时通信,同时也是webrtc默认的编解码器。②、Video Jitter Buffer——视频抖动缓冲器,实时视频通信难免会因为网络的原因导致视频的抖动或者视频数据的丢失,视频抖动缓冲器依靠独特的能有效的解决这类问题对视频质量带来的影响。③、Image enhancements——图像质量增强模块,本模是用来做图像处理以提升视频画面质量,如图像明暗度检测、颜色增强、降噪处理等。

  第三个模块Transport,即数据传输模块,webrtc中,数据传输出了音视频流数据之外,如文件、文本、图片等其他二进制数据均可以传输。本模块包含了的重要组成部分有:①、传输协议,在webrtc中,数据传输时底层基于UDP(关于UDP和TCP,请读者自行查阅资料),上层基于RTP/SRTP。RTP 协议(Real Time Protocol)提供具有实时特征的、端到端的数据传送服务协议,适用于传输声音,图像数据。考虑到数据安全传输,于是在RTP的基础上重新定义了数据安全传输协议SRTP(SecureReal-time Transport Protocol),为数据提供了提供加密、消息认证、完整性保证和重放保护。然而,RTP/SRTP协议本身并不能保证传输质量,传输质量由下层的网络质量决定,即使网络质量能保证,RTP/SRTP也不能保证数据包的按顺序到达,于是引入了RTCP/SRTCP,即RTP控制协议(RTP Control Protocol),该协议用于数据传输时的服务质量的监视与反馈、媒体间的同步,以及多播组中成员的标识;例如数据传输端通过RTCP数据检测此刻网络传输的效率不理想,丢包率较高,则传输端将会自动调整收发数据包的速率,以此来尽可能的提高传输的质量。

  到此,webrtc核心层的内容就讲完了,最后看下最底层和驱动相关的模块——驱动层,如上图1.3.1的虚线蓝框部分,有三个部分组成:①、Audio Capture/Render,音频的采集和渲染模块。②、Video Capture,视频采集模块,在webrtc中,视频的渲染在应用层。③、Network I/O,网络IO模块,所有网络传输的数据都在这里“进进出出”。

   本文的内容到此就讲完了,我们来做下小结。webrtc的架构分为两大部分, 第一部分为 Web API ,属于上层应用层,为应用开发者提供JavaScript接口。第二部分为webrtc核心层,核心层又分为了四个子核心层,分别是C++ 接口层、会话管理层、 引擎层、驱动层。在核心层中,C++接口层主要提供给浏览器厂商,浏览器厂商基于此层的C++接口来适配出对应的JavaScript API ,共同为上层应用层的开发者提供便利;会话管理层我们不太关注,真正用到的都对我们透明了;引擎层是webrtc的心脏,重要程度不言而喻;驱动层和底层硬件打交道。

  祝学习愉快。

  最后,附上本书指定交流微信公众号——“晨叔周刊”,回复:“webtrc”,即可进入本书讨论的圆桌。小伙伴有任何问题,进入圆桌讨论吧。

上一篇:1.2、初识WebRTC

下一篇:1.4、WebRTC源码

 

1.3、WebRTC架构

标签:应用开发   管理功能   tps   指定   音视频   语音   相互   视频通信   信号   

原文地址:https://www.cnblogs.com/rajan/p/12370625.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!