Criando um stream de backup a partir de uma imagem
Um stream de vídeo de backup feito a partir de uma imagem estática serve como alternativa quando a sua fonte principal falha. A imagem pode mostrar uma mensagem como “Problemas técnicos, aguarde” ou outra informação de serviço. Essa abordagem também é útil para sistemas de alerta de emergência (EAS), para transmitir avisos visuais.
Crie um arquivo de vídeo a partir da imagem
Seção intitulada “Crie um arquivo de vídeo a partir da imagem”A codificação de vídeo consome muitos recursos. Para reduzir o uso de CPU, codifique a imagem em arquivos de vídeo curtos com antecedência, em vez de codificar em tempo real.
Para uma troca suave entre a fonte principal e a de backup, o codec de vídeo precisa ser igual ao do seu stream principal. Crie arquivos de vídeo para cada formato de codec que você usa (H.264, HEVC, etc.).
Verifique o formato do stream principal
Seção intitulada “Verifique o formato do stream principal”Use o ffprobe para analisar o seu stream principal:
ffprobe -hide_banner -v error -show_streams -show_format udp://239.255.1.1:1234Procure estes parâmetros importantes na saída:
- codec_name - codec de vídeo:
h264,hevcoumpeg2video - width e height - resolução do vídeo, por exemplo
1920e1080 - r_frame_rate - taxa de quadros, por exemplo
25/1significa 25 fps - pix_fmt - formato de pixel, normalmente
yuv420p - profile - perfil do codec, por exemplo
highpara H.264 - level - nível do codec, por exemplo
40significa nível 4.0
Para uma troca suave entre a fonte principal e a de backup, o seu vídeo de backup precisa ter os mesmos:
- Codec de vídeo
- Taxa de quadros
- Resolução
- Formato de pixel
Crie o arquivo de vídeo
Seção intitulada “Crie o arquivo de vídeo”Use o ffmpeg para converter uma imagem estática em um arquivo de vídeo que possa rodar em loop. Defina os parâmetros com base na análise do seu 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.tsOpções explicadas:
-loop 1- repete a imagem de entrada em loop-i image.png- arquivo de imagem de entrada (PNG, JPEG ou outro formato)-c:v libx264- codec de vídeo (uselibx265para HEVC,mpeg2videopara MPEG-2)-profile:v high- perfil do codec (igual aoprofiledo ffprobe)-level 40- nível do codec (igual aoleveldo ffprobe)-s 1920x1080- resolução (igual awidtheheightdo ffprobe)-r 25- taxa de quadros (igual aor_frame_ratedo ffprobe)-pix_fmt yuv420p- formato de pixel (igual aopix_fmtdo ffprobe)-t 10- duração em segundos/opt/ts/backup-h264.ts- arquivo de saída no formato MPEG-TS
Para streams HEVC, troque o 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.tsCrie o stream a partir do arquivo de vídeo
Seção intitulada “Crie o stream a partir do arquivo de vídeo”Execute o FFmpeg para rodar o arquivo de vídeo em loop e enviá-lo como um 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'Opções explicadas:
-stream_loop -1- repete o arquivo em loop infinito-re- lê a entrada na taxa de quadros nativa-i /opt/ts/backup-h264.ts- arquivo de vídeo de entrada-c copy- copia os streams sem recodificar-f mpegts- formato de saídapkt_size=1316- tamanho do pacote UDP para MPEG-TS
Executando o FFmpeg como serviço
Seção intitulada “Executando o FFmpeg como serviço”Para manter o FFmpeg rodando o tempo todo, configure ele como um serviço do systemd.
Crie o arquivo /etc/systemd/system/backup-h264.service com o seguinte conteúdo:
[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.targetSubstitua neste arquivo:
- Nome do arquivo: use um nome adequado no lugar de
backup-h264.servicese você tiver vários streams de backup - Description: mude para descrever o seu caso de uso
- Arquivo de entrada: troque
/opt/ts/backup-h264.tspelo caminho real do seu arquivo de vídeo - Porta UDP: troque
15001pela porta UDP que você quer usar. Se você tiver vários streams de backup, use portas diferentes.
Depois de criar o arquivo do serviço, ative e inicie o serviço:
systemctl enable backup-h264systemctl start backup-h264Configure o Astra
Seção intitulada “Configure o Astra”Nas configurações do canal, adicione uma segunda fonte de entrada com o endereço UDP:
udp://127.0.0.1:15001O Astra vai trocar automaticamente para esse stream de backup quando a fonte principal falhar.