H.264流中含recovery point SEI且exact_match=1的非IDR I帧作用探讨
IDR帧与I帧的区别及recovery point SEI的疑问
我对IDR帧和I帧的区别理解如下:
- IDR帧:该帧及其解码顺序之后的所有帧,都不需要参考IDR帧之前的帧就能解码
- I帧:仅该帧本身不需要参考任何其他帧解码,但I帧之后的P/B帧理论上仍可能依赖I帧之前的帧(规范允许这种情况,只是常规H.264流不会这么做)
这里的“之前”指的是解码顺序(码流中NAL单元的顺序),而非显示顺序(屏幕上帧的播放顺序)。
可以给部分或全部I帧添加recovery point SEI消息,常规作用是:从此处开始解码,能得到可接受的画面——用户可以忍受开头几帧的伪影,不用等到下一个IDR帧再播放;但要最佳画质还是得从之前的IDR帧开始解码。
但根据H.264规范(08/21;附录D.2.8),这个SEI消息可以带exact_match=1标志,含义是:从此处开始解码,得到的帧和从之前IDR帧开始解码的结果完全一致。
我的疑问是:既然这个I帧和IDR帧效果完全相同,编码器为什么要费力加这个SEI信息?
更新:我的理论(求确认)
经过研究,我有一个猜想,以非IDR I帧的场景为例(以下帧按解码顺序排列,decoding pos是码流中的序号,presentation pos是显示给用户的序号,表格截取流的中间部分,之前已有其他帧):
| type | decoding pos | presentation pos |
|---|---|---|
| I | 6 | 8 |
| B | 7 | 6 |
| B | 8 | 7 |
| P | 9 | 12 |
| B | 10 | 9 |
| B | 11 | 10 |
简单来说:虽然从这个I帧开始解码,显示顺序中该帧之后的所有帧都能实现exact_match=1的效果,但解码顺序中该帧之后仍存在依赖更早帧的帧(比如前两个B帧,没有之前的帧就无法解码)。
内容的提问来源于stack exchange,提问作者Claude
相关产品推荐
相关产品推荐

