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