从OpenCV VideoCapture的解码错误抛出中恢复

时间:2018-09-27 20:22:58

标签: opencv video-streaming h.264

我正在使用opencv视频捕获从RSTP ip地址连续读取视频流,该文件格式为h.264。

我注意到某个时候,如果从缓冲区中拉出的图像由于其他原因(例如过程)而延迟,我将开始接收解码错误,并且视频捕获也不会从该错误中恢复。

[h264 @ 0x80460db10]corrupted macroblock 54 14 (total_coeff=-1)
[h264 @ 0x80460db10]error while decoding MB 54 14

我试图在我的video.read()周围放置一个try&catch块,但是没有捕获到异常。除了避免发生此错误之外,还有什么方法可以从故障状态中恢复并继续获取?

这是我当前的实现,_QueryFrame是后台线程进程,该进程不断从缓冲区中提取图像。

def Connect(self):
    self.capture = cv2.VideoCapture(self._streamurl)

def AcquireFrame(self):
    image = self._GetFrame()
    return image

def _QueryFrame(self):
    while (not self._isstop):
        try:
            self.status, self.Frame = self.capture.read()
            if self.Frame is not None:
                #self.AvgFrameQueue.append(self.Frame.copy())
                self._streamLogger.ImgQueue.put((self.Frame.copy(),self._frameCounter))
                self._frameCounter = self._frameCounter+1
        except:
            print("decode error")

    self.capture.release()

def _GetFrame(self):
    return self.Frame

我正在使用opencv 3.4.1和python 3.6进行开发。

0 个答案:

没有答案