18 votos

La captura de RTSP arroyo de la Cámara IP y de la tienda

Tengo un par de Cámaras IP de salida que RTSP (h264, mpeg4) stream.

Pegando la URL localmente a través de VLC: rtsp://192.168.0.21:554/mpeg4

Puedo corriente de la cámara y el volcado a disco (en mi escritorio). Me gustaría sin embargo almacenar estos archivos en mi NAS (FreeNAS). Yo estaba buscando la manera de capturar el flujo RTSP y volcado a disco pero soy incapaz de encontrar nada.

Es posible la captura de la corriente en FreeBSD o Linux (RaspberryPi) y volcar el contenido transmitido a un disco local para Linux o FreeBSD - preferiblemente cada 30 minutos?

EDITAR: El NAS está sin cabeza (HP N55L o algo así) y el RaspberryPi son decapitados.

Ya he mirado en ZoneMinder, pero necesitan algo pequeño. Tenía la esperanza de que tal vez el uso de Movimiento para detectar movimiento en la corriente, pero eso vendrá más adelante.

32voto

jh86 Puntos 35

Las cámaras IP son de calidad variable, algunos comporta de forma errática en mi experiencia. El trato con sus RTSP requiere una dosis de tolerancia a fallos.

El Live555 proyecto proporciona una relativamente tolerante a fallos RTSP implementación del cliente, openRTSP, para tirar de RTSP audio/video arroyos a través de la CLI: http://www.live555.com/openRTSP/

Por ejemplo, para guardar una cámara RTSP de audio/vídeo a 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 significa-

-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 openRTSP por defecto a la UDP en lugar de ello, lo que puede reducir el tráfico de red un poco. Usted tendrá que jugar con las opciones, para encontrar la combinación que más te convenga.

Francamente, las propias cámaras son a veces poco fiables, o simplemente implementado de manera diferente -como cerrar el socket de forma inesperada no es del todo inusual.

A veces la openRTSP cliente no la captura de estos problemas. Así que he optado por el código de un controlador en Python usando el 'procesos' módulo para invocar y supervisar el stdout de cada openRTSP instancia del cliente, y también para comprobar que los archivos siguen creciendo en tamaño.

Este parece ser un subproducto de la gama baja de la industria de CCTV jugar rápido y suelto con las normas, RTSP y ONVIF siendo los dos más frecuentemente abusadas.

Afortunadamente, generalmente, usted puede evitar estos problemas. A menos que las cámaras IP y el controlador están diseñados para jugar muy bien juntos, sólo el uso de ONVIF para una vez-sólo el descubrimiento y la gestión de configuración.

Yo uso openRTSP en un par de Raspberry Pi B+ la ejecución de Raspbian. Cada 1280 x 1024 stream ocupa en torno al 8-10% de la CPU del tiempo, y he tenido éxito en ejecutar hasta ocho cámaras por RPi, la escritura de los archivos de almacenamiento NAS. Otro RPi procesos de los archivos completados con ffmpeg, la búsqueda de movimiento y producir índice de los archivos Png de los marcos, para ayudar con las manchas breakins.

No es un código abierto esfuerzo llamado ZoneMinder, que hace de esta última parte, pero yo era incapaz de hacerlo funcionar con mis cámaras. ONVIF apoyo es nueva y naciente en ZM, y no parece que lidiar bien con el irregular RTSP producido por mi colección de sub-$100 cámaras IP.

7voto

Juanpi Puntos 46

Sólo pensé que me gustaría añadir mi granito de arena y complementar BjornR la respuesta.

En lugar de ejecutar una tarea en el cron periódicamente matar el VLC proceso, uno podría decir VLC para ejecutar una cantidad especificada de tiempo y cerrar después.

Este es el comando que ejecuto en mi cuadro:

/usr/bin/vlc -vvv rtsp://192.168.1.128:1554/11 --sout=file/ts:/media/path/to/save/location/recording-$(date +"%Y%m%d%H%M%S").ts -I dummy --stop-time=480 vlc://quit

Este se ejecuta VLC para la cantidad especificada de tiempo y después se cierra. El vlc://quit parámetro es necesario ya que VLC podría detener la grabación y permanecer abierto. Este comando debe ser colocado dentro de un bucle.

El único problema que he encontrado hasta ahora es que es posible que pierda un par de segundos cada vez que una nueva grabación se inicia.

5voto

faux-sho Puntos 104

VLC se ve como un candidato ideal para el proceso de su emisión. Métodos básicos para la captura de una secuencia , se describen en el sitio web de Videolan. Yo haya podido registró la salida de mi D-Link DCS-5222 cámara de red con el siguiente comando:

vlc rtsp://user:password@ip/play1.sdp --sout=file/ogg:mystream.ogv

En su caso, esto podría funcionar para guardar la producción en el país:

vlc rtsp://192.168.0.21:554/mpeg4 --sout=file/ts:mystream.mpg

Te sugiero que para ejecutar una secuencia de comandos que termina esta vlc proceso y el lanzamiento de una nueva instancia cada 30 minutos, ya que no estoy seguro de que VLC es capaz de hacer esto.

Como para almacenar en un NAS, sólo tiene que montar su sistema de archivos local.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: