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 ...
随机推荐
- LaTeX技巧006:使用pdfLaTeX时,添加PDF文件属性的方法
PDF文件中含有标题.主题.作者.关键字等属性.这些属性,在Acrobat Reader或者Foxit Reader中可以通过”文件”菜单下的”属性”查看,在Acrobat Read中还可以使用Ctr ...
- STL标准库面试题(转)
一.vector的底层(存储)机制 二.vector的自增长机制 三.list的底层(存储)机制 四.什么情况下用vector,什么情况下用list 五.list自带排序函数的排序原理 六.deque ...
- Vuex项目实战store
首先简单了解一下什么是Vuex? Vuex是一个专为Vue.js应用程序开发的状态管理模式.采用集中式存储来管理应用所有组件的状态. 以下是对vuex的使用的简单介绍: 一.安装 npm i vuex ...
- requests-验证码登录
ModuleNotFoundError: No module named 'bs4': 解决方法:pip install beautifulsoup4 https://blog.csdn.net/wi ...
- 我的翻译--针对Outernet卫星信号的逆向工程
前言 Outernet[1]是一家旨在让访问国际互联网更加方便自由的公司,他们使用卫星来广播维基百科或者其他网站.目前,他们的广播主要使用三颗国际海事卫星[3]的L波段[2],使其广播覆盖全球,大多数 ...
- [USACO12DEC]First!
Description Luogu3065 Solution 首先,一个串要是最小的,别的串不能是它的前缀,且和它有相同前缀的串字典序都比他小. Trie树是显然要用的,难点在于如何判断能否最小.其实 ...
- Java 面向对象编程 抽象类 抽象方法 abstract
抽象类 通过abstract定义的方法是抽象方法,它只有定义,没有实现.抽象方法定义了子类必须实现的接口规范: 定义了抽象方法的class必须被定义为抽象类,从抽象类继承的子类必须实现抽象方法: 如果 ...
- 保存数据到文件的模块(json,pickle,shelve,configparser,xml)_python
一.各模块的主要功能区别 json模块:将数据对象从内存中完成序列化存储,但是不能对函数和类进行序列化,写入的格式是明文. (与其他大多语言交互的类型) pickle模块:将数据对象从内存中完成序列 ...
- EF的延迟加载LazyLoad
延迟加载只对 关联/导航 属性(Navigation Property)有用,普通属性没有这个东西. 延迟加载是一条一条的读取属性,调用一次,读取一次. 条件: context.Configurati ...
- DTW + python 矩阵操作 + debug
1. from here. diagonalReturn specified diagonals. diagflatCreate a 2-D array with the flattened inp ...