Восстановить из-за ошибки декодирования видео из opencv - PullRequest
0 голосов
/ 27 сентября 2018

Я использую захват видео 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 для разработки.

...