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
相关推荐
红米饭配南瓜汤11 天前
WebRTC 发送端 SSRC 生成流程总结
网络·网络协议·音视频·webrtc·媒体
小柯博客12 天前
从零开始WebRTC(一)
stm32·单片机·嵌入式硬件·青少年编程·嵌入式·webrtc
Paraverse平行云15 天前
实时云渲染云推流突破UE像素流传输数据单个消息64KB限制
云计算·webrtc·unreal engine
MagicSakuraD23 天前
LiveKit 的核心概念
webrtc
RTC老炮1 个月前
webrtc弱网-AlrDetector类源码分析与算法原理
服务器·网络·算法·php·webrtc
不会吃萝卜的兔子1 个月前
go webrtc - 2 webrtc重要概念
webrtc
ayaya_mana1 个月前
BilldDesk:基于Vue3+WebRTC+Nodejs+Electron的开源远程桌面控制
electron·开源·webrtc
她超甜i1 个月前
前端通过后端给的webrtc的链接,在前端展示,并更新实时状态
前端·javascript·webrtc
计算机小手1 个月前
高效 P2P 文件传输工具:FileSync 利用 WebRTC 技术实现极速安全传输
经验分享·docker·webrtc·开源软件
AI码上来1 个月前
当小智 AI 遇上数字人,我用 WebRTC 打造实时音视频应用
人工智能·webrtc·实时音视频