文章导读:本篇文章给读者展示WebRTC的源码目录结构,为读者构建全方位的知识体系,如果你有兴趣下载webrtc的源码来编译运行,本节内容可以作为你了解源码的简要说明书,webrtc源码非常庞大的,讲清其源码需要单独 另起篇幅,在后续的书籍或文章中,我考虑单独介绍。本篇文章的定位是给读者简单webrtc的源码目录结构以及对应目录存放的功能,所以阅读方式推荐:了解。

  webrtc是基于C++开发,所以源码目录中都放置C++代码文件,源码目录如下。 

  1、api。该目录 存放了webrtc接口层的代码,即核心层中的WebRTC C++ API,浏览器厂商或者其他软件开发者可以在此调用或者调整webrtc API。

  2、call。数据流管理逻辑。该目录存放的代码主要处理的是和流数据相关的业务,这里的流数据主要指流媒体,在这里解释下流媒体。流媒体(streaming media)是指将一连串的媒体数据压缩后,在网络中传输,且不要求全部数据传输完才能使用,只需传输部分即可,如看视频,我们只需要缓冲一段就可以播放了,此过程使得数据包得以像流水一样发送。但并不是什么数据类型都可以用这种方式传输,比如程序文件,文档文件,其他二进制文件等,这类文件必须要求所有数据传输完才能打开。call代表的是同一个端的流数据的流入流出,怎么来理解呢?比如 A 和 B 进行音视频通话,在A中会生成一个call,本次通话所有音视频流都在这个call里。同理,B也是如此。如果A再和C通信,那么A中会再次创建一个新call。

   3、video。存放视频处理相关的业务。如视频编解码,视频数据优化处理等。本目录就是视频处理逻辑代码的总入口。

   4、audio。如同video,只是这里处理的是音频数据。

  5、common_video。视频算法相关的代码,在视频处理中, 算法是一个大块内容,所以webrtc单独把算法的业务单独分出来。

  6、common_audio。如同common_video,这里处理的是音频数据。

  7、media。多媒体处理相关的逻辑。如处理音频视频时什么时候使用编解码等。注意,真正的编解码代码没有放在这里。

  8、logging。日志相关的模块目录。

  9、module。这个目录就非常重要了,里面管理各种子模块,下面我们具体分析其目录。

    ①、module/audio_coding。存放了音频编解码器相关的代码,如AAC、iSAC、iLBC等音频编解码器。

    ②、module/audio_device。存放了音频采集和播放相关代码。

    ③、module/audio_mixer。存放混音相关的代码,比如音视频通信时,同时有多个人讲话,为了方便传输和管理,会把多路声音混在一起。

    ④、module/audio_processing。存放音频前处理和后处理的相关代码,人音频的降噪、回音消除等。

    ⑤、module/bitrate_controller。存放码率控制的相关代码,在音频中码率就是比特率,表示的是音频从模拟信号转成数字信号之后,单位时间内二进制的数量,码率越高表示声音越衔接流畅,当然数据量也越大。

    ⑥、module/congestion_controller。存放流量控制的代码,在音视频通信时,为了保护带宽,需要做流量控制。

    ⑦、module/congestion_controller。desktop_capture。桌面采集的相关代码,通过桌面采集的功能可以实现远程桌面共享。

    ⑧、module/pacing。视频码流监测以及传输平滑处理。每个音视频的码率有高有低,发送的速率不能太高或者太低,需要做折中的处理,使得传输数据上更加的平滑。

    ⑨、module/remote_bitrate_estimator。即远端码率评估,通信是双方相互兼容,本地发送的码率和远端能接收的码率要匹配才能达到较好的通信,本目录下的代码就是评估通信对方的码率情况。

    ⑩、module/rtp_rtcp。存放rtp、rtcp协议相关的代码,关于这两个协议在之前的文章中解释过了,这里不在赘述。

    ⑪、video_capture。存放视频采集相关的代码。

    ⑫、video_coding。视频编解码器相关的代码,如H264、VP8、VP9等。

    ⑬、video_processing。视频前处理后处理的相关代码,如视频图像的增强,视频帧的处理,如果需要添加图像处理的功能,可以在该目录中完成。

  10、pc。这个目录存放了了PeerConnection,即连接相关的逻辑。上一节讲webrtc架构时在WebRTC C++ API 层提到过PeerConnection的概念,在这里再讲下,在通信前期需要创建连接对象,该对象就是PeerConnection对象,通过往连接对象加入流就可以音视频的通信,此外还可以通过该对象获取被传输的流信息,传输时的各种统计数据。在第六章中,我们重点讲解PeerConnection使用,配合核心代码的编写,助你掌握webrtc。

   11、p2p。p2p就不再解释了,本目录下存放所有p2p连接的所有逻辑代码,比较重要的技术如STUN、STURN 都是在P2P技术里,第三章重点讲解。

   12、rtc_base。基础代码目录,存放了如线程管理操作,锁管理等跨平台适配代码。

   13、rtc_tool。这里存放音视频分析工具的相关代码。

  14、tool_webrtc。这里存放webrtc测试的相关工具代码,如网络模拟测试。

  15、system_wrappers。本目录存放了与操作系统相关的代码,如CPU特性、原则操作等。

  16、stats。存放各种统计相关的代码,如丢包率统计,抖动时长等。

  17、sdk。存放了Android、IOS层相关的代码,如音视频采集、渲染等。方便跨平台开发。

  

  以上就是webrtc源码的整体目录结构,了解这些目录结构的作用,可以为我们后续增加或者修改webrtc功能模块有非常大的帮助。

  本节的到这里就结束了,简单的做下小结,本小节列举并陈述了webrtc源码结构, 每个目录的功能不需要背下来,但是需要了解。本篇的内容大家可以作为查询手册来阅读,后续咱们讲到webrtc源码的时候会用到。

  最后,祝各位小伙伴学习愉快。

  

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

