文章导读:本篇文章给读者展示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. phpstorm对比代码

    方法一 首先在phpstorm中左侧的资源管理器中,按住键盘上的CTRL键选中两个文件,然后鼠标右键,点击菜单中的"Compare Tow Files",就可以了,如下图 方法二 ...

  2. java多线程CountDownLatch

    先上一个介绍:https://blog.csdn.net/shihuacai/article/details/8856370 用视频https://www.bilibili.com/video/av8 ...

  3. php中多图上传采用数组差集处理(array_diff,array_map)

    //删除旧有的图片 //新增数组 $arr2=array(); //原有数组 $old_pics = ReportPic::find()->where(['report_id' => $i ...

  4. 理解Login函数

    _LoginPartial.cshtml文件 其中 <li>@Html.ActionLink("Log in", "Login", "Ac ...

  5. AcWing 532. 货币系统

    #include <cstring> #include <iostream> #include <algorithm> using namespace std; ; ...

  6. TC基础与自动化

    前言 互联网产品的测试常常要覆盖在不同网络下的表现,例如丢包,带宽受限,时延及抖动等网络较差的情况,为了测试场景的网络情况可定义及复现,就需要有个工具对弱网进行模拟.业界一些通用的弱网模拟工具,如NE ...

  7. 编码 - 坑 - win10 下采用 utf-8, 导致 gitbash 中文字体异常, 待解决

    blog01 概述 使用 git 中, 遇到一个坑 背景 最近遇到一个 编码转换 问题 本来也 一知半解 要是有人能给我讲讲就好了 环境 win10 1903 git 2.20.1 1. 问题 概述 ...

  8. 解决windows10 OBS Studioobsstudio显示器捕获黑屏

    前提设置显卡,下载OBS studio 64bit别下载32bit了 如果电脑desktop右键无法显示NAVIDIA  控制面板则需要win+R  输入 msconfig选取服务,勾选所有NAIVI ...

  9. I/O多路复用select/poll/epoll

    前言 早期操作系统通常将进程中可创建的线程数限制在一个较低的阈值,大约几百个.因此, 操作系统会提供一些高效的方法来实现多路IO,例如Unix的select和poll.现代操作系统中,线程数已经得到了 ...

  10. c++ char转换成string

    第一种:利用赋值号直接赋值 ; string b = a; /* 错误.因为string是一个指针,存储的值是所指向的地址,而char型存储的是内容,所以不可以直接用赋值号赋值 */ const ch ...