WebRTC源码目录结构

WebRTC主目录:

可以将WebRTC目录归纳为几个大类:
接口层、业务处理层、音视频处理层、基础支持层

  • 接口层:
    api/:WebRTC对外提供的所有接口都存放在这个目录下,如果要为WebRTC增加新的接口,也需要将编写的接口文件放在该目录下;
  • 业务处理层:
    pc/:PeerConnection目录,PeerConnection可以做很多事情,包括:媒体协商、收集Candidate、传输音视频数据等;
    call/:Call目录里存放的是与“呼叫”相关的文件,表示的是用户之间建立的会话,call这个词是从程控电话交换系统衍生而来的,实际上与互联网中的Session是同一概念。一个WebRTC终端可以同时发起多个“呼叫”,即创建多个call实例,而在每个call实例中,又可以包含多个发送/接收流;
    media/:media目录用于存放与媒体引擎相关的代码,媒体引擎包括音频引擎和视频引擎,主要用于音视频的控制;
  • 音视频处理层:
    audio/:用于存放与音频流相关的代码;
    video/:用于存放与视频流相关的代码;
    common_audio/:用于存放一些音频的基本算法,包括环形队列、傅里叶算法、滤波器等;
    common_videosdk/:存放与视频相关的算法及工具,如 libyuv、sps/pps分析器、I420缓冲器等;
  • 基础支撑层:
    这一层都是一些基础的模块:
    sdk/:存放移动端特定的代码,如:Android端的视频采集、iOS端的视频采集等;
    p2p/:存放端到端网络连接相关的代码,如:DTLS、STUN协议的实现等;
    stats/:存放各种数据统计相关的类,如:发送了多少包、丢失了多少包、带宽大小等;
    rtc_base/:存放一些基础代码,如:线程、事件、socket等;
    rtc_tools/:存放一些与服务质量相关的工具;
    tools_webrtc/:存放一些与WebRTC性能相关的工具;
    system_wrapper/:存放与操作系统相关的代码,如:CPU特性、原子操作、读写锁、时钟等;
  • modules:
    modules是WebRTC中特别重要的一个目录,包括音视频的采集、处理、各种编解码器等模块都存放在这个目录下。该目录存放的模块都是比较独立的,可以单独的抽取出来,例如:回音消除、降噪等模块。
    modules目录下的子目录也分为几个大类,包括:
    (1)音频处理类:
    包括以下几个目录:
    audio_coding/:存放音频编解码相关的代码;
    audio_device/:存放PC端音频采集和音频播放相关的代码(注意WebRTC移动端的音频设备采集和播放的代码不在其中,而是在一级目录sdk/目录下);
    audio_mixer/:存放混音相关的代码;
    audio_processing/:存放音频前后处理相关的代码,例如回音消除、降噪的代码都在该目录下;
    (2)视频处理类:
    video_capture/:存放视频采集相关的代码;
    video_coding/:存放视频编解码相关的代码;
    video_processing/:存放视频前后处理相关的代码;
    desktop_capture/:存放PC端桌面采集相关的代码;
    (WebRTC中没有实现PC端的视频渲染,该功能只能由使用者自行实现)
    (3)网络及流控类:
    rtp_rtcp/:存放的是RTP/RTCP代码;
    bitrate_controller/:存放的是Transport-CC算法中码率控制的相关代码;
    congestion_controller/:存放的是用于判定是否有拥塞发生的相关代码;
    remote_bitrate_estimator/:存放是的是Goog-REMB评估算法的相关代码(该算法实际已被淘汰,只是因为兼容的问题所以一直保留);
    pacing/:存放的是用于平滑发送数据,防止网络的数据出现堆积的代码。

你可能感兴趣的:(WebRTC,webrtc,网络)