文章目录
- WebRTC源码研究(2)webrtc源码目录结构
-
- 1. WebRTC源码下载
- 2. WebRTC源码目录结构
-
- 2.1 WebRTC源码目录概要
- 2.2 WebRTC源码目录功能介绍
-
- 2.2.1 WebRTC源码根目录
-
- 2.2.1.1 api 目录
- 2.2.1.2 call 目录
- 2.2.1.3 video 目录
- 2.2.1.4 audio 目录
- 2.2.1.5 common_audio 目录
- 2.2.1.6 common_video 目录
- 2.2.1.7 media 目录
- 2.2.1.8 logging 目录
- 2.2.1.9 modules 目录
- 2.2.1.10 pc 目录
- 2.2.1.11 p2p 目录
- 2.2.1.12 rtc_base 目录
- 2.2.1.13 rtc_tools 目录
- 2.2.1.14 tools_webrtc 目录
- 2.2.1.15 system_wrappers 目录
- 2.2.1.16 system_wrappers 目录
- 2.2.1.17 stats 目录
- 2.2.1.18 sdk 目录
- 2.2.1.19 base 目录
- 2.2.1.20 build 目录
- 2.2.1.21 build_overrides 目录
- 2.2.1.22 buildtools 目录
- 2.2.1.23 crypto 目录
- 2.2.1.24 data 目录
- 2.2.1.25 examples 目录
- 2.2.1.26 ios 目录
- 2.2.1.27 media 目录
- 2.2.1.28 out 目录
- 2.2.1.29 resources 目录
- 2.2.1.30 style-guide 目录
- 2.2.1.31 test 目录
- 2.2.1.32 testing 目录
- 2.2.1.33 third_party 目录
- 2.2.1.34 tools 目录
- 2.2.2 WebRTC Modules模块子目录
- 3. WebRTC编译安装
WebRTC源码研究(2)webrtc源码目录结构
上一篇博客,“WebRTC架构”中主要粗略的讲解了WebRTC的主要模块,能做什么事情。我们知道WebRTC 是谷歌花费6000万美金收购了之后2010年开源的代码,在国内基本上是没有这么豪气牛逼的公司的,所以要要学习先进技术还是要看国外的文档,开源社区。
WebRTC 是一个音视频通信的百宝箱,给音视频处理和即时通讯提供了成熟的解决方案。关键是这个方案的源码是开源的,你可以深入研究这些源码,学习里面的解决疑难问题的算法,应用在你的项目中。 WebRTC是一个非常优秀的多媒体框架,具有跨平台的特性。
WebRTC是一项在浏览器内部进行实时视频和音频通信的技术,是谷歌2010年以6820万美元收购收购Global IT Solutions公司而获得一项技术。网址是:http://code.google.com/p/webrtc/WebRTC,WebRTC使用了iLBC iSAC,G711和G722语音协议以及VP8视频协议。实现了一种基于网页的视频会议,开发者可以通过浏览器提供简单的javascript就可以达到实时通讯(RTC)能力。开发人员也可以访问 http://sites.google.com/site/webrtc 页面获取WebRTC的源代码、规格说明和工具等。
1. WebRTC源码下载
WebRTC的源码是非常庞大的,目前的源码足足有10G了,如果没有好的网络,是很难下载的,这里我提供一份我保存在百度云的源码,有需要的点击这里下载:WebRTC 源码下载:
链接:https://pan.baidu.com/s/1BIJcRSzCDm0JkpLNvJEZAA 密码:0l8u
2. WebRTC源码目录结构
2.1 WebRTC源码目录概要
由于WebRTC是一个非常庞大,复杂的音视频即时通讯技术的开源库,这里面的逻辑也是非常复杂的,如果不清楚目录结构,每个目录主要是做什么的,如果想查询一点东西是否非常吃力的。因此我们有必要来好好研究一下目录结构。
- 主体目录大致如下:
目录 | 功能 |
---|---|
api | WebRTC接口层,浏览器都是通过该接口调用WebRTC |
call | 数据流的 管理层,Call代表同一个端点的所有数据的流入流出 |
video | 与视频相关的逻辑 |
audio | 与音频相关的逻辑 |
common_audio | 音频算法相关 |
common_video | 视频算法相关 |
media | 与多媒体相关的逻辑处理,如编解码的逻辑处理 |
logging | 日志相关 |
module | 最重要的目录,子模块 |
pc | Peer Connection,连接相关的逻辑层 |
p2p | 端对端相关的代码,stun,turn |
rtc_base | 基础代码 ,如线程、锁相关的统一接口代码 |
rtc_tool | 音视频分析相关的工具代码 |
tool_webrtc | WebRTC测试相关的工具,如网络模拟器 |
system_wrappers | 与具体操作系统相关的代码。如CPU特性,原子操作等 |
stats | 存放各种数据统计相关的类 |
sdk | 存放Android和IOS层代码。如视频的采集,渲染等 |
接下来对上面的目录逐个简要说明一下,具体的还是要去看源码:
-
首先是
api
这个 目录,api
这个顾名思义大家都能一下子猜出来,就是WebRTC的接口层,像浏览器也好,像我们自己写的应用程序也好,我们大多数情况下要调用的这些api
是直接从WebRTC通过的这些API调用。但是如果我没想增加接口,或者是调整这个接口就要到api
这个目录找相应的文件。 -
第二个是
call
这个目录,call这个目录可能大家比较难以理解,其实也不是很困难,它主要就是对数据流的管理,音频流、视频流当我这一端进行连接之后,同一个端的这些流的管理就是通过call进行管理,所以呢,就建立了call这样一个目录,它代表的就是同一个端的流入和流出。但是如果我与多个端进行沟通,就有多个call。 -
第三个是
video
,video
就是与视频相关的逻辑,视频的处理,视频的编解码等等,一个总的入口点。 -
第四个是
audio
,audio
就是与音频的相关逻辑和处理。 -
下面的两个
common_audio
和commin_video
,它们的作用就是与算法相关的,那么拆出来就是与音频的算法相关就在common_audio
里面,视频的算法放在common_video
里面。如果你想解决算法相关的,那么就去这两个目录里面去找。 -
那么再接下来就是
media
,media
也很好理解,其实就是和多媒体相关的处理,像编解码的逻辑,什么时候进行编码什么时候进行解码,那么这些就是在media这个目录下,所以你要解决编解码以及解码后要做哪些处理,你需要从media这个目录进行查找。 -
再接下来是
logging
,就是日志相关了,一般改的很少,比较单一。 -
这里最重要的是
module
,module
这个模块就特别大,module
里面有很多子模块,每个子模块都非常重要 ,我会给大家做详细的介绍。我们首先只需要知道module这个目录特别重要就好了。 -
再接下来就是
pc
,pc的含义就是Peer Connection
,在此之前已经给大家介绍了,Peer Connection就代表的是一个连接,如我与对端的一个连接,在整个上层有这个连接的概念。那在这个连接下面就有很多东西了,比如Stream
流 ,Track
轨,一个流里面可以包含很多轨,包括音频轨和视频轨已经桌面轨等等,那么轨道的概念大家应该也有所了解了,两个平行的线就是两个轨道,它们永远是不相交的,就是这样一个概念,音频与视频永远不会交叉的,它们都是单独存储的。那么通过Peer Connection你能拿到流,能拿到每一个多媒体,也就是音频、视频,你还可以拿到媒体流的统计信息,传输的统计信息等等,那么Peer Connection就是非常重要的一个目录。是上层相当于统一的一个接口层。 -
再下面是
p2p
,端对端进行传输的时候要看p2p是不是能打通,p2p有很多类型 ,后面会介绍到。你是哪种类型,这种类型能不能打通,相应的侦测工具等都是放在p2p这个目录下,相应的stun协议、turn协议等也是放在p2p这个目录下的。 -
在下来就是
rtc_base
,那么这个base大家也能一目了然的了解,一些基础的东西,比如 我们用到的锁用到的线程 ,这些实际在,因为他是跨平台的,在不同的平台下 ,尤其是window和Linux它使用的函数差别特别大。那么怎么办,写的时候对于我的上层的逻辑的话根据平台去做处理, 它统一去做一层目录。 -
再下面是
rtc_tool
,rtc_tool
包含一些工具,主要是音频视频的分析工具,比如我多H264进行分析,有这个i帧、P帧、B帧包括一些更细一些的NL头都可以再rtc_tool找到相应的工具。 -
下面还有个工具叫做
tool_webrtc
,它就是测试相关的工具,一些单元测试,以及各种的网络测试,还有音频、视频的测试,都是在这个tool_webrtc里面,这里主