1、WebRTC架构完整层次划分
┌───────────────────────────────────────────────────────────────────────┐
│ 应用层 (Application Layer) │
│ - 用户界面 (UI) │
│ - 业务逻辑 (Business Logic) │
└───────────────────────────────────────────────────────────────────────┘
┌───────────────────────────────────────────────────────────────────────┐
│ API层 (API Layer) │
│ - Web API (getUserMedia, RTCPeerConnection, RTCDataChannel) │
│ - 浏览器厂商实现 (Browser Vendor Implementation) │
└───────────────────────────────────────────────────────────────────────┘
┌───────────────────────────────────────────────────────────────────────┐
│ 核心引擎层 (Core Engine Layer) │
│ - 音频引擎 (Voice Engine) │
│ - 视频引擎 (Video Engine) │
│ - 传输模块 (Transport) │
│ - 安全模块 (Security) │
│ - 网络管理模块 (Network Management) │
└───────────────────────────────────────────────────────────────────────┘
┌───────────────────────────────────────────────────────────────────────┐
│ 系统接口层 (System Interface Layer) │
│ - 设备管理 (Audio/Video Devices) │
│ - 网络I/O (Network I/O) │
│ - 操作系统适配 (OS Abstraction) │
└───────────────────────────────────────────────────────────────────────┘
2、完整模块拆分
2.1. 应用层 (Application Layer)
2.1.1 功能定位
- 开发者构建的业务应用
- 实现UI和业务逻辑
- 使用WebRTC API实现功能
2.1.2 系统位置
- 最高层(应用开发者直接接触的层次)
2.1.3 作用
- 实现具体业务场景(视频会议、直播、游戏等)
- 管理用户交互和应用状态
- 调用API层接口
2.1.4 涉及关键代码
- 业务逻辑代码(JavaScript/TypeScript)
- UI界面代码(HTML/CSS/JS)
- 信令处理代码(WebSocket/HTTP)
💡 关键点:应用层不包含WebRTC核心代码,只使用API层提供的接口。
2.2. API层 (API Layer)
2.2.1 功能定位
- 提供WebRTC对外接口
- 封装核心引擎层的复杂性
- 为应用层提供简单易用的API
2.2.2 系统位置
- 位于应用层与核心引擎层之间
- 作为应用层和核心引擎层之间的桥梁
2.2.3 作用
- 提供标准化的API,使开发者无需关心底层细节
- 管理WebRTC对象的生命周期
- 处理API调用与核心引擎层的交互
2.2.4 涉及关键源码文件及作用
| 源码路径 | 文件名 | 作用 | 关键功能 |
|---|---|---|---|
api/ |
peerconnectioninterface.h |
核心接口:定义PeerConnection的API | 提供createOffer(), setRemoteDescription(), addTrack()等接口 |
api/ |
peerconnectionfactoryinterface.h |
工厂接口:定义PeerConnectionFactory | 提供CreatePeerConnectionFactory()方法 |
api/ |
mediastreaminterface.h |
媒体流接口:定义MediaStream API | 提供getUserMedia()等媒体采集接口 |
api/ |
datachannelinterface.h |
数据通道接口:定义RTCDataChannel API | 提供createDataChannel(), onopen, onmessage等接口 |
api/ |
sdp.h |
SDP处理接口:处理会话描述 | 提供SDP解析和生成功能 |
pc/ |
peerconnectioninterface.cc |
实现层:PeerConnection API实现 | 实现createOffer()等方法的逻辑 |
pc/ |
peerconnectionfactory.cc |
实现层:PeerConnectionFactory实现 | 实现CreatePeerConnectionFactory()方法 |
💡 关键流程 :
应用层调用
new RTCPeerConnection()→ API层创建PeerConnectionFactory → 调用核心引擎层接口
2.3. 核心引擎层 (Core Engine Layer)
2.3.1 功能定位
- WebRTC的核心实现
- 处理媒体传输、网络通信、安全加密等关键功能
2.3.2 系统位置
- 位于API层与系统接口层之间
2.3.3 作用
- 实现WebRTC的核心算法和协议
- 管理媒体流处理、网络连接和安全传输
- 提供高性能的实时通信能力
2.3.4 涉及关键源码文件及作用
2.3.4.1 音频引擎 (Voice Engine)
| 源码路径 | 文件名 | 作用 | 关键功能 |
|---|---|---|---|
modules/audio_processing/ |
audio_processing.h |
音频处理核心 | 集成AEC、NS、AGC等3A处理 |
modules/audio_processing/ |
aec3/aec3.h |
回声消除核心 | 高级回声消除算法(AEC3) |
modules/audio_processing/ |
noise_suppression/noise_suppression.h |
噪声抑制核心 | 自适应噪声抑制(ANS) |
modules/audio_coding/ |
codecs/opus/opus_audio_encoder.h |
Opus编码器 | Opus音频编码接口 |
modules/audio_coding/ |
codecs/opus/opus_audio_decoder.h |
Opus解码器 | Opus音频解码接口 |
2.3.4.2 视频引擎 (Video Engine)
| 源码路径 | 文件名 | 作用 | 关键功能 |
|---|---|---|---|
modules/video_coding/ |
video_coder.h |
视频编码核心 | 视频编码/解码通用接口 |
modules/video_coding/ |
codecs/vp8/vp8_encoder.h |
VP8编码器 | VP8视频编码接口 |
modules/video_coding/ |
codecs/vp8/vp8_decoder.h |
VP8解码器 | VP8视频解码接口 |
modules/video_coding/ |
video_bitrate_allocator.h |
带宽分配器 | 根据网络状况动态调整码率 |
2.3.4.3 传输模块 (Transport)
| 源码路径 | 文件名 | 作用 | 关键功能 |
|---|---|---|---|
modules/rtp_rtcp/source/ |
rtp_sender.h |
RTP发送器 | RTP包封装与发送 |
modules/rtp_rtcp/source/ |
rtp_receiver.h |
RTP接收器 | RTP包接收与解析 |
modules/rtp_rtcp/source/ |
rtcp_receiver.h |
RTCP接收器 | RTCP反馈包处理 |
modules/transport/ |
transport.cc |
传输层核心 | 数据包发送/接收管理 |
2.3.4.4 安全模块 (Security)
| 源码路径 | 文件名 | 作用 | 关键功能 |
|---|---|---|---|
modules/crypto/ |
ssl_stream_adapter.h |
DTLS流适配器 | 实现DTLS协议 |
modules/crypto/ |
srtp.h |
SRTP加密接口 | SRTP加密/解密 |
modules/crypto/ |
dtls_transport.h |
DTLS传输接口 | DTLS握手与传输 |
2.3.4.5 网络管理模块 (Network Management)
| 源码路径 | 文件名 | 作用 | 关键功能 |
|---|---|---|---|
modules/congestion_controller/ |
bwe.h |
带宽估计核心 | 带宽估计算法接口 |
modules/bwe/ |
bwe.h |
带宽估计实现 | BBR、AIMD等算法实现 |
modules/rtcp_rtt_stats.h |
rtcp_rtt_stats.cc |
RTT统计 | RTT数据收集与分析 |
2.4. 系统接口层 (System Interface Layer)
2.4.1 功能定位
- 与硬件和操作系统交互
- 提供跨平台支持
- 管理设备访问和网络I/O
2.4.2 系统位置
- 位于核心引擎层与硬件/OS之间
2.4.3 作用
- 使WebRTC能在不同平台(Windows/Linux/macOS/Android/iOS)运行
- 提供设备访问和网络I/O的抽象接口
- 解决平台相关问题
2.4.4 涉及关键源码文件及作用
| 源码路径 | 文件名 | 作用 | 关键功能 |
|---|---|---|---|
modules/audio_device/ |
audio_device_buffer.h |
音频设备缓冲 | 音频设备数据缓冲管理 |
modules/audio_device/ |
audio_device_impl.h |
音频设备实现 | 平台相关音频设备实现(Windows/Linux/iOS/Android) |
modules/video_capture/ |
video_capture.h |
视频采集接口 | 视频采集通用接口 |
modules/video_capture/ |
video_capture_impl.h |
视频采集实现 | 平台相关视频采集实现 |
modules/video_render/ |
video_render.h |
视频渲染接口 | 视频渲染通用接口 |
modules/video_render/ |
video_render_impl.h |
视频渲染实现 | 平台相关视频渲染实现 |
modules/rtc_base/ |
socket.h |
网络Socket接口 | 网络Socket抽象接口 |
modules/rtc_base/ |
socket_posix.h |
POSIX Socket实现 | POSIX系统Socket实现 |
modules/rtc_base/ |
socket_win.h |
Windows Socket实现 | Windows系统Socket实现 |
💡 关键点:系统接口层是WebRTC跨平台能力的关键,通过抽象接口使核心引擎层无需关心平台差异。
3、模块间交互关系
调用API
调用接口
调用接口
平台相关实现
业务逻辑
创建对象
音频处理
视频处理
传输管理
安全加密
网络优化
音频数据
视频数据
网络传输
采集音频
采集视频
网络通信
应用层
API层
核心引擎层
系统接口层
硬件/OS
音频引擎
视频引擎
传输模块
安全模块
网络管理模块
音频设备
视频设备
网络I/O
4、各层模块对应关系表
| 模块 | 核心文件 | 关键作用 | 系统位置 | 层级 |
|---|---|---|---|---|
| 应用层 | 业务代码 | 实现UI和业务逻辑 | 应用开发者直接编写 | 应用层 |
| API层 | peerconnectioninterface.h |
提供WebRTC对外接口 | 应用层与核心引擎层之间 | API层 |
| 核心引擎层 | peerconnection_impl.cc |
连接生命周期管理 | 核心引擎层 | 核心引擎层 |
| 核心引擎层 | ice_controller.cc |
NAT穿透与连接建立 | 业务逻辑层 | 核心引擎层 |
| 核心引擎层 | video_coder.h |
音频/视频编解码 | 业务逻辑层 | 核心引擎层 |
| 核心引擎层 | rtp_sender.h |
RTP封装与传输 | 传输层 | 核心引擎层 |
| 核心引擎层 | ssl_stream_adapter.h |
DTLS/SRTP加密 | 安全层 | 核心引擎层 |
| 核心引擎层 | bwe.h |
带宽估计与拥塞控制 | 优化层 | 核心引擎层 |
| 系统接口层 | video_capture_impl.h |
硬件设备访问 | 系统接口层 | 系统接口层 |
| 系统接口层 | audio_device_impl.h |
音频设备管理 | 系统接口层 | 系统接口层 |
| 核心引擎层 | data_channel_impl.cc |
非媒体数据传输 | 扩展层 | 核心引擎层 |
- 层级清晰:WebRTC架构遵循"高内聚、低耦合"原则,每层专注于单一职责
- 接口隔离:各层之间通过接口通信,避免直接依赖
- 跨平台能力:系统接口层使WebRTC能在不同平台上运行
- 业务解耦:应用层专注于业务逻辑,无需关心WebRTC内部实现
5、WebRTC工作流程
应用层:
1. 调用getUserMedia()获取媒体流
2. 创建RTCPeerConnection实例
3. 通过信令交换SDP和ICE候选
API层:
1. 封装API调用
2. 调用核心引擎层接口
核心引擎层:
1. 音频/视频处理(采集、编码、处理)
2. ICE连接建立(STUN/TURN)
3. RTP封装与传输
4. DTLS/SRTP加密
5. 网络拥塞控制
系统接口层:
1. 访问音频/视频设备
2. 管理网络I/O
3. 与操作系统交互
硬件/OS:
1. 提供摄像头、麦克风等硬件支持
2. 提供网络通信能力
💡 关键流程 :
应用层→API层→核心引擎层(音频/视频处理、ICE连接、RTP传输)→系统接口层(设备访问、网络I/O)→硬件/OS
6、WebRTC架构层次与模块职责
| 架构层次 | 关键职责 | 核心模块 | 典型源码 | 关键作用 |
|---|---|---|---|---|
| 应用层 | 实现UI和业务逻辑 | 业务逻辑代码 | app.js |
提供用户交互和业务场景 |
| API层 | 提供WebRTC接口 | API实现 | peerconnectioninterface.h |
封装核心引擎层,提供简单API |
| 核心引擎层 | 实现WebRTC核心功能 | 音频引擎、视频引擎、传输模块 | peerconnection_impl.cc, rtp_sender.h |
处理媒体传输、网络通信、安全加密 |
| 系统接口层 | 提供硬件/OS抽象 | 设备管理、网络I/O | audio_device_impl.h, socket_posix.h |
使WebRTC跨平台运行 |
这种分层设计使WebRTC能够:
- 保持核心引擎的高性能和可维护性
- 为应用层提供简单易用的接口
- 通过系统接口层支持多平台
- 适应不同应用场景(P2P、SFU、MCU)
WebRTC的分层架构是其成功的关键,它使开发者能够专注于应用逻辑,而无需处理复杂的媒体传输和网络穿透问题。