WebRTC(一):整体架构

架构总览

模块划分

媒体采集模块

  • 使用浏览器 API:getUserMedia()
  • 采集摄像头(video)、麦克风(audio)。
  • 通过 MediaStreamTrack 管理单轨道。

媒体处理与编解码

  • 编码器(发送端):
    • 音频:Opus、G.711。
    • 视频:VP8、VP9、H.264、AV1。
  • 解码器(接收端):
    • 支持上述编解码格式。
  • 其他处理:
    • AEC(回声消除)、AGC(自动增益)、NS(降噪)等。

RTCPeerConnection 连接管理

核心对象:RTCPeerConnection

  • 管理媒体轨道、协商 SDP、控制网络连接。
  • 与远端建立加密媒体通道。
  • 支持 addTrack() / addTransceiver() 管理轨道。

传输与安全模块

协议栈(底层网络):

协议 作用
ICE NAT 穿透候选路径收集和选择
STUN 获取公网地址,打洞
TURN 中继服务器
DTLS 建立加密通道
SRTP 安全传输媒体流
SCTP 数据通道的基础协议

媒体传输:

  • 使用 RTP/RTCP 发送音视频流。
  • 支持 NACK、PLI、FEC、REMB、TCC 等反馈机制提升媒体质量。

数据通道(RTCDataChannel)

  • 基于 SCTP over DTLS over ICE 实现。
  • 用于传输非媒体数据,类似 WebSocket,但具备 P2P 优势。

信令机制(自定义实现)

WebRTC 不定义信令协议,常用方案:

  • WebSocket
  • HTTP POST/REST
  • MQTT

信令交换内容包括:

  • SDP(Session Description Protocol):音视频能力协商。
  • ICE Candidate:网络地址候选信息。
lua 复制代码
                        +----------------------+
                        |    JavaScript 应用层  |
                        +----------------------+
                          |        |        |
               +----------+        |        +------------------+
               |                   |                           |
     +------------------+  +----------------+         +------------------+
     | getUserMedia()   |  | PeerConnection | <-----> |  DataChannel     |
     +------------------+  +----------------+         +------------------+
               |                   |
        +------+-------------------+-------+
        |      |           |              |
+-------------+ +----------------+ +--------------+
| 音视频采集  | | 编码/解码      | | 传输协议栈   |
+-------------+ +----------------+ +--------------+
                                   | STUN/TURN/ICE |
                                   | DTLS/SRTP/SCTP|

通信流程

rust 复制代码
[用户A]                                    [用户B]
  |                                           |
  | getUserMedia()                            |
  | 采集本地音视频                              |
  |                                           |
  | createOffer()                             |
  | setLocalDescription(offer)                |
  |------------------>  信令服务器  ------------------->|
  |                                setRemoteDescription(offer)
  |                                createAnswer()
  |                                setLocalDescription(answer)
  |<------------------  信令服务器  <-------------------|
  | setRemoteDescription(answer)                        |
  |                                           |
  | ICE candidate gathering and exchange      |
  |<------------------->(STUN/TURN)<------------------>|
  |                                           |
  |       DTLS 握手,SRTP 密钥协商              |
  |                                           |
  |       媒体传输(RTP)+ 控制(RTCP)          |
  |<=========================================>|

服务端组件架构

虽然 WebRTC 是 P2P,但实际场景常常需要以下服务器支撑:

组件 作用 常见实现
Signaling Server 交换 SDP 和 ICE 信息 Node.js + WebSocket、Socket.io
STUN Server 提供公网地址探测 Google STUN、Coturn
TURN Server 中继数据(P2P 失败时) Coturn
SFU(选择转发) 多人通话中只转发媒体流 mediasoup、Janus、Jitsi
MCU(混合转发) 多人通话中混合为一路流 Kurento、Jitsi MCU
相关推荐
SendTomo2 天前
send.wang私传网:P2P直连传大文件首选工具
javascript·网络·网络协议·webrtc·p2p
桑榆4163 天前
WebRTC 本地视频文件推流 Demo 搭建指南 (Ubuntu 24.04)
linux·ubuntu·webrtc
音视频牛哥7 天前
WebRTC 能解决低延迟直播吗?为什么 RTSP、RTMP、GB28181 仍然不可替代?
音视频·webrtc·低延迟rtsp播放器·音视频sdk·smartmediakit·低延迟rtmp播放器·低延迟音视频
云栖梦泽在15 天前
稳如狗网络工具箱:IP、DNS、WebRTC、测速、连通性和全球延迟检测工具简明介绍
网络·网络协议·tcp/ip·网络安全·性能优化·webrtc
用户07806253471916 天前
getUserMedia 权限排障实战:浏览器拒绝,不一定是用户点了“拒绝”
nginx·webrtc
某林21219 天前
ROS2 + WebRTC + MQTT 异构系统架构
架构·系统架构·机器人·硬件架构·webrtc·ros2
EasyGBS1 个月前
RTSP、RTMP、HLS、FLV、WebRTC……国标GB28181视频平台EasyGBS五大流媒体协议,你的场景该用哪个?
音视频·webrtc
REDcker1 个月前
libdatachannel 快速入门
c++·webrtc·datachannel
冯程1 个月前
WebRTC 之 AllocationSequence 详解
webrtc·音视频开发
阿拉斯攀登1 个月前
售货柜实战:IPC 拉流 → 抽帧 → YOLO 识别完整流水线
yolo·ffmpeg·音视频·webrtc·视频编解码