RTMP 和 WebRTC

时间:2025-02-06 06:57:44

WebRTC(Web Real-Time Communication)和 RTMP(Real-Time Messaging Protocol)是两种完全不同的流媒体协议,设计目标、协议栈、交互流程和应用场景均有显著差异。以下是两者的详细对比,涵盖协议字段、交互流程及核心设计思想。


一、协议栈与设计目标对比

特性 RTMP WebRTC
传输层 基于 TCP(可靠传输) 基于 UDP(低延迟,支持 NAT 穿透)
主要用途 低延迟直播(单向流) 实时音视频通信(双向 P2P/SFU)
协议层级 应用层协议(私有协议) 协议族(集成 ICE/DTLS/SRTP 等)
延迟 1-5 秒(受 TCP 重传影响) 100-500 毫秒(UDP + 抗丢包算法)
加密 可选(RTMPE 或 TLS) 强制加密(DTLS + SRTP)
浏览器支持 需 Flash(已淘汰) 原生支持(Chrome/Firefox/Safari)

二、RTMP 协议详解

1. 协议栈结构

RTMP Message → Chunk (分块传输) → TCP

2. 关键字段与消息类型

RTMP 握手(Handshake)
  • 3 次握手(C0/C1/C2 和 S0/S1/S2),验证双方协议版本和随机数。
  • C0/S0:1 字节协议版本(例如 0x03)。
  • C1/S1:1536 字节时间戳 + 随机数。
  • C2/S2:回显对方的随机数。
RTMP Chunk 分块
  • 数据分块传输,头部字段:
    • Basic Header(1-3 字节):Chunk Stream ID(CSID)和格式类型。
    • Messag