As câmeras IP são de qualidade variável, algumas se comportando de maneira irregular na minha experiência. Lidar com seus fluxos 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 obter fluxos de áudio / vídeo RTSP via CLI: http://www.live555.com/openRTSP/
Por exemplo, para salvar o áudio / vídeo RTSP de uma câmera em arquivos no formato QuickTime (AVI e MP4 também disponíveis), 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 o openRTSP use como padrão o UDP, o que pode reduzir um pouco o tráfego de rede. Você precisará jogar com as opções para encontrar a combinação que mais lhe convém.
Francamente, as próprias câmeras às vezes não são confiáveis ou são implementadas de maneira diferente - como fechar o soquete inesperadamente não é tão incomum.
Às vezes, o cliente openRTSP não captura essas falhas. Portanto, optei por codificar um controlador em Python usando o módulo 'subprocesses' para chamar e monitorar o stdout de cada instância do cliente openRTSP e também verificar se os arquivos continuam aumentando de tamanho.
Este parece ser um subproduto do segmento mais baixo da indústria de CFTV, atuando de maneira rápida e flexível com os padrões, sendo RTSP e ONVIF os dois mais frequentemente abusados.
Felizmente, você geralmente pode solucionar esses problemas. A menos que suas câmeras e controlador IP sejam projetados para funcionar bem juntos, use o ONVIF apenas para o gerenciamento único de descoberta e configurações.
Eu uso o openRTSP em alguns Raspberry Pi B + executando o Raspbian. Cada fluxo de 1280x1024 ocupa cerca de 8 a 10% do tempo da CPU, e eu executei com êxito até oito câmeras por RPi, gravando os arquivos no armazenamento NAS. Outro RPi processa arquivos concluídos com ffmpeg, pesquisando movimento e produzindo PNGs de índice desses quadros, para ajudar na detecção de invasões.
Há um esforço de código aberto chamado ZoneMinder que faz essa última parte, mas não consegui fazê-lo funcionar com minhas câmeras. O suporte ao ONVIF é novo e incipiente no ZM, e não parece funcionar bem com os fluxos RTSP irregulares produzidos pelo meu zoológico de câmeras IP abaixo de US $ 100.