Las cámaras IP son de calidad variable, algunas se comportan de forma errática según mi experiencia. Tratar con sus flujos RTSP requiere una dosis de tolerancia a fallos.
El proyecto Live555 proporciona una implementación de cliente RTSP relativamente tolerante a fallos, openRTSP, para extraer flujos de audio/vídeo RTSP a través de CLI: http://www.live555.com/openRTSP/
Por ejemplo, para guardar el audio/vídeo RTSP de una cámara en archivos en formato QuickTime (AVI y MP4 también disponibles), un archivo cada 15 minutos:
$ openRTSP -D 1 -c -B 10000000 -b 10000000 -q -Q -F cam_eight -d 28800 -P 900 -t -u admin 123456 rtsp://192.168.1.108:554/11
Estas opciones significan:
-D 1 # Quit if no packets for 1 second or more
-c # Continuously record, after completion of -d timeframe
-B 10000000 # Input buffer of 10 MB
-b 10000000 # Output buffer 10MB (to file)
-q # Produce files in QuickTime format
-Q # Display QOS statistics
-F cam_eight # Prefix output filenames with this text
-d 28800 # Run openRTSP this many seconds
-P 900 # Start a new output file every -P seconds
-t # Request camera end stream over TCP, not UDP
-u admin 123456 # Username and password expected by camera
rtsp://192.168.1.108:554/11 # Camera's RTSP URL
Eliminar la opción -t hace que openRTSP utilice por defecto UDP, lo que puede reducir un poco el tráfico de red. Tendrá que jugar con las opciones para encontrar la combinación que le convenga.
Francamente, las propias cámaras son a veces poco fiables, o simplemente se implementan de forma diferente -como cerrar el socket inesperadamente no es tan inusual.
A veces el cliente openRTSP no capta estos fallos. Así que he optado por codificar un controlador en Python usando el módulo ‘subprocesos’ para invocar y monitorizar el stdout de cada instancia del cliente openRTSP, y también comprobar que los archivos siguen creciendo en tamaño.
Esto parece ser un subproducto de la gama baja de la industria de CCTV que juega rápido y suelto con los estándares, siendo RTSP y ONVIF los dos más frecuentemente abusados.
Afortunadamente, normalmente se pueden evitar estos problemas. A menos que las cámaras IP y el controlador estén diseñados para funcionar bien juntos, sólo utilice ONVIF para el descubrimiento y la gestión de la configuración.
Yo utilizo openRTSP en algunas Raspberry Pi B+ con Raspbian. Cada flujo de 1280x1024 ocupa alrededor del 8-10% del tiempo de la CPU, y he ejecutado con éxito hasta ocho cámaras por RPi, escribiendo los archivos en el almacenamiento NAS. Otro RPi procesa los archivos completados con ffmpeg, buscando el movimiento y produciendo PNGs índice de esos cuadros, para ayudar a detectar los robos.
Hay un esfuerzo de código abierto llamado ZoneMinder que hace esta última parte, pero no pude hacerlo funcionar con mis cámaras. La compatibilidad con ONVIF es nueva e incipiente en ZM, y no parece que se adapte bien a los flujos RTSP irregulares producidos por mi colección de cámaras IP de menos de 100 dólares.