我正在使用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进行开发。