Python使用小教程01——[h264 @ 0x55abeda05080] error while decoding MB 0 14, bytestream 104435

为什么一定要用多进程
  • 一方面:如果采取pipeline的模式进行目标识别,先读取数据再识别,会有下面的报错:
[h264 @ 0x55abeda05080] left block unavailable for requested intra mode
[h264 @ 0x55abeda05080] error while decoding MB 0 14, bytestream 104435
  • 目前比较靠谱的一种解释是“FFMPEG Lib does not support H264 videos in the rtsp protocol”。H264是当今流行的视频压缩格式;ffmpeg是一个开源库,实现了对h264视频文件的解压缩。

  • 目前的opencv中的H264编码实际上是向下调用ffmpeg的,ffmpeg中又调用了libx264,它执行的就是视频流解码的工作。所以报错大概率也是从这个库来的。然后我们进一步定位。
    在这里插入图片描述

  • 发现H264除了使用帧内压缩之外,还使用了帧间压缩;H264采用了独特的I帧、P帧和B帧策略来实现,连续帧之间的压缩。那么也就是说在解码的时候如果不能有H264压缩时候需要的帧,就不能正确解码。但是我们由于读取图片和目标检测是放在一起的,导致传输堵塞。

  • 解决方案是:读取和识别分开进行。

  • 另一方面,如果读取速度低于视频流的输出速度,窗口显示的图片是好几秒钟前的内容。一段时间过后,缓存区将会爆满,程序报错。

  • 解决方案是:创建一个队列,线程A从通过rtsp协议从视频流中读取出每一帧,并放入队列中,线程B从队列中将图片取出,处理后进行显示。线程A如果发现队列里有两张图片(证明线程B的读取速度跟不上线程A),那么线程A主动将队列里面的旧图片删掉,换上新图片。

  • 由于进程间是独立的,因此一个进程的崩溃不会影响其他进程。

  • 同一个进程可以共享内存,进程间独立,实现了资源隔离。/

  • 15
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值