当前位置: 首页 > ops >正文

WebRTC(一):整体架构

架构总览

在这里插入图片描述

模块划分

媒体采集模块

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

媒体处理与编解码

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

RTCPeerConnection 连接管理

核心对象:RTCPeerConnection

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

传输与安全模块

协议栈(底层网络):

协议作用
ICENAT 穿透候选路径收集和选择
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:网络地址候选信息。
                        +----------------------+|    JavaScript 应用层  |+----------------------+|        |        |+----------+        |        +------------------+|                   |                           |+------------------+  +----------------+         +------------------+| getUserMedia()   |  | PeerConnection | <-----> |  DataChannel     |+------------------+  +----------------+         +------------------+|                   |+------+-------------------+-------+|      |           |              |
+-------------+ +----------------+ +--------------+
| 音视频采集  | | 编码/解码      | | 传输协议栈   |
+-------------+ +----------------+ +--------------+| STUN/TURN/ICE || DTLS/SRTP/SCTP|

通信流程

[用户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
http://www.xdnf.cn/news/12900.html

相关文章:

  • 【STM32】G030单片机开启超过8个ADC通道的方法
  • mongodb源码分析session执行handleRequest命令find过程
  • [ linux-系统 ] 进程控制
  • UNECE R79——解读自动驾驶相关标准法规
  • C++中vector类型的介绍和使用
  • 生成对抗网络(GAN)损失函数解读
  • 使用MFC中的CEvent实现两个线程之间的交替打印
  • 【Linux系统】Linux环境变量:系统配置的隐形指挥官
  • Gemini 2.5 Pro (0605版本) 深度测评与体验指南
  • MySQL 8.0 OCP 英文题库解析(十二)
  • Rust 学习笔记:共享状态并发
  • 三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
  • 从零手写Java版本的LSM Tree (三):MemTable 内存表
  • 图表类系列各种样式PPT模版分享
  • 高性能低功耗之道:全志A133在智能硬件中的全面应用
  • 设计模式-抽象工厂模式
  • CSS3 常用功能详细使用指南
  • App Trace技术解析:传参安装、一键拉起与快速安装
  • 【Linux】Linux安装并配置RabbitMQ
  • Maven 多仓库治理与发布策略深度实践
  • Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?
  • 大模型的LoRa通讯详解与实现教程
  • 时序数据库IoTDB在工业物联网时序数据管理中的应用
  • Ray框架:分布式AI训练与调参实践
  • WEB3全栈开发——面试专业技能点P4数据库
  • 数据结构-文件
  • Unity3D SM节点式动画技能编辑器实现
  • AIGC(AI Generated Content)测试结合自动化工具与人工评估
  • 在 Windows 11 上创建新本地用户账户
  • C++ 设计模式 《爬虫围城危机:小明用代理模式自救》