Eu tenho algumas câmeras IP que produzem um fluxo RTSP (h264 mpeg4).
Acessando o URL localmente via VLC: rtsp: //192.168.0.21: 554 / mpeg4
Posso transmitir a câmera e despejar em disco (na área de trabalho). No entanto, eu gostaria de armazenar esses arquivos no meu NAS (FreeNAS). Eu estava procurando maneiras de capturar o fluxo RTSP e despejá-los em disco, mas não consigo encontrar nada.
É possível capturar o fluxo no FreeBSD ou Linux (RaspberryPi) e despejar o conteúdo transmitido em um disco local para o Linux ou FreeBSD - de preferência a cada 30 minutos?
EDIT: O NAS é decapitado (HP N55L ou algo assim) e o RaspberryPi também.
Eu já procurei no ZoneMinder, mas preciso de algo pequeno. Eu esperava que talvez estivesse usando o Motion para detectar movimento no fluxo, mas isso acontecerá mais tarde.
Respostas:
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:
Essas opções significam:
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.
fonte
Eu apenas pensei em adicionar meus dois centavos e complementar a resposta de BjornR.
Em vez de executar uma tarefa cron para eliminar periodicamente o processo VLC, pode-se dizer ao VLC para executar por um período de tempo especificado e fechar depois.
Este é o comando que eu corro na minha caixa:
Isso executa o VLC pelo período especificado e sai mais tarde. O parâmetro vlc: // quit é necessário, pois o VLC para de gravar e fica aberto. Este comando precisa ser colocado dentro de um loop.
O único problema que encontrei até agora é que ele pode perder alguns segundos toda vez que uma nova gravação é iniciada.
fonte
Se eu sigo sua pergunta corretamente, por que você não tenta o seguinte comando em um sistema Linux (RPi):
Isso deve salvar o vídeo em pedaços de 300 segundos. (Observe que a duração do clipe dependerá das taxas de quadros de entrada e saída)
fonte
O VLC parece um candidato ideal para processar seu fluxo. Os métodos básicos para capturar um fluxo são descritos no site da Videolan. Gravei com êxito a saída da minha câmera de rede D-Link DCS-5222 usando o seguinte comando:
No seu caso, isso pode funcionar para salvar a saída localmente:
Eu sugeriria executar um script que encerre esse processo vlc e iniciar uma nova instância a cada 30 minutos, pois não tenho certeza de que o VLC possa fazer isso.
Quanto ao armazenamento em um NAS, basta montá-lo no seu sistema de arquivos local.
fonte