概述
实时传输协议(Real-time Transport Protocol, RTP)是一种用于处理互联网实时流量(如音频和视频)的协议。RTP 必须与 UDP 协议配合使用,不包含多播或端口号等传输机制。RTP 支持多种文件格式,例如 MPEG 和 MJPEG。它对数据包延迟高度敏感,但对数据包丢失的容忍度较高。
历史
RTP 由互联网工程任务组(IETF)开发,核心团队包括以下四名成员:
- S. Casner(包装设计)
- V. Jacobson(包装设计)
- H. Schulzrinne(哥伦比亚大学)
- R. Frederick(Blue Coat Systems Inc.)
RTP 首次于 1996 年以 RFC 1889 的形式发布,随后在 2003 年更新为 RFC 3550。
应用
RTP 主要用于以下场景:
- 媒体混合、排序和时间戳:帮助处理实时数据的顺序和同步。
- 互联网协议语音(VoIP):支持实时语音通信。
- 视频电话会议:通过互联网进行视频通话。
- 互联网音频和视频流:支持流媒体传输。
RTP 报头格式
RTP 数据包的报头格式简洁,适用于所有实时应用。以下是报头中各字段的说明:
- 版本(Version):2 位,定义协议版本号,当前版本为 2。
- 填充(P):1 位,值为 1 表示数据包末尾有填充,值为 0 表示无填充。
- 扩展(X):1 位,值为 1 表示在数据和基本报头之间存在扩展报头,值为 0 表示无扩展报头。
- 贡献者数量(CC):4 位,表示贡献者数量,最大值为 15(由 4 位字段限制,范围为 0 到 15)。
- 标记(M):1 位,应用程序使用此字段作为数据结束的标记。
- 有效载荷类型(Payload Type):7 位,指示有效载荷的类型,用于区分不同的数据格式(如音频、视频等)。
- 序列号(Sequence Number):16 位,为每个 RTP 数据包分配序列号,用于排序和检测数据包丢失或顺序错误。首个数据包的序列号为随机值,后续数据包序列号依次加 1。
- 时间戳(Timestamp):32 位,用于表示不同 RTP 数据包之间的时间关系。首个数据包的时间戳为随机值,后续数据包的时间戳为前一时间戳加上生成当前数据包第一个字节所用的时间之和。时间戳的时钟周期因应用程序而异。
- 同步源标识符(SSRC):32 位,标识数据包的源,由源随机生成,用于解决多个源使用相同序列号的冲突。
- 贡献者标识符(CSRC):32 位,用于在会话中存在多个源时标识贡献者。混音器源使用 SSRC,其余源(最多 15 个)使用 CSRC。