Как бороться с ошибками декодирования CV:: VideoCapture?

я транслирую контент H264 с IP-камеры с помощью VideoCapture из OpenCV (скомпилирован с поддержкой ffmpeg).

пока все работает нормально, но время от времени я получаю ошибки декодирования (из ffmpeg, я полагаю):

[h264 @ 0x103006400] mb_type 137 in I slice too large at 26 10
[h264 @ 0x103006400] error while decoding MB 26 10
[h264 @ 0x103006400] negative number of zero coeffs at 25 5
[h264 @ 0x103006400] error while decoding MB 25 5
[h264 @ 0x103006400] cbp too large (421) at 35 13
[h264 @ 0x103006400] error while decoding MB 35 13
[h264 @ 0x103006400] mb_type 121 in P slice too large at 20 3
[h264 @ 0x103006400] error decoding MB 20 3

эти сообщения отображаются в консоли. Есть ли какой-нибудь чистый способ слушать это ? Я бы хотел пропустить обработку кадров с глюками.

любые подсказки/советы ?

3 ответов


недавно я решил ту же проблему и попытался объяснить шаги, которые я следовал.

я обновил последней opencv_ffmpeg.dll файлы ( я переименовал opencv_ffmpeg.dll в opencv_ffmpeg310.dll для использования с OpenCV 3.1, также переименована в ту же dll opencv_ffmpeg2412.dll для использования с OpenCV 2.4.12

делая это, основные кадры захвата и отображения стали успешными без проблем.но все та же проблема, если я делаю некоторые обработки изображений и обнаружения причин задержки между кадрами захвата.

чтобы решить вторую проблему, я использовал поток для непрерывного захвата кадров и обновления глобального Mat для обработки.

здесь вы можете найти мой тестовый код (ему нужны некоторые улучшения, такие как использование мьютекса и блокировка памяти при обновлении Мата)

Я надеюсь, информация будет полезной ( извините за мой плохой английский )


У меня такая же проблема. Мне кажется, что проблема возникает из - за того, что источник, порождающий поток, медленнее, чем один декодирующий. Вероятно, для декодирования у вас есть бесконечный цикл чтения кадров и декодирования их, что может быть быстрее, чем то, что ваш источник может отправить вам.

Я не знаю, как остановиться и подождать, пока буфер не заполнится .. Я использую файл, так что мой источник камеры пишет файл, и я читаю кадры из него в моей программе декодирования. Пока что я ... не удалось синхронизировать их


что sturkmen сказал абсолютно правильно, версия opencv 2413, и по какой-то причине я не могу обновить opencv до 310, я знаю, что не будет никакой ошибки декодирования, как это для opencv310. Итак, во-первых, я копирую lib opencv_ffmpeg310_64.dll файлы к моему исполняемому файлу путь E:\GITHUB\JpegRtspCamera\vs2013\JpegRtspCamera\x64\Release

тогда я просто удаляю opencv_ffmpeg2413.dll файлы и изменить имя opencv_ffmpeg310_64.dll файлы до opencv_ffmpeg2413.dll файлы. работает!!!