webrtc学习笔记四:Webrtc源码目录结构

文章目录

  • 主目录
  • Modules子目录下的目录结构:

webrtc的代码量非常巨大,所以目录也特别多;但是webrtc是分层的,必须掌握一些重要的目录,在后续开发中会遇到需要修改webrtc代码的需求情况,所以必须掌握主要的目录的功能,这样在修改代码的时候,就能够快速的定位到相应的目录下,找到相应的文件进行修改;如果不清楚目录结构,就只能一个个的去查找,这就非常的困难和费劲。
webrtc学习笔记四:Webrtc源码目录结构_第1张图片
webrtc学习笔记四:Webrtc源码目录结构_第2张图片

主目录

1.api目录:就是webrtc的接口层。比如浏览器、我们自己写的应用程序大多数时候都是直接从webrtc提供的这些api进行调用。如果我们想增加接口或者调整接口,就需要到api目录下去找相应的文件。
2.call目录:数据流的管理层,Call代表同一个端点的所有数据的流入流出,那当有多个端进行流入流出的时候就需要有多个Call。主要是对音频流、视频流的管理,当与对端建立连接之后,同一个端的这些流的管理就是通过call进行管理的。
3.video目录:与视频相关的逻辑。当视频要进行编解码处理等,video目录是一个总的入口点,video的相关逻辑都是在这里的。
4.audio目录:与音频相关的逻辑。
5.common_audio目录:common_video目录:都是与算法相关的。
6.media目录:与多媒体相关的逻辑处理,如编解码的逻辑处理。比如什么时候进行编码,什么时候进行解码这些都是在media目录下控制的。
7.logging目录:日志相关。
8.module目录:最终要的目录-----子模块。这个模块非常大,里面有很多子模块,每个子模块都非常重要。
9.pc目录:Peer Connection,连接相关的逻辑层。Peer Connection代表的是与对端的一个连接,在上层有一个连接的概念,在连接下面就有很多的东西了,比如连接的时候有stream流,流里面又有轨track,一个流里面可以有很多轨,包括音频轨、视频轨、桌面轨等等,轨道的概念就可以理解为两个平行的线,是不相交叉,音频、视频都是单独的,这样一个概念。
通过Peer Connection拿到Stream流,流里能拿到每一个多媒体,也就是音频视频,当然还可以拿到所有的统计信息,比如媒体流的统计信息、传输的统计信息等等。
Peer Connection是一个非常重要的目录,相当于上层接口的一个统一的接口层。
10.p2p目录:端到端相关代码,stun/turn。端到端要进行传输的时候需要看p2p是不是能打通,p2p有很多类型,链接能不能打通,相应的侦测工具都是在这个p2p目录下。相应的协议有STUN协议TURN协议。
11.rtc_base目录:基础代码,如线程、锁相关的统一接口代码。由于webrtc是夸平台的,所以线程、锁这些会有所不同,特别是在Windows和Linux上使用的函数差别特别大,那怎么办呢?如果上层根据每个平台去做不同的处理的话,就需要些很多代码了。但是分层之后,对于上层逻辑来说,只需要统一调用webrtc定义的这个规范,比如线程规范、锁规范,就可以了,具体在rtc_base这个目录下再区分是Windows层的还是Linux层的还是mac层的等等。
12.rtc_tool目录:里面是一些工具,音视频分析相关的工具代码。比如对H264进行分析的话有I帧、B帧、P帧、NALL头等都可以找到相应的分析工具。(音视频相关的专门的测试工具目录)
13.tool_webrtc目录:webrtc测试相关的工具代码,各种单元测试如网络模拟器,网络的测试,音频的测试,视频的测试都是在这个目录下。(整个webrtc的测试工具目录)
14.system_wrappers目录:与具体操作系统相关的代码。如CPU特性,原子操作,锁等。各个平台分别形成一个文件,比如Windows的形成一个文件,Linux的形成一个文件等等。
15.stats目录:存放各种数据统计相关的类。比如,丢包率、抖动时长等等。
16.sdk目录:主要存放Android和iOS层代码。如音频视频的采集,渲染等。

Modules子目录下的目录结构:

Modules目录下又很多子目录,而且都比较重要。

webrtc学习笔记四:Webrtc源码目录结构_第3张图片
webrtc学习笔记四:Webrtc源码目录结构_第4张图片
1.audio_coding目录:音频编解码器相关代码。在上面的media目录也说到了编解码,media是编解码逻辑相关的,就是什么时候用编解码。这里的audio_coding目录下是编解码器,有opus编解码器,AAC编解码器等等,都是放在这个audio_coding目录下的。
2.audio_device目录:音频采集与音频播放相关的代码。在老版本的webrtc里,所有的设备都放在audio_devices这个目录里,但是心的webrtc把Android和iOS的设备相关代码都放在了sdk目录下,单独摘到了sdk下面了。但是其他的平台比如Windows的,mac的,linux的都是在audio_devices目录下。
3.audio_mixer目录:混音相关的代码。什么是混音呢?就是说同时又多人实时互动,好几个人同时在说话,就需要把声音混在一起,这样在传输的时候就比较方便,减少了音频流。
4.audio_processing目录:音频前后处理的相关代码。对音频的前处理,后处理;比如回音消除,降噪,增益等等,都是在这个目录中,但是这个目录中又有很多的子目录。
5.bitrate_controller目录:码率控制的相关代码。控制码流是500K,1M,还是2M,这个码流的控制就是在这个目录下。想改变码流,想看码流相关的控制,就进入这个目录下即可。
6.congestion_controller目录:流量控相关代码。当检测到网络流量比较高的时候,需要做一些网络流量控制,防止网络包把带宽打死,具体怎么控制就是在这里设置的,想要看流控相关的代码就在这个目录中查看。
7.desktop_capture目录:桌面采集相关。
8.pacing目录:码率探测及平滑处理相关的代码。首先需要检测到音频视频的码率是多少,检测到后做一个平滑的处理,就是不是让数据一下发送出去,需要做平滑处理,比如有时候是10K,有时候是500K,给做一个平均,不能一会儿高一会儿低,而是给做一个平滑处理。
9.remote_bitrate_estimator目录:远端码率估算相关代码。评估远端能接收的带宽是多少,不是我本地的发送的带宽,是远程接收端的估算带宽。不仅仅需要知道发送端单位时间能发送多少,还需要知道对方端单位时间能收多少,所以需要一个远端码率的评估。评估的代码就在这个目录下。
10.rtp_rtcp目录:rtp/rtcp协议相关代码。
11.video_capture目录:视频采集相关的代码。捕获视频相关的代码。
12.video_coding目录:视频编解码器相关的代码。视频的编码器VP8/VP9等等,编码器都是放在这里的。
13.video_processing目录:视频前处理、后处理相关的代码。视频帧的增强,检测,还有如果增加人脸识别就可以放在这个目录下。

以上就是webrtc源码的大体的目录结构,了解了目录结构之后,在后续阅读webrtc源代码的时候,修改源码逻辑,去增加一些功能的时候,是有非常大的帮助的,需要熟记这些的目录机构。

你可能感兴趣的:(音视频开发)