二、第二节 WebRTC源码目录结构

今天我们来介绍一些WebRTC的目录结构,大家都知道WebRTC的代码量是非常大的,所以它里面的目录也特别多,那么我们下面介绍的这些目录是大家每个人都应该要掌握的,在我们后面的学习中很有可能就修改WebRTC的代码,你要修改WebRtc的代码,你要知道它每个目录的功能及作用是什么,当你想改那块逻辑的时候你可以直接定位到哪个目录下相应的文件进行修改了,那么如果你不清楚这个目录结构的话,就非常困难,这代码量那么大,你要一个个去查找,那就非常的费劲。

接下来就一个个来看这些 目录 到底起什么作用。

WebRTC源码目录结构
目录 功能
api WebRTC接口层,浏览器都是通过该接口调用WebRTC
call 数据流的 管理层,Call代表同一个端点的所有数据的流入流出
video 与视频相关的逻辑
audio 与音频相关的逻辑
common_audio 音频算法相关
common_video 视频算法相关
media 与多媒体相关的逻辑处理,如编解码的逻辑处理
logging 日志相关
module 最重要的目录,子模块 

 

 

 

 

 

 

 

 

WebRTC源码目录结构(二)
目录 功能
pc Peer Connection,连接相关的逻辑层
p2p 端对端相关的代码,syun,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就代表的是一个连接,如我与对端的一个连接,在整个上层有这个连接的概念。那在这个连接下面就有很多东西了,比如Strem流 ,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里面,这里主要是整个webrtc的策略是在这个tool_webrtc里面。

在接下来是system_wrappers,这个大家比较好理解了,就是根据具体的平台相关的,你的CPU、原子操作,具体的锁等等,那是放在system_wrappers里面。window形成 一个文件,linux形成一个文件。

在接下来的是stats是各种统计数据相关的类,比如我的丢包率,抖动时常等功能,这是各种统计信息。

在下面 是sdk主要是存放Android和IOS的代码层,包括音频的采集,音频的渲染,都是放在SDK这个目录里面。

以上就是WebRTC最外层的目录结构。

——————————————————————————————————————————————

下面我们在来看一下module这个目录下,都有哪些目录,在module这个目录下有很多子目录,我们来认识一下

第一个是audio_coding,刚才我们在说到audio目录的时候,那是和编解码逻辑相关的,会用编解码,这里的audio_coding它是编解码器,都是放在audio_coding这个目录下。

在下面的 是audio_device它是和设备相关的,它做了一个区分,安卓和IOS放在sdk下面了,它相应的一些代码移到sdk里面了,在以前的webrtc版本 ,所有的设备都是 放在audio_device里面 ,包括我们的windows和MAC下的以及Linux下的,都是在audio_device这个目录下。

在下来是audio_mixer,就是混音相关的,混音就好比开会时多人实时互动,比如四个人同时在说话,就要给它混在一起,这样在传输的时候就比较方便,这个减少了音频流,所以这个混音相关的就放在audio_mixer里面。这个我们后续还会做详细的介绍 。

在下面是audio_processing就是音频的前处理后处理,音频的前处理后处理就好比回音消除、降噪、增益等,都是放在audio_processing里面。这个目录里面又分了很多子目录,在后面你就 大体的知道这个相关的在这个目录下。以及在这个目录下再找子目录。

下一个是bitrate_controller,这个是码流控制的,比如说控制这个码流,视频的码流是500k还是1M。这个码流的控制。如果想知道相关的码流他是怎么控制的 ,那么可以到这里去看。

下面是congestion_controller,就是流量控制,当我能检测到网络流量比较高的时候,我们要做一些流量控制,防止这个网络包将带宽打死,具体怎么控制就是在这里做的相关的逻辑。所以如果我要 了解流量控制相关的,就到这个目录下面去找。

在接下来是桌面采集相关的,desktop_capture,这是比较好理解的。

在接下来

pacing的作用是码率的侦测和平滑处理,我首先要检测到音频视频的码率是怎样的,做到之后我们要做到一个平滑的处理,我们不能让他一下子就发送出去,应该对他做一下平滑,比如有时候是10k有时候是500k,我们让他平均一下。

再下来是remote_bitrate_estimator的作用是远程码率评估,我远端能接收的带宽是多少,一个是我本地的带宽,一个是远端的带宽,不光我能发多少还有对方能收多少,所以要有一个远端的码率的评估,这是放在remote_bitrate_estimator目录下。

在下来是rtc_rtcp协议相关的代码,放在这个目录下。

在接下来是video_capture我捕获视频的相关的代码,放在video_capture里面。

在接下来是视频的编码,如H264,VP 8,VP 9,等,这个编码器都是放在video_coding里面。

接下来是video_processing,就是视频的前处理和后处理,如视频帧的增强,检测,如果我们增加人脸识别可以放到video_processing这个目录下。

以上就是WebRTC整个目录的介绍,了解了目录之后,对于我们了解WEBRTC代码、修改它的逻辑、去增加一些功能,是有非常大的帮助的,所以大家要对这些目录多看多了解,让他熟记在你的脑子里面,这对我们今后的 学习会有 非常大的帮助

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章