在GB28181协议对接RTSP流时,倍速播放会导致FFmpeg缓冲区溢出,进而造成花屏问题。这是由于倍速播放增加了数据流的处理速度,而FFmpeg的缓冲区未能及时处理这些增量数据,导致视频帧丢失或渲染错误。为解决此问题,可能需要优化数据缓存策略或调整流的处理速率,确保FFmpeg能够稳定地处理高吞吐量的视频流。
下面是我在网上找到的一些思路及方法:
大华、海康和华为等NVR录像机gb28181平台倍速播放原理 - 阿风小子 - 博客园
基本原理如下:
因为这些平台都不会牵扯到编解码,所以只能在编码后的数据进行处理,原始的编码数据来源于相机(大部分),所以对于安防,编码的源头在相机端,这是一个大致前提。
平台收到相机编码后的数据后,如果要进行倍速播放,那怎么发送数据呢?策略如下:
1、4倍以下,按照全帧率4倍码流发送数据,即1s发送100帧(假设25fps),注意这里对dts和pts不做任何修改。
2、4倍以上,只发送I帧数据。这里也不修改dits和pts.
我们收到数据后直接播放会出现什么问题呢?
1、如果我们收到的100fps,但是此时dts和pts却没有改变,播放器播放的时候会出现跳秒和花屏现象。为什么呢?
这是因为dts和pts没有修改,播放器还是按照正常dts和pts速率来解码播放,导致缓存长满,这时候播放器一般会丢包处理,丢包后刚好这一段数据中包含I帧