1.4、WebRTC源码
文章导读:本篇文章给读者展示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.5、Web服务器原理
1.4、WebRTC源码的更多相关文章
- WebRTC源码分析四:视频模块结构
转自:http://blog.csdn.net/neustar1/article/details/19492113 本文在上篇的基础上介绍WebRTC视频部分的模块结构,以进一步了解其实现框架,只有了 ...
- webRTC源码下载 Windows Mac(iOS) Linux(Android)全
webRTC源码下载地址:https://pan.baidu.com/s/18CjClvAuz3B9oF33ngbJIw 提取码:wl1e Windows版:visual studio 2017工 ...
- WebRTC 源码分析(三):安卓视频硬编码
数据怎么送进编码器? 怎么从编码器取数据? 如何做流控? 在开始之前,我们先了解一下 MediaCodec 的基本知识. MediaCodec 基础 Developer 官网 上的描述已经很清楚了,下 ...
- 编译最新版webrtc源码和编译好的整个项目10多个G【分享】
编译最新版webrtc源码和编译好的整个项目10多个G[分享] 参考https://webrtc.org/native-code/development/编译最新版webrtc源码: Git clon ...
- WebRtc 源码下载
项目需要用到WebRtc,记录下基本下载的步骤: 1.下载depot_tools,利用depot_tools 下载WebRtc源码 git clone https://chromium.googles ...
- WebRTC源码开发(一)MacOS下源码下载、编译及Demo运行
工作需要测试网络传输算法,逐学习WebRTC源码 工作环境 Mac OS 10.14 Xcode 10.2.1 源码下载 从google(需要[你懂的]) 首先[你懂的] 打开终端,输入curl ww ...
- WEBRTC源码片段分析(1)音频缓冲拷贝
源码位置webrtc/webrtc/modules/audio_device/ios/audio_device_ios.cc函数OSStatus AudioDeviceIPhone::RecordPr ...
- WebRTC学习之 Intel® Collaboration Suite for WebRTC源码流程解读
年后回来,因为新项目的需求,开始了解WebRTC相关的知识.目前接触的是Intel® Collaboration Suite for WebRTC.刚开始看SDK发现很多概念是我目前不知道的,于是恶补 ...
- WebRTC源码架构浅析(转)
Google 在2010年花了6千8百万美元收购了大名鼎鼎的 Global IP Sound/Solutions (GIPS) 公司, 得到了它的 VoIP 相关技术的专利和软件. 第二年, Goog ...
随机推荐
- 洛谷P5534 【XR-3】等差数列 耻辱!!!
题目描述 小 X 给了你一个等差数列的前两项以及项数,请你求出这个等差数列各项之和. 等差数列:对于一个 nnn 项数列 aaa,如果满足对于任意 i∈[1,n)i \in [1,n)i∈[1,n), ...
- Educational Codeforces Round 76 (Rated for Div. 2)F - Make Them Similar
题意: 给你n个数字(<230),求出一个数字使得所有数字^这个数字之后,二进制状态下的1的个数相同. 解析: 因为最大数字二进制数有30位,所以分为前15位和后15位,分别枚举0-1<& ...
- 通过cmd修改注册表(设置cmd窗口的大小)
通过cmd修改注册表(设置cmd窗口的大小) 设置cmd的窗口 mode: modem设置系统设备,主要是lpt1, com1/2, con:启动时设置窗口大小: cmd /k "mode ...
- Python-Django学习笔记(三)-Model模型的编写以及Oracle数据库的配置
Django使用的 MTV 设计模式(Models.Templates.Views) 因此本节将围绕这三部分并按照这个顺序来创建第一个页面 模型层models.py 模型是数据唯一而且准确的信息来源. ...
- Python三次握手和四次挥手
先要了解什么是传输层 博客中网络协议基础编有详细介绍 https://www.cnblogs.com/toby-yu/p/12357598.html TCP三次握手和四次挥手 1.三次握手 首先Cli ...
- PP: Multilevel wavelet decomposition network for interpretable time series analysis
Problem: the important frequency information is lack of effective modelling. ?? what is frequency in ...
- oracle三个网络配置文件(listener.ora、tnsname.ora、sqlnet.ora)的作用
oracle网络配置 三个配置文件 listener.ora.sqlnet.ora.tnsnames.ora ,都是放在$ORACLE_HOME\network\admin目录下. 1. sqlne ...
- SpringBoot学习- 2、使用IDEA创建项目
SpringBoot学习足迹 上一节使用sts创建项目,感觉只是基于eclipse做了一些界面定制,还是改使用IDEA开发,为了跟上时代,将使用IDEA最新版本,安装各种最新插件. 1.下载IDEA ...
- OpenCV: “vector”: 未声明的标识符和Vector不是模板
漏写using namespace std: 会出现此错误“vector”: 未声明的标识符或者是将“vector”写成‘Vector’会出现Vector不是模板的错误:改正即可
- loadrunner11破解失败,已解决“ license security violation.Operation is not allowed ”问题
参考链接https://blog.csdn.net/yongrong/article/details/7891738,亲测可以解决问题 在64位win7系统中安装LR11时,采用普通的方法无法授权.最 ...