上一篇:1.3、WebRTC 架构

下一篇:1.5、Web服务器原理

1.4、WebRTC源码的更多相关文章

  1. WebRTC源码分析四:视频模块结构

    转自:http://blog.csdn.net/neustar1/article/details/19492113 本文在上篇的基础上介绍WebRTC视频部分的模块结构,以进一步了解其实现框架,只有了 ...

  2. webRTC源码下载 Windows Mac(iOS) Linux(Android)全

    webRTC源码下载地址:https://pan.baidu.com/s/18CjClvAuz3B9oF33ngbJIw  提取码:wl1e  Windows版:visual studio 2017工 ...

  3. WebRTC 源码分析(三):安卓视频硬编码

    数据怎么送进编码器? 怎么从编码器取数据? 如何做流控? 在开始之前,我们先了解一下 MediaCodec 的基本知识. MediaCodec 基础 Developer 官网 上的描述已经很清楚了,下 ...

  4. 编译最新版webrtc源码和编译好的整个项目10多个G【分享】

    编译最新版webrtc源码和编译好的整个项目10多个G[分享] 参考https://webrtc.org/native-code/development/编译最新版webrtc源码: Git clon ...

  5. WebRtc 源码下载

    项目需要用到WebRtc,记录下基本下载的步骤: 1.下载depot_tools,利用depot_tools 下载WebRtc源码 git clone https://chromium.googles ...

  6. WebRTC源码开发(一)MacOS下源码下载、编译及Demo运行

    工作需要测试网络传输算法,逐学习WebRTC源码 工作环境 Mac OS 10.14 Xcode 10.2.1 源码下载 从google(需要[你懂的]) 首先[你懂的] 打开终端,输入curl ww ...

  7. WEBRTC源码片段分析(1)音频缓冲拷贝

    源码位置webrtc/webrtc/modules/audio_device/ios/audio_device_ios.cc函数OSStatus AudioDeviceIPhone::RecordPr ...

  8. WebRTC学习之 Intel® Collaboration Suite for WebRTC源码流程解读

    年后回来,因为新项目的需求,开始了解WebRTC相关的知识.目前接触的是Intel® Collaboration Suite for WebRTC.刚开始看SDK发现很多概念是我目前不知道的,于是恶补 ...

  9. WebRTC源码架构浅析(转)

    Google 在2010年花了6千8百万美元收购了大名鼎鼎的 Global IP Sound/Solutions (GIPS) 公司, 得到了它的 VoIP 相关技术的专利和软件. 第二年, Goog ...

随机推荐

  1. 使用python 写一个 股票涨跌提醒功能

    1: 安装python: https://www.cnblogs.com/liyafei/articles/11550979.html 将python.exe加入 全局path 2: 安装库:(不需要 ...

  2. [Agc081F/At2699] Flip and Rectangles - 单调栈,结论

    [Agc081F/At2699] 给出一个拥有 \(H\times W\) 个格子的棋盘,每个格子的颜色为黑色或白色. Snuke 可以进行任意次下列操作: 选择棋盘中的一行或一列,将这一行或一列的颜 ...

  3. Ora-00906:missing left parenthesis

    问题描述 Ora-00906:missing left parenthesis 问题原因 varchar和varchar2  必须指定长度,不然会报错

  4. Controller 和 Action -1

    https://www.cnblogs.com/willick/p/3331521.html MVC 的每个请求都会提交到 Controller 处理.Controller 包含了对请求的逻辑处理,能 ...

  5. console.log对象全部展开

    挖掘Chrome Console的小秘密 SP_lyu关注 2018.09.15 18:25:32字数 1,697阅读 917 控制台应该是大多数前端开发人员日常开发调试离不开的神器.然而控制台仍有很 ...

  6. 使用Vue-MUI轮播图失效问题解决案例(在Vue的update中执行)

    我使用的是mui+vue,社区关于轮播图失效的问题也有几个.我这边遇到的一个情况是我把所有的东西都写到plusReady事件中会导致轮播图搞死都不动,按照其他问答解决了vue生命周期等等的问题.提出来 ...

  7. python3练习100题——006

    继续做题-经过py3测试 原题链接:http://www.runoob.com/python/python-exercise-example6.html 题目:斐波那契数列. 我的代码: def fi ...

  8. matplotlib 做图通过弹出窗口展示 spyder

    tools =>preferences=>Ipython console=>Graphics Graphics backend 中Backend 由Inline改为 Automati ...

  9. 从零开始教你做高保真原型图+UI 设计规范

    编者按:<从零开始设计App>系列到这篇已经是第三期了,上期是低保真原型图,这期@Sophia的玲珑阁 聊聊如何从零开始制作高保真原型图和UI 设计规范. 往期回顾: <设计师怎样从 ...

  10. Auto.js的初次使用——在VSCode中使用

    最近双十一大家都在集猫币,盖楼,但是每天刷任务太浪费时间了.被推荐了一个脚本可以自动刷任务,很是好奇.于是想要了解一下Auto.js 一.vscode启动Auto.js 1.vscode里安装auto ...