帧引用查找 · 这帧依赖哪些帧
视频靠帧间预测压缩,一帧解码常依赖之前的帧。接收端必须理清这层依赖,才知道一帧能不能解、丢帧毁了哪些后续。这一章读 video_coding/rtp_frame_reference_finder.h,讲清帧引用怎么被还原、以及它如何决定丢包后的可解码性。
作者 David更新于 第 60 篇(共 112 篇)
帧引用查找 · 这帧依赖哪些帧
帧组齐了,但还不能立即解码。因为视频压缩靠帧间预测——大多数帧只编码“和参考帧的差异”,解它必须先有参考帧。接收端得理清这层依赖关系,才知道一帧能不能解。干这个的是 RtpFrameReferenceFinder(modules/video_coding/rtp_frame_reference_finder.h)。
帧间预测:大多数帧是“差异”
先理解为什么有依赖。视频帧分两类:
- 关键帧(I 帧 / IDR) —— 自包含,不依赖任何其他帧,独立可解。但大(编码整幅画面)。
- 预测帧(P 帧) —— 只编码“和参考帧的差异”(帧间预测)。小得多(只存变化的部分),但依赖参考帧——参考帧没解出来,它就解不了。
RtpFrameReferenceFinder:还原依赖
问题是:接收端怎么知道“这帧依赖哪些帧”?这信息藏在编解码器的比特流和 RTP 元数据里,RtpFrameReferenceFinder 负责把它还原出来:
- 对每个组好的帧,分析它的参考关系——它依赖哪些更早的帧(靠帧号、时间戳、以及编解码器 / SVC 的层结构信息)。
- 判断这帧的参考帧是否都已解码:是 → 这帧可解,放行给解码器;否 → 它依赖的帧还没到 / 丢了,先扣住(或标记不可解)。
在接收管线的位置
图表加载中…
帧引用查找夹在组帧和解码之间,是接收管线的“调度闸门”——只放行能正确解码的帧。
小结与下一章
视频靠帧间预测压缩:关键帧自包含,预测帧只存差异、依赖参考帧——于是帧间结成依赖链,丢一帧毁一串后续。RtpFrameReferenceFinder 从比特流 / RTP 元数据还原每帧的参考依赖,判断“参考帧是否都已解码”→ 决定这帧可解就放行、缺参考就扣住 / 请求关键帧。它是丢包恢复决策的前提。
帧可解了,但什么时候解、什么时候显示?这关乎渲染时机与音视频同步。下一章看 VCMTiming。👉 渲染时机 VCMTiming。
参考资料
- [1] libwebrtc 源码.
modules/video_coding/rtp_frame_reference_finder.h、rtp_vp8_ref_finder.h等。 - [2] libwebrtc 源码.
modules/video_coding/(依赖描述符处理)、api/video/(帧依赖结构)。 - [3] IETF「Dependency Descriptor」RTP 头扩展。