Las cámaras IP son de diferente calidad, algunas se comportan de manera errática en mi experiencia. Tratar con sus flujos RTSP requiere una dosis de tolerancia a fallas.
El proyecto Live555 proporciona una implementación de cliente RTSP relativamente tolerante a fallas, openRTSP, para extraer transmisiones de audio / video RTSP a través de CLI: http://www.live555.com/openRTSP/
Por ejemplo, para guardar el audio / video 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
La eliminación de la opción -t hace que openRTSP tenga el valor predeterminado UDP, lo que puede reducir un poco el tráfico de red. Tendrá que jugar con las opciones para encontrar la combinación que más le convenga.
Francamente, las cámaras en sí mismas a veces no son confiables, o simplemente se implementan de manera diferente, como cerrar el zócalo inesperadamente no es tan inusual.
A veces, el cliente openRTSP no detecta estos problemas técnicos. Así que opté por codificar un controlador en Python usando el módulo 'subprocesos' para invocar y monitorear la salida estándar de cada instancia de cliente openRTSP, y también verificar que los archivos continúen 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, RTSP y ONVIF son los dos más abusados.
Afortunadamente, generalmente puede solucionar estos problemas. A menos que sus cámaras IP y su controlador estén diseñados para jugar bien juntos, solo use ONVIF para el descubrimiento único y la administración de configuraciones.
Uso openRTSP en algunos Raspberry Pi B + con Raspbian. Cada transmisión 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 archivos completados con ffmpeg, busca movimiento y produce PNG de índice de esos cuadros, para ayudar a detectar robos.
Hay un esfuerzo de código abierto llamado ZoneMinder que realiza esta última parte, pero no pude hacerlo funcionar con mis cámaras. El soporte de ONVIF es nuevo y naciente en ZM, y no parece competir bien con las transmisiones RTSP irregulares producidas por mi colección de cámaras IP de menos de $ 100.