rtmp投屏花屏卡顿原因分析

1.丢失参考帧导致的

一般 H.264 码流有 I、B、P 三种帧类型,I 帧是关键帧,B 帧是双向预测内插编码帧,P 帧是前向预测编码帧。

I 帧由于是帧内压缩,因此可以独立解码播放,而 B 帧,一旦丢失了 I 帧或者后面的 P 帧,则会解码失败,而 P 帧一旦丢失了前面的 I/B/P 帧,也会导致解码失败。

对于丢失了参考帧而导致的解码失败,一般就会出现花屏的现象,花屏的严重程度依赖于丢失的参考帧对即将解码的帧的重要程度。

什么情况下会丢失参考帧呢 ?

  • 网络不好,编码后的数据发不出去
  • 系统低内存,队列里面无法承受更多的帧数据

因此,在这些极端的情况下,不得不丢帧的话,最合理的策略就应该是一次丢一整个 GOP,即:一旦开始丢了一个 I 帧,那么在遇到下一个 I 帧之前的所有视频帧,均丢弃掉,这样即可有效避免播放器端产生解码花屏。

2.

http://blog.sina.com.cn/s/blog_9e7753030102vd5s.html 花屏有三个原因:

其一是发送数据包太大,超过了ffmpeg默认最大值。解决方法为下面的步骤 1。

其二是网络情况较差时,因网络状况出现的丢包而导致花屏。我这里是将有丢包的帧过滤掉,从而避免花屏现象。解决方法为下面的步骤2,3。

其三是因为解码出错。解决方法为下面的2,4,5,6,7,8,9。

3.

常见视频花屏有一下三种原因造成:

渲染脏数据
丢帧
图像格式转换

4.播放花屏


5.

一旦发现丢包,在下一个I帧到来之前,所有过来的包都丢掉

6.重传补包 NACK

H264视频在分组网络中传输丢包不可避免,尤其在网络环境不好时传输h264码流,丢包会导致解码端花屏,马赛克严重,这方面的前沿技术是 FEC, NACK, 前者是 前向纠错技术,后者是重传,二者结合能很好的解决丢包引起的视觉效果