As câmeras IP são de qualidade variável, algumas se comportando de forma irregular na minha experiência. Lidar com seus fluxos de RTSP requer uma dose de tolerância a falhas.
O projeto Live555 fornece uma implementação de cliente RTSP relativamente tolerante a falhas, openRTSP, para extrair fluxos de áudio / vídeo RTSP via CLI: link
Por exemplo, para salvar o áudio / vídeo RTSP de uma câmera em arquivos no formato QuickTime (também disponível AVI e MP4), um arquivo a 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
Essas opções significam:
-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
A remoção da opção -t faz com que openRTSP seja padronizado para UDP, o que pode reduzir o tráfego de rede um pouco. Você precisará jogar com as opções para encontrar a combinação que mais lhe convier.
Francamente, as próprias câmeras às vezes não são confiáveis, ou apenas implementadas diferentemente - como fechar o soquete inesperadamente não é tão incomum assim.
Às vezes, o cliente openRTSP não detecta esses problemas. Por isso, optei por codificar um controlador em Python usando o módulo 'subprocessos' para invocar e monitorar o stdout de cada instância do cliente openRTSP e também verificar se os arquivos continuam a crescer em tamanho.
Isto parece ser um subproduto da indústria low-end do CCTV que joga rápido e solto com os padrões, RTSP e ONVIF sendo os dois mais freqüentemente abusados.
Felizmente, você geralmente pode contornar esses problemas. A menos que suas câmeras IP e seu controlador sejam todos projetados para funcionar bem juntos, use apenas o ONVIF para uma única descoberta e gerenciamento de configurações.
Eu uso openRTSP em alguns Raspberry Pi B + rodando Raspbian. Cada fluxo de 1280x1024 ocupa cerca de 8-10% do tempo da CPU, e tenho executado com êxito até oito câmeras por RPi, gravando os arquivos no armazenamento NAS. Outro RPi processa arquivos concluídos com o ffmpeg, procurando por movimento e produzindo PNGs de índice desses quadros, para ajudar a identificar arrombamentos.
Existe um esforço de código aberto chamado ZoneMinder que faz esta última parte, mas não consegui fazê-lo funcionar com as minhas câmeras. O suporte a ONVIF é novo e incipiente na ZM, e não parece competir bem com os fluxos RTSP produzidos pela minha coleção de câmeras IP abaixo de US $ 100.