2012-07-24 23 views
8

Estoy transmitiendo contenido H264 desde una cámara IP usando VideoCapture de OpenCV (compilado con soporte para ffmpeg).¿Cómo lidiar con los errores de decodificación de cv :: VideoCapture?

Así que ahora las cosas funcionan bien, pero de vez en cuando tengo errores de decodificación (de ffmpeg creo):

[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 

Estos mensajes se muestran en la consola. ¿Hay alguna forma limpia de escuchar esto? Me gustaría omitir el procesamiento de los marcos glitchy.

¿Algún consejo/sugerencia?

+0

enfrenta el mismo problema .... ¿¿¿alguna solución??? – tod

Respuesta

3

recientemente he resuelto el mismo problema y trato de explicar los pasos que seguí.

He actualizado más reciente opencv_ffmpeg.dll (Retitulé opencv_ffmpeg.dll a opencv_ffmpeg310.dll de usar con OpenCV 3.1, también se renombró misma opencv_ffmpeg2412.dll DLL para usar con OpenCV 2.4.12

al hacer eso, una captura básica marcos y pantalla se convirtió en exitoso sin problema.pero sigue siendo el mismo problema si hago algún procesamiento de imágenes o la detección provoca un retraso entre la captura de marcos.

para resolver el segundo problema utilicé un hilo para agarrar marcos continuamente y actualizar un Mat global para procesamiento.

here puede encontrar mi código de prueba (se necesitan algunas mejoras como el uso de exclusión mutua y la memoria de bloqueo cuando la actualización del Mat)

espero que la información será útil (lo siento por mi mala Inglés)

+0

No he intentado esto todavía, pero parece mucho más elegante que tratar de canalizar los mensajes de error y saltear marcos. –

+0

Recientemente mi enfoque fue explicado por [Mare] (http://study.marearts.com/2016/03/opencv-rtsp-receiving-test.html) en su blog – sturkmen

0

Tengo el mismo problema. Me parece que el problema proviene del hecho de que la fuente que origina el flujo es más lenta que la decodificación. Probablemente para la decodificación tenga un bucle infinito para leer marcos y decodificarlos, lo que podría ser más rápido de lo que su fuente puede enviarle.

No sé cómo parar y esperar hasta que se llene el búfer ... Estoy usando un archivo, de modo que la fuente de mi cámara escribe un archivo y leo los marcos en mi programa de decodificación. Hasta ahora no he podido sincronizarlos

+0

tienes razón, tuve un ciclo sin fin, pero no he encontrado una solución al problema. Estaba pensando en conectar la salida de la consola desde opencv/ffmpeg y usar cuadros solo cuando no se encontraron errores de decodificación, pero no he podido implementar eso o encontrar una solución más elegante. –

+0

Pensé en lo mismo, pero no tengo idea de cómo hacer esto ...:/ – Nacho

Cuestiones relacionadas