文章导读:本篇文章给读者展示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. 《JavaScript ES6 函数式编程入门经典》--推荐指数⭐⭐⭐

    这本书比较基础认真看完再自己写点demo一个双休日就差不多, 总体来说看完还是有收获的,会激起一些你对函数编程的兴趣 主要目录如下: 第1章 函数式编程简介 11.1 什么是函数式编程?为何它重要 1 ...

  2. python dataframe筛选列表的值转为list【常用】

    网上方法参差不齐,无注释解释不好秒懂,没有自己想要的,故自己试验一番~ 1. 筛选列表中,当b列中为’1’时,所有c的值,然后转为list 2 .筛选列表中,当a列中为'one',b列为'1'时,所有 ...

  3. AUI前端框架总结

    AUI 是Apicloud 的手机端UI第三方,需要引入Apicloud和AUI中的css样式和js框架 **首先:手机项目必须配置config.xml文件 Apicloud官网有详解 ** 其次:程 ...

  4. hadoop搭建HA集群之后不能自动切换namenode

    在搭好HA集群之后,想测试一下集群的高可用性,于是先把active的namenode给停掉: hadoop-daemon.sh stop namenode 或者直接kill掉该节点namenode的对 ...

  5. 并查集路径减半优化 UnionFind PathHalving (C++)

    /* * UnionFind.h * 有两种实现方式,QuickFind和QuickUnion * QuickFind: * 查找O(1) * 合并O(n) * QuickUnion:(建议使用) * ...

  6. not under version control

    表示这个文件没有在SVN的控制之下 你在执行commit操作的时候,只有处于SVN控制之下的文件才能被commit,从update得到的文件是在SVN控制之下的(比如原来就存在的文本文件,你可以对其修 ...

  7. Chrome浏览器所有页面崩溃

    问题描述 Chrome浏览器所有页面崩溃,包括设置页面,"喔唷,崩溃啦!" 显示错误码:STATUS_INVALID_IMAGE_HASH Chrome所有插件报错,右下角一串弹框 ...

  8. Element-ui组件库Table表格导出Excel表格

    安装npm install --save xlsx file-saver 两个插件的详细地址在下面 https://github.com/SheetJS/js-xlsxhttps://github.c ...

  9. codeforces Codeforces Round #597 (Div. 2) Constanze's Machine 斐波拉契数列的应用

    #include<bits/stdc++.h> using namespace std; ]; ]; ; int main() { dp[] = ; scanf(); ); ; i< ...

  10. 矩阵快速幂+二分 poj3233

    #include <iostream> #include <cstdio> #include <string> #include <cstring> # ...