Visualizar câmeras IP ONVIF no Linux sem necessidade de instalar aplicativos
Já pensou em poder monitorar câmeras ONVIF no seu Linux sem precisar instalar aplicativos e deixar o seu sistema limpo e ainda poder gravar as imagens? Atualmente há opções de software que monitoram essas câmeras mas muitos deles são instáveis e não muito amigáveis com o usuário o que me fez buscar uma solução, digamos raiz.
Parte 7: Gerar script para acessar e gravar várias câmeras de uma vez
Que tal se fazermos um script com acesso à várias câmeras ao mesmo tempo com possibilidade de gravação?
Vou supor que você tenha três câmeras na sua casa: Garagem, Quintal e Entrada.
Para servir de exemplo, esses são os endereços RTSP com usuário e senha definidos de cada uma das suas câmeras:
Entrada rtsp://admin:1234@192.168.1.10/onvif1
Garagem rtsp://admin:1234@192.168.1.11/onvif1
Quintal rtsp://admin:1234@192.168.1.12/onvif1
Antes de colocarmos a mão na massa, vamos criar um diretório para salvar as suas gravações e os arquivos necessários. Vou chamá-lo de Monitoramento. Você pode escolher o nome que quiser, basta substituir o meu exemplo pelo seu nome.
Crie o diretório onde quiser no seu computador. Após isso, vá ao diretório criado, abra o seu editor de textos e vamos criar o primeiro arquivo. Copie o conteúdo abaixo e salve com o nome cameras.conf
# Formato: Nome_da_Câmera rtsp://usuario:senha@IP/onvif1
Entrada rtsp://admin:1234@192.168.1.10/onvif1
Garagem rtsp://admin:1234@192.168.1.11/onvif1
Quintal rtsp://admin:1234@192.168.1.12/onvif1
No mesmo editor de texto, apague todo o conteúdo e vamos criar o script com o nome menu_cameras.sh com o conteúdo abaixo:
Não se esqueça de tornar esse script como executável conforme explicado antes.
Vou supor que você tenha três câmeras na sua casa: Garagem, Quintal e Entrada.
Para servir de exemplo, esses são os endereços RTSP com usuário e senha definidos de cada uma das suas câmeras:
Entrada rtsp://admin:1234@192.168.1.10/onvif1
Garagem rtsp://admin:1234@192.168.1.11/onvif1
Quintal rtsp://admin:1234@192.168.1.12/onvif1
Antes de colocarmos a mão na massa, vamos criar um diretório para salvar as suas gravações e os arquivos necessários. Vou chamá-lo de Monitoramento. Você pode escolher o nome que quiser, basta substituir o meu exemplo pelo seu nome.
Crie o diretório onde quiser no seu computador. Após isso, vá ao diretório criado, abra o seu editor de textos e vamos criar o primeiro arquivo. Copie o conteúdo abaixo e salve com o nome cameras.conf
# Formato: Nome_da_Câmera rtsp://usuario:senha@IP/onvif1
Entrada rtsp://admin:1234@192.168.1.10/onvif1
Garagem rtsp://admin:1234@192.168.1.11/onvif1
Quintal rtsp://admin:1234@192.168.1.12/onvif1
No mesmo editor de texto, apague todo o conteúdo e vamos criar o script com o nome menu_cameras.sh com o conteúdo abaixo:
#!/bin/bash
CONFIG_FILE="cameras.conf"
PASTA_GRAVACAO="./gravacoes"
mkdir -p "$PASTA_GRAVACAO"
menu() {
echo
echo "===== MENU DE MONITORAMENTO ====="
echo "1) Ver câmeras (ao vivo)"
echo "2) Gravar uma câmera"
echo "3) Sair"
echo "================================="
echo
read -rp "Escolha uma opção: " opcao
}
carregar_cameras() {
i=1
unset nomes links
while IFS='|' read -r nome rtsp; do
if [[ "$nome" =~ ^#.* || -z "$nome" || -z "$rtsp" ]]; then
continue
fi
nomes[$i]="$nome"
links[$i]="$rtsp"
echo "$i) $nome"
((i++))
done < "$CONFIG_FILE"
}
ver_cameras() {
echo
echo "Abrindo câmeras ao vivo..."
carregar_cameras
for idx in "${!links[@]}"; do
echo "Abrindo ${nomes[$idx]}..."
ffplay -fflags nobuffer -flags low_delay -vf "drawtext=text='${nomes[$idx]}':fontsize=20:fontcolor=white:x=10:y=10" "${links[$idx]}" &
done
wait
}
gravar_camera() {
echo
echo "Escolha a câmera para gravar:"
carregar_cameras
echo
read -rp "Digite o número da câmera: " escolha
nome="${nomes[$escolha]}"
link="${links[$escolha]}"
if [ -z "$link" ]; then
echo "Câmera inválida. Tente novamente."
return
fi
arquivo="$PASTA_GRAVACAO/${nome}_$(date +%Y%m%d_%H%M%S).mp4"
echo "Gravando $nome em: $arquivo"
echo "Pressione CTRL+C para parar a gravação."
ffmpeg -i "$link" -vcodec copy -acodec copy "$arquivo"
}
# Loop principal do menu
while true; do
menu
case "$opcao" in
1) ver_cameras ;;
2) gravar_camera ;;
3) echo "Saindo..."; exit 0 ;;
*) echo "Opção inválida. Tente novamente." ;;
esac
done
Não se esqueça de tornar esse script como executável conforme explicado antes.
Morvan, Usuário GNU-Linux #433640. Seja Legal; seja Livre. Use GNU-Linux.