Crear un Stream de Respaldo desde una Imagen
Un stream de video de respaldo a partir de una imagen estática sirve como alternativa cuando tu fuente principal falla. La imagen puede mostrar un mensaje como “Dificultades técnicas, por favor espere” u otra información de servicio. Este método también es útil para Sistemas de Alerta de Emergencia (EAS) para transmitir advertencias visuales.
Crear Archivo de Video desde una Imagen
Sección titulada «Crear Archivo de Video desde una Imagen»La codificación de video consume muchos recursos. Para reducir el uso de CPU, es mejor pre-codificar la imagen en archivos de video cortos en vez de codificar en tiempo real.
Para cambiar entre la fuente principal y la de respaldo sin problemas, el códec de video debe coincidir con el de tu stream principal. Crea archivos de video para cada formato de códec que utilices (H.264, HEVC, etc.).
Verificar el Formato del Stream Principal
Sección titulada «Verificar el Formato del Stream Principal»Usa ffprobe para analizar tu stream principal:
ffprobe -hide_banner -v error -show_streams -show_format udp://239.255.1.1:1234Busca estos parámetros importantes en la salida:
- codec_name — códec de video:
h264,hevcompeg2video - width y height — resolución de video, por ejemplo
1920y1080 - r_frame_rate — tasa de cuadros, por ejemplo
25/1significa 25 fps - pix_fmt — formato de píxel, normalmente
yuv420p - profile — perfil del códec, por ejemplo
highpara H.264 - level — nivel del códec, por ejemplo
40significa nivel 4.0
Para un cambio fluido entre la fuente principal y la de respaldo, tu video de respaldo debe coincidir en:
- Códec de video
- Tasa de cuadros
- Resolución
- Formato de píxel
Crear Archivo de Video
Sección titulada «Crear Archivo de Video»Usa ffmpeg para convertir una imagen estática en un archivo de video que se pueda repetir en bucle. Ajusta los parámetros según el análisis de tu stream principal:
ffmpeg -loop 1 -i image.png -c:v libx264 -profile:v high -level 40 -s 1920x1080 -r 25 -pix_fmt yuv420p -t 10 /opt/ts/backup-h264.tsOpciones explicadas:
-loop 1— repite la imagen de entrada-i image.png— archivo de imagen de entrada (PNG, JPEG u otro formato)-c:v libx264— códec de video (usalibx265para HEVC,mpeg2videopara MPEG-2)-profile:v high— perfil del códec (igual queprofilede ffprobe)-level 40— nivel del códec (igual quelevelde ffprobe)-s 1920x1080— resolución (igual quewidthyheightde ffprobe)-r 25— tasa de cuadros (igual quer_frame_ratede ffprobe)-pix_fmt yuv420p— formato de píxel (igual quepix_fmtde ffprobe)-t 10— duración en segundos/opt/ts/backup-h264.ts— archivo de salida en formato MPEG-TS
Para streams HEVC, cambia el codificador:
ffmpeg -loop 1 -i image.png -c:v libx265 -s 1920x1080 -r 25 -pix_fmt yuv420p -t 10 /opt/ts/backup-hevc.tsPara streams MPEG-2:
ffmpeg -loop 1 -i image.png -c:v mpeg2video -b:v 5M -s 1920x1080 -r 25 -pix_fmt yuv420p -t 10 /opt/ts/backup-mpeg2.tsCrear un Stream desde el Archivo de Video
Sección titulada «Crear un Stream desde el Archivo de Video»Ejecuta FFmpeg para repetir el archivo de video y enviarlo como un stream UDP:
ffmpeg -stream_loop -1 -re -i /opt/ts/backup-h264.ts -c copy -f mpegts 'udp://127.0.0.1:15001?pkt_size=1316'Opciones explicadas:
-stream_loop -1— repite el archivo infinitamente-re— lee la entrada a la velocidad de cuadros original-i /opt/ts/backup-h264.ts— archivo de video de entrada-c copy— copia los streams sin recodificar-f mpegts— formato de salidapkt_size=1316— tamaño de paquete UDP para MPEG-TS
Ejecutar FFmpeg como un Servicio
Sección titulada «Ejecutar FFmpeg como un Servicio»Para que FFmpeg funcione de forma continua, configúralo como un servicio systemd.
Crea el archivo /etc/systemd/system/backup-h264.service con el siguiente contenido:
[Unit]Description=Backup Video Stream from ImageAfter=network-online.targetWants=network-online.target
[Service]Type=simpleExecStart=/usr/bin/ffmpeg \ -hide_banner -loglevel warning -nostats \ -stream_loop -1 \ -re \ -i /opt/ts/backup-h264.ts \ -c copy \ -f mpegts 'udp://127.0.0.1:15001?pkt_size=1316'
Restart=alwaysRestartSec=5
StandardOutput=nullStandardError=journal
[Install]WantedBy=multi-user.targetReemplaza en este archivo:
- File Name: usa un nombre relevante en vez de
backup-h264.servicesi tienes varios streams de respaldo - Description: cámbialo para que describa tu caso de uso
- Input File: reemplaza
/opt/ts/backup-h264.tspor la ruta real de tu archivo de video - UDP Port: cambia
15001por el puerto UDP que quieras usar. Si tienes varios streams de respaldo, usa puertos diferentes.
Después de crear el archivo de servicio, habilítalo e inícialo:
systemctl enable backup-h264systemctl start backup-h264Configurar Astra
Sección titulada «Configurar Astra»En la configuración del canal, añade una segunda fuente de entrada con la dirección UDP:
udp://127.0.0.1:15001Astra cambiará automáticamente a este stream de respaldo cuando la fuente principal falle.