Aggiunge overlay server-side burn-in e stabilizza diretta live.

Tabellone, badge e brand sono ricodificati nel flusso _air via OverlayRelay;
sync punteggio HTTP, volume condiviso rails/sidekiq, qualità 720p migliorata
e badge CONNECTING in ripresa da pausa.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-06-03 23:55:17 +02:00
parent fd225fbadd
commit ab9cb02083
58 changed files with 2423 additions and 242 deletions

View File

@@ -1,13 +1,33 @@
#!/bin/sh
# Generate offline slate MP4 for MediaMTX alwaysAvailable (pausa / attesa segnale)
# Slate MP4 per MediaMTX alwaysAvailable (pausa / attesa / perdita rete).
# H.264 1280x720 30fps + AAC 48kHz mono (allineato all'app Android).
set -e
OUT_DIR="$(dirname "$0")/../slates"
ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
OUT_DIR="$(cd "$(dirname "$0")/../slates" && pwd)"
BRAND_IMAGE="${BRAND_IMAGE:-$ROOT/brand/CopertinaCanale_6.png}"
OUT="$OUT_DIR/offline.mp4"
if [ ! -f "$BRAND_IMAGE" ]; then
echo "Manca immagine brand: $BRAND_IMAGE" >&2
exit 1
fi
mkdir -p "$OUT_DIR"
docker run --rm -v "$OUT_DIR:/out" linuxserver/ffmpeg:latest \
-f lavfi -i color=c=0x1a1a1a:s=1280x720:r=30 \
-vf "drawtext=text='Match Live TV':fontcolor=white:fontsize=48:x=(w-text_w)/2:y=(h-text_h)/2-40,drawtext=text='Trasmissione in pausa':fontcolor=0xaaaaaa:fontsize=28:x=(w-text_w)/2:y=(h-text_h)/2+20" \
-f lavfi -i sine=frequency=440:sample_rate=48000 \
-t 30 -c:v libx264 -pix_fmt yuv420p -g 30 -preset fast \
-c:a aac -b:a 128k -y /out/offline.mp4
echo "Created $OUT"
BRAND_DIR="$(cd "$(dirname "$BRAND_IMAGE")" && pwd)"
BRAND_FILE="$(basename "$BRAND_IMAGE")"
docker run --rm \
-v "$OUT_DIR:/out" \
-v "$BRAND_DIR:/brand:ro" \
linuxserver/ffmpeg:latest \
-loop 1 -framerate 30 -i "/brand/$BRAND_FILE" \
-f lavfi -i anullsrc=r=48000:cl=mono \
-filter:v "scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2:color=0x0a0a0e" \
-map 0:v -map 1:a \
-t 30 -c:v libx264 -pix_fmt yuv420p -profile:v baseline -level 3.1 \
-x264-params "keyint=30:min-keyint=30:scenecut=0:bframes=0" \
-g 30 -keyint_min 30 -force_key_frames "expr:gte(t,n_forced*1)" \
-preset fast \
-c:a aac -b:a 128k -ac 1 -shortest -y /out/offline.mp4
echo "Created $OUT from $BRAND_IMAGE"