Como Criar uma Central de Monitoramento de Câmeras RTSP no Linux com Bash e FFplay

Se você quer transformar seu Debian ou Ubuntu em uma central de monitoramento profissional, este tutorial vai mostrar como abrir múltiplos streams RTSP simultaneamente, organizar janelas em grid responsivo e manter tudo widescreen e sem bordas.


1. Pré-requisitos

  • Linux com ambiente gráfico (X11 ou Wayland).
  • ffplay (parte do ffmpeg).
  • Para X11: wmctrl e xdotool (apenas se quiser posicionamento automático das janelas).
  • Conhecimento básico de terminal/bash.

Instalação de dependências no Debian/Ubuntu:

sudo apt update
sudo apt install ffmpeg wmctrl xdotool xdpyinfo

No Wayland, wmctrl e xdotool não funcionam para mover janelas, mas o dimensionamento ainda funciona.


2. Estrutura do Script

O objetivo do script:

  • Abrir até 9 câmeras RTSP simultaneamente.
  • Dimensionar cada janela automaticamente de acordo com a tela.
  • Widescreen 16:9.
  • Sem bordas (-noborder).
  • Grid 3×3 responsivo.

Exemplo de script:

#!/bin/bash
# cameras_grid_responsive.sh
# Central de monitoramento 3x3 com FFplay

# URLs das câmeras (usuários/senhas de exemplo)
URLS=(
"rtsp://user1:[email protected]:554/user=user1_password=pass1_channel=1_stream=0.sdp"
"rtsp://user2:[email protected]:554/user=user2_password=pass2_channel=2_stream=0.sdp"
"rtsp://user3:[email protected]:554/user=user3_password=pass3_channel=3_stream=0.sdp"
"rtsp://user4:[email protected]:554/user=user4_password=pass4_channel=4_stream=0.sdp"
"rtsp://user5:[email protected]:554/user=user5_password=pass5_channel=5_stream=0.sdp"
"rtsp://user6:[email protected]:554/user=user6_password=pass6_channel=6_stream=0.sdp"
"rtsp://user7:[email protected]:554/user=user7_password=pass7_channel=7_stream=0.sdp"
"rtsp://user8:[email protected]:554/user=user8_password=pass8_channel=8_stream=0.sdp"
"rtsp://user9:[email protected]:554/user=user9_password=pass9_channel=9_stream=0.sdp"
)

# Opções FFplay
FFPLAY_OPTS="-rtsp_transport tcp -an -loglevel quiet -nostats -vf setdar=16/9 -noborder"

# Detecta resolução da tela (X11)
SCREEN_WIDTH=$(xdpyinfo | grep 'dimensions:' | awk '{print $2}' | cut -d'x' -f1)
SCREEN_HEIGHT=$(xdpyinfo | grep 'dimensions:' | awk '{print $2}' | cut -d'x' -f2)

ROWS=3
COLS=3
X_GAP=5
Y_GAP=30

# Calcula tamanho da janela automaticamente
WIN_WIDTH=$(( (SCREEN_WIDTH - (COLS+1)*X_GAP) / COLS ))
WIN_HEIGHT=$(( (SCREEN_HEIGHT - (ROWS+1)*Y_GAP) / ROWS ))

PIDS=()
# Abre os streams
for i in "${!URLS[@]}"; do
    echo "Abrindo câmera $((i+1))..."
    ffplay $FFPLAY_OPTS -x $WIN_WIDTH -y $WIN_HEIGHT "${URLS[$i]}" &
    PIDS+=($!)
    sleep 0.5
done

# Organiza janelas automaticamente (X11)
for i in "${!PIDS[@]}"; do
    ROW=$(( i / COLS ))
    COL=$(( i % COLS ))
    X_POS=$(( X_GAP + COL * (WIN_WIDTH + X_GAP) ))
    Y_POS=$(( Y_GAP + ROW * (WIN_HEIGHT + Y_GAP) ))

    WINID=""
    for attempt in {1..10}; do
        WINID=$(xdotool search --pid ${PIDS[$i]} --onlyvisible | head -n 1)
        if [ ! -z "$WINID" ]; then
            wmctrl -i -r $WINID -e 0,$X_POS,$Y_POS,$WIN_WIDTH,$WIN_HEIGHT
            break
        fi
        sleep 0.5
    done
done

echo "Todas as câmeras abertas em grid 3x3 responsivo!"

3. Como usar

  1. Salve o script, por exemplo como cameras_grid_responsive.sh.
  2. Torne executável:
chmod +x cameras_grid_responsive.sh
  1. Execute:
./cameras_grid_responsive.sh
  • Cada câmera abrirá em widescreen 16:9 e sem bordas.
  • No X11, as janelas serão organizadas em grid automaticamente.
  • No Wayland, as janelas ficarão dimensionadas, mas você precisará organizá-las manualmente ou usar layouts nativos do compositor (GNOME Pop Shell, Sway, Hyprland, etc.).

4. Dicas avançadas

  • Fullscreen: substitua -x $WIN_WIDTH -y $WIN_HEIGHT por -fs para abrir cada câmera fullscreen.
  • Áudio: remova -an se quiser ouvir o áudio.
  • Mais câmeras: ajuste ROWS e COLS e adicione URLs.
  • Compositores Wayland: para grid automático, use Sway ou extensões tiling do GNOME.

5. Resultado

Você terá uma central de monitoramento Linux totalmente funcional, com:

  • Até 9 câmeras RTSP simultâneas.
  • Grid responsivo ajustado à resolução da tela.
  • Widescreen 16:9.
  • Sem bordas ou barras de ferramentas, estilo CFTV profissional.
Rolar para cima