Saltar para o conteúdo

Aplicando RTSP na prática

junho 23, 2026

Há algumas semanas, comprei uma câmera de segurança IP para a minha casa (acho que não preciso explicar o porquê). A instalei e configurei na rede local, tudo funcionando corretamente.

Decidi que queria deixar salvo as gravações mais recentes, então assinei um serviço que faria essa gravação, mas percebi que o plano apenas deixa salvo alguns momenos que ‘houveram movimentação’, como pessoas passando, sons mais altos que o dispositivo capturou, etc (o que faz sentido para a fabricante, quem vai querer pagar por tanto espaço na nuvem).

Eu poderia comprar um cartão de memória e instalar na câmera, mas eu não teria paciência para ficar salvando esses registros em outro HD ou na nuvem de forma manual periódicamente(sem falar da segurança de roubarem a câmera e o cartão ir junto). Eu sabia que tinha como acessar as imagens via rede, mas não fazia ideia de como fazer isso.

Pesquisando um pouco e conversando com o famoso GPT, descobri o protolo RTSP (Real-Time Streaming Protocol), usado para transmitir áudio e vídeo em tempo real. Olhei no site de onde havia comprado a câmera e ela possuia suporte ao protocolo. Fui tirar a prova real de que era possível capturar o vídeo e som em tempo real, e usando o VLC (um Media Player), usei uma url parecida com essa para realizar o uso do protocolo.

landscape
Implementação do RTSP

Obs: A URL que usei na época em que testei não foi exatamente essa, mas o ponto é que eu havia conseguido acompanhar em tempo real as imagens da minha camera.

A primeira barreira (conseguir capturar as gravações da câmera) havia sido quebrada. Pesquisando mais um pouco, eu descobri que havia como determinar a duração que cada vídeo que eu salvava da câmera teria, o que iria ajudar no futuro, caso eu precisasse buscar pela gravação que aconteceu às 14h17, por exemplo.

Porém, não serviria de nada armazenar esses vídeos de forma local em meu Homelab por alguns motivos, sendo eles a saúde do HD que uso atualmente (um pouco duvidoso) e pela disponibilidade, já que eu não conseguiria acessar as gravações se não estivesse em minha casa. Então decidi que iria armazenar esses vídeos na nuvem

O provedor (CSP) que escolhi foi a AWS, com o serviço S3 (armazenamento de objetos). Escolhi eles pois já tenho uma certa experiência com as suas ferramentas e o seu painel Web. Cada vídeo seria salvo dentro de um mesmo Bucket, deixando centralizado todos os registros.

Após baixar e configurar a CLI da Aws, realizei alguns testes e o diretório local com os vídeos e o Bucket na nuvem já estavam ficando sincronizados.

landscape
Sincronizando S3 e diretório local

Tudo funcionando, mas um ‘último’ problema apareceu: O S3 cobra por Gb armazenado em seus buckets, não é um serviço grátis. Eu precisei definir quantas seriam as ‘últimas horas’ que ficariam salvas na AWS, até por que seria muito caro armazenar a gravação de um mês inteiro.

landscape
Apagando vídeos antigos

Essa linha é executada localmente, procurando dentro da pasta aonde os vídeos estão sendo salvos, apaga os arquivos mais antigos (de acordo com o valor passado na variável). Como a sincronização é feita entre máquina local e nuvem, esses vídeos também são excluídos na S3. Em meu caso, deixei para armazenar somente as últimas 48 horas de gravação.

Agora, o último detalhe que precisei fazer (esse não seria um ’erro’), é a automatização disso. Eu precisei ‘automatizar’ algumas etapas desse processo:

  • A execução do comando que consome a gravação da câmera usando o RTSP
  • A exclusão dos vídeos das gravações mais antigas
  • A sincronização com a nuvem, para salvar os vídeos que foram capturados

Para isso, eu decidi usar os Systemd unit files. para saber mais, clique aqui, não vou explicar sobre esse conceito nesse post. Resumindo, eu adotei 2 Services nesse caso: Um para a captura dos vídeos via RTSP, e o outro para o gerenciamento dos vídeos já gravados (deletar os antigos e sincronizar na nuvem).

Nota

Todo o código que eu utilizei para essa automação eu deixei no Github. Acesse por aqui

landscape
Apagando vídeos antigos

Esses são alguns dos arquivos que deixei no GitHub. record.sh contém o código para gravação, enquanto o camera_record.service dita as regras e configurações para a execução do script. O arquivo s3_sync.sh e camera_sync.service seguem a mesma lógica, mas com o acréscimo de um arquivo: camera_sync.timer.

O script de sincronização, diferente do de gravação, não deve ficar rodando a todo momento, mas sim de forma periódica. Para esse caso, um unit file do tipo timer deve ser configurado, para que essa configuração seja feito. Confira como o arquivo camera_sync.timer está atualmente:

[Unit]
Description=Run S3 Sync every 30 minutes

[Timer]
OnBootSec=5min
OnUnitActiveSec=30min
Unit=camera_sync.service

[Install]
WantedBy=timers.target

Deixei os services em execução em meu Homelab por algum tempo, e todo o fluxo funcionou! Veja os objetos em meu S3:

Nota

O print foi tirado na época em que essa configuração foi feita

landscape
Arquivos salvos na AWS S3

Esse post não teve o foco muito técnico, foi mais a documentação do problema que eu estava passando, e como fiz para resolver. Caso queira ver o código utilizado, acesse o repositório em meu GitHub

Última modificação