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里,由此可知,在call里管理通话双方的流数据,可以获取通话过程中的各种统计数据。同理,B也是如此。如果A再和C通信,那么A中会再次创建一个新call。与一端建立通信都会建立一个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/desktop_capture。存放桌面采集的相关代码,通过桌面采集的功能可以实现远程桌面共享。

    ⑧、module/pacing。存放码流监测以及传输平滑处理。每个音视频流的码率有高有低,发送的速率不能太高或者太低,需要做折中的处理,使得传输数据上更加的平滑。

    ⑨、module/remote_bitrate_estimator。存放远端码率评估代码。通信是双方相互兼容,本地发送的码率和远端能接收的码率要匹配才能达到较好的通信效果,例如远端能接收的码率为50k,本地不能发500k码率的数据,远程接收的速率没这么快,会导致通信的不流畅,于是在传输之前,数据发送端会先检测远端接收端的情况再发送。

    ⑩、module/rtp_rtcp。存放rtp、rtcp协议相关的代码,关于这两个协议在之前的文章中解释过了,这里不在赘述。

    ⑪、video_capture。存放视频采集相关的代码。

    ⑫、video_coding。存放视频编解码器相关的代码,如H264、VP8、VP9等。

    ⑬、video_processing。存放视频前处理、后处理的相关代码,如视频图像的增强,视频帧的处理,如果需要添加其他图像处理功能,可以在该目录中扩展。

  10、pc。这个目录存放了了PeerConnection的代码,即连接逻辑。上一节讲webrtc架构时在WebRTC C++ API 层提到过PeerConnection的概念,在这里再讲下,在通信前期首先要创建连接对象,即PeerConnection对象,然后通过往该连接对象加入流就可以实现音视频的通信,至于传输的细节都在PeerConnection内完成了。此外还可以通过该对象获取到传输的流信息,传输时各种统计数据。在第六章中,我们重点讲解PeerConnection应用,配合核心代码的编写,助你掌握webrtc。

   11、p2p。p2p就不再解释了,本目录下存放所有p2p连接相关的所有逻辑代码,比较重要的技术如STUN、STURN ,第三章重点讲解。

   12、rtc_base。存放基础代码目录,如线程管理操作,锁管理等跨平台适配代码。

   13、rtc_tool。这里存放音视频分析工具的相关代码。

   14、tool_webrtc。这里存放webrtc测试的相关工具代码,如网络模拟测试。

   15、system_wrappers。这里存放了与操作系统相关的代码,如CPU特性、原则操作等。

  16、stats。存放各种统计相关的代码,如丢包率统计,抖动时长等。

  17、sdk。存放了Android、IOS层相关的代码,如音视频采集、渲染等。方便跨平台开发。

  

  以上就是webrtc源码的整体目录结构,了解这些目录结构及其作用,可以为我们后续修改webrtc功能模块有非常大的帮助,同时,对webrtc也有了一个全局的认知。

  本节的到这里就结束了,简单的做下小结,本小节列举并陈述了webrtc源码结构, 虽然每个目录的功能不需要背下来,但需要了解。本篇内容大家可以作为查询手册来收藏,咱们学习到webrtc源码的时候会用到。

  最后,祝各位小伙伴学习愉快。

  

  附上本书指定交流微信公众号——“晨叔周刊”,一起讨论吧。

上一篇:1.3、WebRTC 架构

下一篇:1.5、Web服务器

posted on 2020-02-28 11:41  Rajan  阅读(2833)  评论(0编辑  收藏  举报
扫码和作者预约吧