Я использую захват видео opencv для непрерывного чтения видеопотока с IP-адреса RSTP, формат файла которого - h.264.
Я заметил, что когда-нибудь, если изображение, извлекаемое из буфера, задерживается по другой причине, такой как процесс, я начну получать ошибку декодирования, и видеозахват не восстановится после этой ошибки.
[h264 @ 0x80460db10]corrupted macroblock 54 14 (total_coeff=-1)
[h264 @ 0x80460db10]error while decoding MB 54 14
Я пытался разместить блок try & catch вокруг моего video.read (), но исключение не было обнаружено.Помимо предотвращения возникновения этой ошибки, есть ли способ восстановления из состояния ошибки и возобновления получения?
Вот моя текущая реализация, _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 для разработки.