欢迎光临
我们一直在努力

webrtc源码解析概要介绍

一,整体架构设计

WebRTC 采用分层模块化 + 流水线 + 多线程设计,核心分为 5 大层级,从上到下:

  • API 层:对外暴露接口(C++/Java/ObjC),供业务层调用,屏蔽底层复杂逻辑
  • 媒体引擎层:音视频采集、渲染、编解码、预处理
  • 网络传输层:网络收发、协议封装、拥塞控制、QoS、ICE/NAT 穿透
  • 会话管理层:SDP 协商、信令交互、PeerConnection 会话管理
  • 基础公共层:线程、内存、日志、定时器、工具库、跨平台适配
  • 核心设计特点

    • 多线程模型:采集、编码、网络、渲染、业务逻辑线程隔离,避免阻塞
    • 数据流水线:音视频帧以Frame对象流转,逐级处理(采集→预处理→编码→打包→发送)
    • 异步回调:大量使用观察者模式、信号槽,事件驱动
    • 跨平台抽象:平台相关逻辑抽离为rtc_base + 各平台适配层

    二、源码目录主要结构

    2.1 顶层核心目录

    webrtc/
    ├── api/ # 【对外API入口】二次开发用 包含音频、视频neteq,网络控制等对外接口
    ├── audio/ # 音频全链路:采集、AEC、AGC、NS、混音、编码
    ├── video/ # 视频全链路:采集、滤镜、缩放、编码、渲染
    ├── media/ # 媒体会话管理,音视频轨道统一调度
    ├── pc/ # 【PeerConnection 核心】会话、SDP、ICE、Track、RTP 会话管理
    ├── modules/ # 核心功能组件集合,所有音视频采集、编解码、前后处理、网络协议、拥塞控├── 制、抖动缓冲等业务功能模块都集中在此,是整个媒体引擎的核心实现层。
    ├── rtc_base/ # 【基础库】线程、锁、网络、内存、定时器、字符串、跨平台等工具
    ├── rtc_tools # 独立工具集 / 调试工具目录,不属于核心业务库,而是给开发者 / 测试人员 ├── 用的命令行工具、音视频分析、网络诊断、数据转储与回放工具
    ├── call/ # 数据流调度中心,承上启下:对接上层 PeerConnection、下层媒体引擎 + 网├── 络传输,统一管理一路完整通话链路的流、码率、拥塞控制、RTP/RTCP 收发
    ├── p2p/ # P2P 核心:ICE、STUN、TURN、NAT 穿透、候选地址
    ├── common_audio/ # 提供底层音频数据处理、数学运算、采样转换、波形操作、滤波等功能
    ├── common_video # 视频相关工具库,如YUV数据转化,视频帧数据处理,h264数据处理等功能
    ├── sdk/ # 各平台 SDK 封装(Android/iOS/Windows 上层封装)
    ├── system_wrappers/ # 系统接口封装:摄像头、麦克风、文件、时钟
    ├── third_party/ # 第三方依赖:libvpx、opus、ffmpeg、ssl、protobuf 等
    └── tools/ # 编译脚本、测试工具、demo

    2.2 主要目录核心功能介绍

    2.2.1 API (主要对模块进行二次开发)

       webrtc提供的对外二次开发库,包含有7,

    1.  audio- 音频相关的有各种音频编码格式(如g711、ilbc/ops等)、音频帧,音频混音器、回音控制,回音探测和回声消除等对外接口库;

    2. video-视频内置视频编解码、流解析、帧编码、图像编码、视频帧和视频流编解码等对外接口库;

    3. transport- 数据传输相关的,  音频接口、视频接口、流媒体接口、码率设置、GCC、网络控制等对外接口;

    4. crypto- 加解密接口, 帧的加密解密库,加解密库和参数设置库;

    5.neteq – 针对neteq的对外库,以及neteq控制对外库和控制工厂库;

    6.rtp-  rtp头、rtp包信息、rtp参数等库

    7. 其它各种对外库, 如下图,

    2.2.2  PC(直接可以进行音视频会话开发)

    如果想快速实现视频会话功能,可以直接使用该模块,实现音频会话,视频会话。 

    WebRTC 业务逻辑核心中枢,连接信令、媒体、网络。PeerConnection核心。

    融合了 音频rtp接收器、音频轨道控制,声道控制管理以及数据的组成和传输,同样也支持视频RTP接收器,rtp轨道控制,以及视频的sdp和会话描述控制, 另外也包含sctp和srtp等相关协议模块。

    2.2.3  rtc_base

    该模块融合了很多基础公共功能,如内存控制、数学计算,字符串管理,锁控制、系统文件线程的等的封装、任务管理、base64,sigslot、时间戳、crc32,回调等基础模块。

      大家可以学习Google对于基础公共模块的封装,好的可以借鉴。

    2.2.4 modules

      webrtc最核心的组件库,涉及整个音视频流程相关底层的模块,只做 “采集→处理→编解码→RTP→拥塞控制” 相关的底层功能,该目录包含有

    1,音频

    audio_coding :

        包括基础音频格式的编解码,还包括音频接收解码和编码发生的核心模块ACM2,音频网络控制适配模块,以及neteq控制模块

    audio_device:  音频设备管理(麦克风和扬声器)

    audio_mixer:音频混音

    audio_processing:音频处理流程,具体可以参考我的文章webrtc 的audio process介绍(新版本webrtc)_webrtc-audio-processing-CSDN博客

    2,网络

      拥塞控制: 主要为GCC,具体可以参考我的文章:webrtc 拥塞控制GCC 和PCC -CSDN博客

       包平滑控制: 主要用于控制包的发生时序,参考我的文章:webrtc pacing 平滑发包模块-CSDN博客

      对端比特率评估: 可以参考我的文章:webrtc QOS-RemoteBitrateEstimator接收端带宽估计(1)-CSDN博客  和

    webrtc QOS-RemoteBitrateEstimator接收端带宽估计-四个实例(2)-CSDN博客

      rtp_rtcp :  RTP和RTCP包针对相关音视频 格式的管理,RTP/RTCP控制器的管理,也包括相关fec,nack等拥塞控制的管理。

    3.视频

      video_capture: 视频获取,视频设备的控制和获取视频流的管理;

    video_coding:视频主流格式(VP8/9,AVC/H264)的管理,视频帧的管理,以及视频缓冲区管理等相关功能;

    video_processing: 视频降噪处理模块。

    2.2.5 media

    该模块主要融合音频和视频, 构建了音频引擎和视频引擎,统一封装音视频能力、解耦上层会话与底层硬件 / 算法模块,对外提供标准媒体接口,内部调度采集、处理、编解码、渲染全链路。

    具体可以参考我的文章:webrtc voice engine 介绍(新版webrtc)-CSDN博客 和WebRtcVideoEngine模块介绍(新版webrtc)-CSDN博客

    三、webrt通话流程介绍

    阶段 1:初始化 & 创建核心对象

  • 业务层调用 PeerConnectionFactory::Create() 创建工厂
  • 通过工厂创建 PeerConnection,传入配置(ICE 服务器、编码参数)
  • 本地创建 MediaStream、AudioTrack/VideoTrack(音视频轨道)
  • 将 Track 添加到 PeerConnection
  • 对应源码入口 pc/peer_connection_factory.cc → pc/peer_connection.cc

    阶段 2:本地媒体采集(生产者)

  • 音频 / 视频设备启动采集(AudioDevice / VideoCapture)
  • 原始帧送入预处理模块(降噪、回声、缩放)
  • 预处理后帧送入编码器(VP8/H264/Opus)
  • 编码后裸码流交给 RTP 模块 打包为 RTP 包
  • 链路 设备采集 → 预处理 → 编码 → RTP 打包

    阶段 3:SDP 协商(信令交互,上层信令仅转发,WebRTC 不内置信令)

  • 发起端调用 CreateOffer() 生成本地 SDP
  • 本地调用 SetLocalDescription() 保存本地会话描述
  • 业务层通过自定义信令,把 Offer 发给远端
  • 远端 SetRemoteDescription(),调用 CreateAnswer() 生成应答
  • 应答回传给发起端,双方完成 SDP 协商
  • 核心文件 pc/peer_connection.cc 中 CreateOffer / CreateAnswer / SetLocalDescription

    阶段 4:ICE 候选收集 & 链路连通(NAT 穿透)

  • PeerConnection 启动 ICE 候选收集(本机内网 IP、端口、STUN 公网 IP、TURN 中继)
  • 候选地址通过信令交换给对端
  • ICE 算法遍历候选地址对,发送探测包,筛选最优链路
  • 链路连通后,UDP 通道就绪
  • 核心文件 p2p/ice/、p2p/base/port.cc

    阶段 5:RTP 发送 & RTCP 控流

  • RTP 数据包通过 ICE 建立的 UDP 链路发送
  • 接收端解析 RTP,重组帧、送入抖动缓冲
  • 解码 → 后处理 → 渲染播放
  • 双方周期性收发 RTCP 包:统计丢包、延迟、抖动,触发拥塞控制(GCC),动态调整发送码率
  • 阶段 6:通话结束

    关闭 Track、停止采集、销毁 PeerConnection、释放线程与资源。

    四、二次开发重点改造点

    • 自定义音视频采集 / 渲染(替换系统摄像头、录屏、外部流)
    • 音频算法调优:AEC/NS/AGC 参数修改
    • 拥塞控制改造:替换 GCC、自研控流算法
    • 扩展协议:自定义 RTP 扩展头、私有信令
    • 弱网优化:抖动缓冲、帧纠错、前向纠错 FEC、ARQ 重传
    • 软硬编切换、第三方编解码器接入
    赞(0)
    未经允许不得转载:171主机测评 » webrtc源码解析概要介绍
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址