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 doffmpeg).- Para X11:
wmctrlexdotool(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,
wmctrlexdotoolnã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
- Salve o script, por exemplo como
cameras_grid_responsive.sh. - Torne executável:
chmod +x cameras_grid_responsive.sh
- 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_HEIGHTpor-fspara abrir cada câmera fullscreen. - Áudio: remova
-anse quiser ouvir o áudio. - Mais câmeras: ajuste
ROWSeCOLSe 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.
