WebRTC 源码结构与学习路线图文档时间2026-03本文梳理 WebRTC 开源项目的整体架构、核心目录职责、模块依赖关系并给出以WHEP 拉流为主线的学习路线图及完整源码学习路径便于新人入门与系统深入。目录一、WebRTC 整体架构四层二、源码目录速查三、学习路线图以 WHEP 拉流为主线四、完整源码学习路线横向扩展 纵向深挖五、模块依赖关系三层视图六、源码阅读与调试建议总结与延伸阅读一、WebRTC 整体架构四层WebRTC 的 C 源码可大致分为四层自上而下依赖关系清晰基础支持层音视频处理层业务会话层接口层API - PeerConnectionInterface 等pc / call / mediaaudio / video / modulesrtc_base / system_wrappers / third_party层级目录/范围核心职责接口层 (API)api/对外 C 接口如PeerConnectionInterface供浏览器或上层应用调用JS 的RTCPeerConnection等最终调用到此层业务/会话层pc/、call/、media/媒体协商、ICE 候选收集、数据流收发与管理音视频处理层audio/、video/、modules/编解码、前后处理回声消除、降噪、码率控制等核心算法基础支持层rtc_base/、system_wrappers/、third_party/跨平台线程、网络、时钟、锁及对 OS/第三方库的封装二、源码目录速查目录核心职责api/对外 C 接口层定义PeerConnectionInterface、MediaStreamInterface等上层调用入口pc/PeerConnection 实现JSEP 会话协商、RtpTransceiver、SDP 处理等核心业务逻辑call/数据流管理单端点音视频流的发送与接收协调音视频引擎与网络传输media/媒体引擎接口连接上层业务与底层编解码/处理模块编解码调度audio/音频收发链路音频流管理、混音、音频设备接口等video/视频收发链路视频流管理、编解码器接口、渲染接口等modules/功能子模块集合编解码器、音频处理(AP)、拥塞控制等p2p/P2P 网络传输STUN/TURN/ICE网络候选收集与连接建立rtc_base/跨平台基础库线程、锁、Socket、事件循环等system_wrappers/操作系统适配CPU 特性、时钟、原子操作等common_audio/通用音频算法环形队列、滤波器、FFT 等common_video/通用视频工具libyuv 封装、I420 缓冲、SPS/PPS 解析等sdk/移动端 SDKAndroid (Java/JNI)、iOS (Obj-C) 采集与渲染封装logging/日志系统统一日志接口与分级stats/统计信息码率、丢包率、抖动等通话质量指标test/单元测试tools_webrtc/网络模拟、码流分析等工具third_party/第三方依赖BoringSSL、libvpx、OpenH264、libyuv 等build/编译配置GN、Ninja 构建脚本examples/示例如peerconnection_client三、学习路线图以 WHEP 拉流为主线协议说明WHEPWebRTC-HTTP Egress Protocol为拉流协议WHIPWebRTC-HTTP Ingestion Protocol为推流协议。若目标是「使用 WHEP 实现拉流」则 C 程序作为WHEP 客户端接收端从服务端拉取并播放流。3.1 阶段 0前置知识约 12 周内容说明WebRTC 概念RTCPeerConnection、ICE、STUN/TURN、SDP 的作用网络基础TCP/UDP、NAT、HTTPC 与构建C11/14、多线程、网络编程、CMakeWebRTC 使用 GN Ninja3.2 阶段 1WebRTC C 入门约 24 周步骤内容环境搭建安装 depot_toolsfetchgclient sync拉取源码GN Ninja 编译生成peerconnection_client等跑通 Demo运行peerconnection_client理解接收端流程创建 PeerConnection、处理 SDP/ICE、接收远端流并渲染掌握 APIPeerConnectionFactory、PeerConnection、CreateOffer/Answer、OnIceCandidate、OnTrack 等3.3 阶段 2深入接收端源码约 48 周重点内容核心目录pc/、call/、media/、audio/、video/、modules/、p2p/、rtc_base/关键流程SDPCreateOffer/Answer → SetLocal/RemoteDescriptionICE 与 P2PTransportChannelOnTrack 触发后数据从 call/ 到 video/ 的路径调试在 OnTrack 等关键回调断点观察调用栈与变量3.4 阶段 3掌握 WHEP/WHIP 协议约 12 周内容说明协议文档阅读 IETF 草案理解 HTTP 接口、SDP Offer/Answer 交换、认证WHEP 客户端职责发 HTTP POST、带 SDP Offer处理 201 Created 与 SDP Answer提取 ICE 信息并完成 WebRTC 连接3.5 阶段 4整合实现 WHEP 拉流约 48 周步骤内容服务端用 Node.js/Go 等实现简易 WHEP 服务接收请求、返回 SDP AnswerC 客户端构造 SDP Offer → HTTP POST 获取 Answer → SetRemoteDescription、AddIceCandidate → OnTrack 中解码并渲染/保存扩展音频播放、音量控制、stats 统计等3.6 阶段 5进阶持续深入modules/拥塞控制与码率控制、端到端延迟与卡顿优化、SFU 架构等。四、完整源码学习路线横向扩展 纵向深挖在掌握 WHEP 拉流主干后可沿「横向扩展」与「纵向深挖」两条线系统学完 WebRTC 源码。4.1 横向扩展完整终端能力步骤目标核心目录与要点Step 1 音频接收音频解码、播放、音量控制audio/、modules/audio_device、audio_processing、common_audioAudioReceiveStream、设备与混音、AEC/NS/AGC 调用Step 2 DataChannel可靠/非可靠数据通道pc/、modules/rtp_rtcp、third_party/usrsctpDTLS/SCTP、CreateDataChannel → RtpDataChannelStep 3 网络传输ICE/DTLS/SRTP 整条链路p2p/、modules/rtp_rtcp、rtc_base/P2PTransportChannel、STUN/TURN、DTLS 与 SRTPStep 4 日志与统计排查与性能分析logging/、stats/、rtc_tool/、test/RTC_LOG、stats 采集、chrome://webrtc-internals、rtc_event_log横向扩展的实践任务可选Step 1在现有拉流程序上增加音频播放并能通过 API 控制音量或静音。Step 2在拉流程序中增加一个简单的 DataChannel用于收发文本消息。Step 3打印并分析一条 RTP 包的完整路径从网络接口到解码器观察协议头与解密过程。Step 4在程序中定期打印关键 stats如码率、丢包率并用 chrome://webrtc-internals 或 rtc_event_log 分析一次通话质量。4.2 纵向深挖音视频处理链路视频链路采集 → 处理 → 编码 → 网络 → 解码 → 渲染环节目录/模块要点采集video_capture/、sdk/平台采集、VideoCaptureImpl、Android/iOS 封装处理video_processing/前处理、缩放、I420 等编码video_coding/VideoEncoder、VP8/VP9/H.264、码率与关键帧网络发送modules/pacing/、modules/rtp_rtcp/PacedSender、RTPSenderVideo、FEC/NACK网络接收接收端链路RtpVideoStreamReceiver、NACK/RR、VideoReceiveStream解码与渲染video_coding/、renderVideoDecoder、VideoRender音频链路采集 → 处理 → 编码 → 网络 → 解码 → 播放环节目录/模块要点采集audio_device/设备打开、参数、回调处理audio_processing/AEC、NS、AGC、VAD编解码modules/audio_coding/Opus、AAC、码率控制播放audio/AudioDeviceModule、PCM 送声卡五、模块依赖关系三层视图5.1 宏观分层依赖应用层 (Your App) → 依赖 Web API (JS) / Native API (C) Web API 层 (JS / Native) → 依赖 WebRTC C API WebRTC C 核心层 → 依赖 音频引擎、视频引擎、传输模块、基础库 基础与平台适配层 → 依赖 操作系统 API、第三方库依赖方向应用层 → Web API 层 → WebRTC C 核心层 → 基础与平台适配层。5.2 源码目录模块依赖api/ ← 最上层对外 C API pc/ ← PeerConnection 实现依赖 api/ call/ ← 会话与媒体流管理依赖 pc/ media/ ← 媒体引擎接口依赖 call/ ├─ audio/ └─ video/ modules/ ← 编解码、audio_processing、rtp_rtcp、pacing 等 p2p/ ← ICE/STUN/TURN依赖 rtp_rtcp 等 rtc_base/ ← 被几乎所有模块依赖 system_wrappers/ third_party/ ← libyuv、libvpx、OpenH264、absl 等依赖方向api → pc → call → media → modules → p2p → rtc_base → third_party。5.3 关键链路接收视频流PeerConnectionFactory └─ CreatePeerConnection() → pc::PeerConnection pc::PeerConnection ├─ 创建 call::Call └─ 创建 pc::RtpTransceiver call::Call ├─ 创建 call::VideoReceiveStream └─ 创建 RtpVideoStreamReceiver (modules/rtp_rtcp/) VideoReceiveStream ├─ RtpVideoStreamReceiver ├─ VideoReceiveStream::Decoder (video_coding/) └─ VideoRenderer RtpVideoStreamReceiver ├─ RtpRtcp (modules/rtp_rtcp/) └─ P2PTransportChannel (p2p/)依赖方向PeerConnection → Call → VideoReceiveStream → RtpVideoStreamReceiver → VideoCoding → VideoRender。六、源码阅读与调试建议6.1 阅读顺序入门路径按以下顺序可建立从接口到实现的整体印象顺序步骤说明1从接口入手看api/熟悉PeerConnectionFactory、PeerConnection的接口定义2深入核心实现进pc/追踪 CreateOffer/CreateAnswer、SetLocal/RemoteDescription 如何触发协商3追踪数据链路沿调用链进call/、audio/、video/理解数据从网络到解码/渲染的路径4钻研算法细节按需进modules/如audio_processingAEC/NS/AGC、congestion_controller等6.2 通用建议建议说明先会用再深究先跑通官方 Demo如 peerconnection_client建立直观认识再带着问题看源码主线清晰以「WHEP 拉流」为主线时优先看pc/、call/、video/中与接收相关的代码善用调试在 OnTrack、RtpPacketReceived 等关键路径断点通过调用栈和变量理解执行流程阅读顺序新模块先看.h接口与主要方法 → 再看.cc核心流程 → 全局搜索调用方串联上下游定位功能先在宏观架构中确定功能所在层级如回声消除在音频引擎再进对应目录如 modules/audio_processing6.3 依赖图怎么用场景用法定位功能先在一、五节确定功能所属层级与目录如回声消除 → 音频引擎 → modules/audio_processing再进入该目录细读跟调用链跟 OnTrack、RtpPacketReceived 等时对照五、5.3 的「接收视频流」链路理解模块边界与上下游扩展功能新增能力如自定义编码器时按五、5.2 的目录依赖找插入点保证被正确上层依赖总结与延伸阅读架构四层API → 业务/会话 → 音视频处理 → 基础支持核心目录api/、pc/、call/、media/、audio/、video/、modules/、p2p/、rtc_base/。学习主线以 WHEP 拉流为目标的接收端实现 → 环境与 Demo → 接收端源码 → WHEP 协议 → 整合实现再横向音频、DataChannel、ICE/DTLS、日志统计与纵向采集到渲染/播放扩展。依赖宏观分层、目录级模块依赖、接收视频流调用链三者结合便于定位与阅读。延伸阅读WebRTC 官方文档与架构说明https://webrtc.googlesource.com/src/IETF WHEP/WHIP 草案拉流/推流 HTTP 接口同目录或仓库内 WebRTC、WHEP、SDP/ICE 相关文档