As câmaras IP são de qualidade variável, algumas comportando-se de forma errática na minha experiência. Lidar com os seus fluxos RTSP requer uma dose de tolerância a falhas.
O projecto Live555 fornece uma implementação relativamente tolerante a falhas de clientes RTSP, openRTSP, para puxar fluxos de áudio/vídeo RTSP via CLI: http://www.live555.com/openRTSP/
Por exemplo, para guardar o áudio/vídeo RTSP de uma câmara para ficheiros em formato QuickTime (AVI e MP4 também disponíveis), um ficheiro 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
Estas 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 o OpenRTSP seja, em vez disso, o padrão do UDP, o que pode reduzir um pouco o tráfego de rede. Terá de jogar com as opções a fim de encontrar a combinação que mais lhe convém.
Francamente, as próprias câmaras são por vezes pouco fiáveis, ou apenas implementadas diferentemente -como fechar a tomada inesperadamente não é assim tão invulgar.
Por vezes, o cliente doRTSP aberto não apanha estas falhas. Assim, optei por codificar um controlador em Python utilizando o módulo ‘subprocessos’ para invocar e monitorizar o stdout de cada instância do cliente openRTSP, e também verificar se os ficheiros continuam a crescer em tamanho.
Isto parece ser um subproduto da indústria de CCTV de gama baixa jogando rápido e solto com padrões, sendo RTSP e ONVIF os dois mais frequentemente abusados.
Felizmente, é normalmente possível contornar estes problemas. A menos que as suas câmaras IP e o seu controlador sejam todos concebidos para jogarem bem em conjunto, utilize apenas ONVIF para uma única descoberta e gestão de configurações.
Utilizo o openRTSP em algumas Raspberry Pi B+ rodando Raspbian. Cada fluxo 1280x1024 ocupa cerca de 8-10% do tempo da CPU, e já executei com sucesso até oito câmaras por RPi, escrevendo os ficheiros para o armazenamento NAS. Outro RPi processa ficheiros completados com ffmpeg, procurando movimento e produzindo índices PNG desses frames, para ajudar na detecção de arrombamentos.
Existe um esforço de código aberto chamado ZoneMinder que faz esta última parte, mas não consegui pô-lo a funcionar com as minhas câmaras. O suporte ONVIF é novo e nascente em ZM, e não parece estar a lidar bem com os fluxos de RTSP mal vistos produzidos pelo meu gestor de câmaras IP com menos de 100 dólares.