简介
RTP(Real-time Transport Protocol)是一种用于在互联网上传输音频和视频数据的协议。
RTP 通常与 RTCP(Real-time Transport Control Protocol)一起使用,RTCP 用于监控传输质量和提供控制信息。
RTP 报文结构RTP
报文由一个固定头部和可选的扩展部分组成。
以下是 RTP 报文的基本结构:
固定头部
RTP 报文的固定头部包含以下字段:
- 版本 ( V ):2 位
•指示 RTP 版本号。当前版本是 2。 - 填充 ( p ):1 位
•如果设置为 1,表示报文中包含一个或多个填充字节,这些填充字节位于有效载荷之后。 - 扩展 ( X ):1 位
•如果设置为 1,表示报文包含一个扩展头部。 - 参与源数(CSRC计数):4 位
•表示紧接在固定头后的CSRC标识符数量 - 标记 (M):1 位
•用于不同的有效载荷格式。例如,在视频流中,它可以用来指示关键帧。如在视频流中表示帧结束,在音频中表示谈话开始。 - 有效载荷类型:7比特。负载类型 ( PT ):7 位
指示承载数据的类型(如H264、H265),用于确定解码器。
•指示有效载荷的格式。常见的值包括:
•0: PCMU (G.711 μ-law)
•8: PCMA (G.711 A-law)
•96-127: 动态范围,具体值取决于应用 - 序列号 (Sequence Number):16 位
•用于检测丢包和重组乱序的数据包。 - 时间戳 (Timestamp):32 位
•用于同步和抖动计算。单位通常是采样时钟周期。 - 同步源标识符 (SSRC):32 位
•用于标识发送端点。每个 RTP 会话中的 SSRC 是唯一的。 - CSRC 列表:0-15 个 32 位标识符
•可选字段,列出所有贡献源标识符。
扩展头部
如果 X 位被设置为 1,则报文包含一个扩展头部。扩展头部的格式如下:
- 扩展头部长度 (Extension Header Length):16 位
•以 32 位字为单位的扩展头部长度。 - 扩展 ID (ID):16 位
•用于标识扩展头部的类型。 - 扩展数据 (Data):可变长度
•包含扩展头部的具体数据。
示例报文分析
假设你有一个 RTP 报文的十六进制表示,我们来解析它。
以下是一个示例报文:80 60 00 01 00 00 00 00 00 00 00 00 00 00 00 00
我们可以将其分解为各个字段:
- 版本 (V):80 的最高两位是 10,表示版本 2。
- 填充 §:80 的第三位是 0,表示没有填充。
- 扩展 (X):80 的第四位是 0,表示没有扩展头部。
- CSRC 计数 (CC):80 的低四位是 0000,表示没有 CSRC 标识符。
- 标记 (M):60 的最高位是 0,表示没有特殊标记。
- 负载类型 (PT):60 的低七位是 0110000,十进制值为 48,表示静音(Silence)。
- 序列号 (Sequence Number):00 01,十进制值为 1。
- 时间戳 (Timestamp):00 00 00 00,十进制值为 0。
- 同步源标识符 (SSRC):00 00 00 00,十进制值为 0。
使用 Wireshark 进行报文分析
Wireshark 是一个非常强大的网络协议分析工具,可以方便地捕获和分析 RTP 报文。
以下是使用 Wireshark 分析 RTP 报文的步骤:
- 安装 Wireshark:
•你可以从 Wireshark 官方网站 下载并安装 Wireshark。 - 启动 Wireshark 并开始捕获:
•启动 Wireshark 并选择要捕获流量的网络接口。
•开始捕获网络流量。 - 过滤 RTP 流量:
•在捕获窗口中输入 rtp 作为过滤器,只显示 RTP 报文。 - 查看 RTP 报文:
•选择一个 RTP 报文,Wireshark 会显示其详细信息,包括头部字段和有效载荷。
示例 Wireshark 截图
假设你在 Wireshark 中捕获到了一个 RTP 报文,它可能看起来像这样:RTP
Version: 2
Padding: No
Extension: No
CSRC Count: 0
Marker: 0
Payload Type: 96
Sequence Number: 12345
Timestamp: 1234567890
Synchronization Source (SSRC): 123456
总结
通过以上步骤,你可以解析和分析 RTP 报文。如果你需要更详细的分析,可以使用 Wireshark 等工具来捕获和查看实际的网络流量。RTP 报文的解析对于理解实时媒体流的传输机制非常重要,特别是在开发和调试多媒体应用程序时。