《音视频问题汇总》

1.当视频在传输过程中丢帧,会出现什么现象?

1.丢I帧

现象:

  • 整屏马赛克
  • 画面冻结
  • 黑屏
  • 后续P/B全部无法解码

原因:

  I帧是”参考基准“,丢了它,后面的帧全都没法解。

恢复时间:等待下一个I帧。

2.丢P帧

现象:

  • 从丢帧点开始画面错误
  • 马赛克/画面或拖影
  • 错误会向后传播

原因:

  后续P/B帧依赖这个P帧

恢复时间:等待下一个I帧或者出发IDR

3.丢B帧

现象:

  • 轻微抖动
  • 某一帧跳过
  • 用户往往感受不到

原因:

  B帧是”双向预测“,本身不被依赖。

  因此B帧是”最安全可丢的“

  实时系统里经常直接禁用B帧

备注:

丢I帧和P帧马赛克的区别:

  丢I帧和P帧会有可能出现花屏或者马赛克。区分就是,丢I帧会立马全屏花,或者大块马赛克。而丢P帧,画面会从清晰--->局部马赛克,错误区域逐渐扩散,有一个从好到坏的过程。

 

2.为什么实时系统禁用B帧

  结论:B帧丢了,对”画面内容“影响小,但是对”系统行为“影响大。而实时系统关心的是系统行为,而不是”画质评分“。

B帧丢了,对画面影响不大:

原因:

  • B帧不被任何帧作为参考
  • 后续I/P帧不依赖它
  • 解码器可以直接跳过或用前后帧插值

所以:

  • 不会引发错误扩散
  • 不会破坏参考链条

B帧丢了,对系统行为影响很大:

1.B帧=强制引入”未来依赖“

B帧的定义:

I --- P --- B --- B --- P
        ↑           ↑

后果是:

  • 编码端:必须先编码”未来P“
  • 解码端:必须先接收”未来P“
  • 显示端:必须等所有依赖到齐

这一步的后果: 强制缓冲 + 等待

  所以会有一个问题,就算B帧丢了,虽然它不影响画面。但是它的这种机制,不会因B帧丢了,就没了。也就是就算B帧丢了,依旧会强制缓冲 + 等待,出现”B帧没用上,但是为了B帧付出的代价已经发生

2.丢包场景下,B帧会放大”不确定性“

  实时系统最怕的是不确定。

没B帧(IPPPP)

  • 丢包---》立即知道哪一帧坏
  • 行为:等下一个或快速刷新

有B帧(IBBP)

  • 解码器需要先判断:是B帧丢了还是未来参考帧丢了?
  • 时间线可能变成:等一下......再等一下.....确认不了.....跳帧

因此总论是B帧会让错误”判断路径“变复杂,增加抖动(jitter)

3.B帧会破坏”时间确定性“

  B帧的帧重排以及非线性解码顺序,会导致帧到达 不等于 帧可显示。

 

总结:

  B帧的收益 = 画质

  B帧的代价 = 延时 + 抖动 + 复杂度

 

posted @ 2026-01-13 19:42  一个不知道干嘛的小萌新  阅读(1)  评论(0)    收藏  举报