1f8385e450
--- - Migrado base Docker de ubuntu:22.04 + Google Chrome para debian:bookworm-slim + Chromium - Dockerfile refatorado com multi-stage build (node:22-alpine builder + debian runtime) e single RUN layer para imagem menor - VNC unificado: removido novnc por stream, substituído por websockify global na porta 6080 com token-based routing - Implementado sistema de thumbnails por stream via ffmpeg (captura do HLS) com endpoint GET/POST e atualização no card - Autologin reescrito com detecção via Chrome DevTools Protocol: pula credenciais se já autenticado - Adicionado padrão desiredState (running/stopped) persistido no JSON, restaurado via restore-streams.sh ao reiniciar container - UI traduzida para inglês, formulário reorganizado com tooltips, seção avançada colapsável e GOP automático - Player simplificado: modos HLS e HTML unificados, removido modo m3u8 separado - Adicionado campo threads no ffmpeg; suporte a seccomp:unconfined no docker-compose ---
23 lines
736 B
Bash
23 lines
736 B
Bash
#!/bin/bash
|
|
# #19 — aguarda supervisord e restaura streams para o desiredState salvo
|
|
sleep 5
|
|
|
|
STREAMS_FILE="/app/data/streams.json"
|
|
[ -f "$STREAMS_FILE" ] || exit 0
|
|
|
|
node -e "
|
|
const fs = require('fs');
|
|
const { execSync } = require('child_process');
|
|
const streams = JSON.parse(fs.readFileSync('$STREAMS_FILE', 'utf-8'));
|
|
const ctl = (cmd) => { try { execSync('supervisorctl -c /etc/supervisor/supervisord.conf ' + cmd, { stdio: 'pipe' }); } catch {} };
|
|
|
|
for (const s of streams) {
|
|
if (s.desiredState === 'running') {
|
|
console.log('[restore] starting', s.id);
|
|
['xvfb','chromium','autologin','x11vnc','ffmpeg'].forEach(p => ctl('start ' + p + '-' + s.id));
|
|
} else {
|
|
console.log('[restore] keeping stopped', s.id);
|
|
}
|
|
}
|
|
"
|