WebRTC源码研究(2)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源码目录结构

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。

  • 第三个是videovideo就是与视频相关的逻辑,视频的处理,视频的编解码等等,一个总的入口点。

  • 第四个是audio, audio就是与音频的相关逻辑和处理。

  • 下面的两个common_audiocommin_video,它们的作用就是与算法相关的,那么拆出来就是与音频的算法相关就在common_audio里面,视频的算法放在common_video里面。如果你想解决算法相关的,那么就去这两个目录里面去找。

  • 那么再接下来就是media,media也很好理解,其实就是和多媒体相关的处理,像编解码的逻辑,什么时候进行编码什么时候进行解码,那么这些就是在media这个目录下,所以你要解决编解码以及解码后要做哪些处理,你需要从media这个目录进行查找。

  • 再接下来是logging,就是日志相关了,一般改的很少,比较单一。

  • 这里最重要的是modulemodule这个模块就特别大,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里面,这里主

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值