摘要

  • RFC 3189 规定每帧 DV 的最后一个 RTP 包把 M 位置一,但禁止接收端依赖它判断换帧,因为承载标记的最后一个包可能已经丢失;帧的转换必须依据 90 kHz RTP 时间戳变化。
  • 这份规范同时保留了多条证据边界:RTP 负载只能装来自同一帧的完整 80 字节 DIF 块;主动丢帧时钟仍要前进;旧块重复只能掩盖缺失,不能恢复原始块;SDP 也不能替代流内必需的 VAUX 与 AAUX 信息。

从磁带带进网络的不是一团字节

DV 的结构先于 RTP 存在。IEC 61834 面向螺旋扫描磁带,专业版本又延伸到 SMPTE 格式。一帧画面由 DIF 序列组成,每个序列包含若干固定为 80 字节的 DIF 块。块头说明它承载序列头、子码、视频辅助信息、音频还是视频。

RFC 3189 没有给这些数据再套一层 DV 专用负载头。完整 DIF 块直接跟在 RTP 头之后,因此负载长度必须是 80 的倍数。一个 RTP 包可以容纳多个块,但这些块必须全部属于同一帧。哪怕包里还有空间,也不能提前塞进下一帧的数据。

这一限制让时间戳成为结构边界。同一帧的所有包共享一个 32 位、90 kHz 的 RTP 时间戳;下一帧使用新的值。不同视频制式对应不同的步进,但“值发生变化”才是接收端可依赖的换帧事件。

M 位承担的是另一种职责。最后一个包到达时,它允许接收端立刻呈现画面,不必等待下一帧的第一个包。这省掉的不是协议真相,而是播放等待时间。

不见标记,不等于帧还没结束

把 M 位视作权威,会在丢包时制造无法解决的歧义。接收端没有看到 M=1,可能是帧仍在传输,也可能是最后一个包连同标记一起消失。单凭“没看到”无法区分两者。

下一个不同时间戳的包可以证明新帧已经开始,却不能证明旧帧完整。边界证据与完整性证据在这里彻底分开:时钟告诉接收端何时跨帧,序列号和实际收到的 DIF 块才说明中间有没有缺口。

规范还允许制造“有意的缺口”。发送端为了降低帧率,可以丢弃某些帧的视频和 VAUX 数据,但仍必须把时间戳推进相应时长。它也可以不发送画面中与上一帧相同区域的 DIF 块。

接收端可用上一帧对应的块进行错误掩盖。画面因此可能保持平滑,但那个旧块没有变成缺失的原始块。显示成功、时间连续和数据完整,是三个不同结果。

SDP 说了格式,流内数据才让内容可解

DV 的音频可以和视频捆绑在一个 RTP 流里,也可以拆成独立流。这个选择被绑定到动态负载类型,并且在一次 RTP 会话期间保持不变,否则序列号同步会迅速复杂化。多种 DV 编码在同一会话中出现时,每一种都需要自己的动态负载类型。

SDP 的 encode 参数说明 DV 制式,audio 参数说明是否捆绑音频。可是画面比例、画面位置、音频量化、声道数量、声道分配和语言等组合太多,RFC 3189 没有把它们全部复制成 SDP 参数。

这些真正影响解码的信息留在 DV 自身的 source 与 source-control 包里。发送端必须携带含必需信息的 VAUX 块或带 AAUX 的音频块。会话描述负责提出格式,负载类型负责选择格式,辅助块负责解释具体媒体;三者都不能代替包的实际到达。

在音视频拆分时,规范建议把音频重新封装为 DAT12、L16 或 L20,以便不懂 DV 的接收端仍可播放。若音频和视频都继续使用 DV,相同时间戳有助于口型同步,RTCP 参考时间戳也可参与。同步线索仍不是完整交付的收据。

后来的规范改了登记,却保留丢包逻辑

RFC 6469 在 2011 年取代 RFC 3189。它加入 SMPTE 370M 高清格式、offer/answer 说明与源特定组播建议,澄清子码省略条件,并按更新后的媒体类型规则重写登记表。

继任文档还明确指出两处历史问题。SMPTE 306M 的格式已经由 314M 覆盖,新实现不应再把它当成独立首选;RFC 3189 的 SDP 示例也错误地书写了 fmtp 属性。

修正没有抹去旧系统。来自遗留实现的 306M offer 仍可接受,首次协商失败后也可作为兼容回退。新的建议与旧的部署证据可以同时存在。

最关键的是,M 位规则原封不动地留下了。RFC 6469 仍把它当作降低播放延迟的提示,同时再次要求用时间戳变化判断换帧。九年的修订扩大了格式、纠正了信令,却没有找到理由让一个可能丢失的包成为唯一裁判。

一幅顺畅画面可能掩盖最重要的事实

实时媒体系统的目标不是等待所有事实永远齐备。它必须在截止时间前做决定。重复旧块有时比展示破损区域更有用,等待下一个时间戳有时比等待永不到达的 M 位更可靠。

危险不在这些选择本身,而在它们事后被合并成一句“这一帧已完整收到”。若只保存渲染后的画面,重复的旧块可能再也无法和真实到达的新块区分。若只看时间戳,主动丢弃的帧也会被时钟连续性掩盖。

RFC 3189 的历史价值,正是它没有要求一个字段承担所有证明。标记、时间、顺序、媒体块、辅助信息和掩盖动作分别说话,网络才能在不假装丢包消失的前提下继续播放。