摘要

  • RTP 序号描述数据包的发送次序;RTP 时间戳描述媒体在特定采样或播放时钟中的位置。两者都不是数据包绝对发送时刻的收据。
  • 不同媒体流要对齐,必须依靠 RTCP Sender Report 偶尔给出的 RTP 计数器与 NTP 格式参考值配对。能够证明共同时间的是映射关系,而不是两个裸数字看起来相近。

“时间戳”这个名字很容易诱导人去问:这个包几点发出?RFC 3550 给它的任务要窄得多。32 位字段表示包内第一个媒体字节的采样时刻。周期性媒体应取名义采样时钟,而不是在包离开系统时读取一次机器时钟。

这项标准由 Henning Schulzrinne、Stephen Casner、Ron Frederick 与 Van Jacobson 共同署名。RFC 1889 在 1996 年首次发布,RFC 3550 于 2003 年取代它。USC 的 Information Sciences Institute 记载 Casner 领导了 RTP 的开发与标准化;这使他成为本文人物,但不把集体完成的协议改写成“单人发明”。

包的次序和媒体的位置是两条轴

16 位序号每发送一枚 RTP 数据包便加一。接收端可据此发现缺口、恢复传输次序。它的初始值应随机选择,所以也不是从一开始连续编号的全局凭证。

时间戳沿另一只钟前进。它的频率由负载格式决定。固定速率音频若读取 160 个采样周期,计数器便增加 160;即使这一块只是静音、最终没有发包,媒体时间仍会走过这 160 个位置。包不在网络上,并不意味着声音的连续性可以少掉这一段。

视频则展示相反的表象。一帧太大,需要拆成多包,序号会递增,时间戳却相同,因为它们属于同一媒体时刻。某些编码还会让传输顺序不同于采样顺序,于是连续包的序号仍然单调增加,时间戳却可能不单调。

因此,重复的时间戳不等于重复包,向后跳的时间戳也不自动等于网络重排。前者可能是同帧分片,后者可能来自编码的呈现关系。只有保留序号与媒体时钟的不同语义,抓包记录才不会替协议编造故障。

时间戳起点同样应随机。要把差值换成秒,必须知道负载规定的频率;要知道它属于谁,必须保留 SSRC;要把它放到公共时间线上,还缺一份明确的映射。孤立的 32 位整数做不到这些事。

音频和视频的计数器不能直接相认

一段声音和一帧画面可能同时采集,两个 RTP 数字却毫无相似之处。它们通常采用不同频率,也拥有彼此独立的随机起点。RFC 3550 明确指出,直接比较不同媒体流的 RTP 时间戳无法完成同步。

这是有意的克制。单条流内部,媒体时钟足以安排播放,也能让接收端用采样节奏与到达节奏的差异计算抖动。每一枚数据包没有必要携带绝对日期,更不必要求所有发送者都运行 NTP。

需要跨流对齐时,RTCP 才提供桥梁。Sender Report 把一个 NTP 格式的参考时间与一个对应同一时刻的 RTP 时间戳并列。这个数对定义了本地媒体计数器如何投影到参考时钟。音频、视频分别取得自己的映射,再借共同参考完成对齐。

这份数对不会塞进每个 RTP 数据包,而是以更低频率出现在 RTCP 报告里。两次报告之间,接收端按照已知时钟频率延伸关系。报告中的 RTP 值通常也不等于相邻数据包的时间戳,因为它是按报告所指的精确参考时刻计算出来的。若工具执意寻找“前后包中相同的值”,正确映射反而会被丢弃。

NTP 的格式也不是 UTC 真值证明。RFC 3550 允许没有绝对时间的系统使用共同的相对时钟,例如开机运行时间;若连经过时间都不知道,还可填零。64 位字段说明表示方法,不替时间源、同步状态与精度背书。

RFC 7273 后来进一步把 RTCP 中的 RTP/NTP 数对称为映射,并重申多源同时播放仍依赖已经同步的参考时间。Sender Report 是相关性的收据,不会因为用了 NTP 外形就把一只坏钟变准。

从分组语音问题长出的时间语法

Casner 很早就面对了“连续内容如何穿过离散网络”。ISI 的资料记载,他在 ARPANET 上研究分组语音:在极窄带宽里压缩连续声音、拆包传输,再在另一端恢复。他随后参与分组视频、MBONE,并领导 RTP 的开发与标准化。机构纪念材料把 RTP 的谱系追溯到 Network Voice Protocol 与 Packet Video Protocol。

这种历史解释了 RTP 字段为何节制。标准不预留资源,也不保证服务质量。网络仍可能丢包、延迟、改变到达顺序;协议只给应用足够的身份、序列、媒体位置与报告,让它重建可播放的连续性,并知道结论的边界。

2003 年的修订也保持这种取向。RFC 3550 说明,RFC 1889 的线上包格式没有变化,最大改动是改善大量参与者同时加入时 RTCP 报告的可扩展计时算法。数据通道的词义没有膨胀,控制证据的发送节奏则变得更稳健。

一次可复核采集必须保存时钟域

监控管线若只保留 RTP 时间戳,证据已经残缺。它还应保存 SSRC、负载格式、时钟频率、序号、本地观察时刻,以及最近且有效的 RTP/NTP 数对。若参考值是相对时间或零,也应作为事实留下。

这样才能分别诊断:序号缺口提示可能丢包;媒体计数器断裂可能来自重启、格式变化或播放跳转;Sender Report 过久未到会扩大映射误差;已经投影到共同参考后的音视频差值持续扩大,才更像真实漂移。

若上下文丢失,图表便会用默认值制造确信。它把所有时间戳除以 90000,把采样次序当成发包次序,把两个随机偏移直接相减,或把 NTP 形状的相对值打印成 UTC。

Casner 留给观察系统的原则不是“再加一个时间字段”,而是保存语义边界:包序只说包序,媒体钟只说媒体位置,跨域结论必须带着那座可检查的映射桥。

来源