Создание резервного потока из изображения
Резервный видеопоток из статического изображения обеспечивает подстраховку на случай сбоя основного источника. На изображении можно разместить сообщение вроде «Технические неполадки, пожалуйста, подождите» или другую служебную информацию. Такой подход также полезен для систем экстренного оповещения (EAS) для передачи визуальных предупреждений.
Создание видеофайла из изображения
Заголовок раздела «Создание видеофайла из изображения»Видеокодирование — ресурсоёмкая задача. Чтобы снизить нагрузку на процессор, заранее закодируйте изображение в короткие видеофайлы, а не кодируйте в реальном времени.
Для плавного переключения между основным и резервным источником видеокодек должен совпадать с основным потоком. Создайте видеофайлы для каждого используемого формата кодека (H.264, HEVC и т.д.).
Определите параметры основного потока
Заголовок раздела «Определите параметры основного потока»Используйте ffprobe для анализа основного потока:
ffprobe -hide_banner -v error -show_streams -show_format udp://239.255.1.1:1234В выводе обратите внимание на следующие параметры:
- codec_name — видеокодек:
h264,hevcилиmpeg2video - width и height — разрешение видео, например
1920и1080 - r_frame_rate — частота кадров, например
25/1означает 25 кадров/с - pix_fmt — формат пикселей, обычно
yuv420p - profile — профиль кодека, например
highдля H.264 - level — уровень кодека, например
40означает уровень 4.0
Для плавного переключения между основным и резервным источником резервное видео должно совпадать по:
- Видеокодеку
- Частоте кадров
- Разрешению
- Формату пикселей
Создание видеофайла
Заголовок раздела «Создание видеофайла»Используйте ffmpeg, чтобы преобразовать статическое изображение в зацикленный видеофайл. Установите параметры на основе анализа основного потока:
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.tsПояснения к опциям:
-loop 1— зацикливает входное изображение-i image.png— входной файл изображения (PNG, JPEG или другой формат)-c:v libx264— видеокодек (используйтеlibx265для HEVC,mpeg2videoдля MPEG-2)-profile:v high— профиль кодека (совпадает сprofileиз ffprobe)-level 40— уровень кодека (совпадает сlevelиз ffprobe)-s 1920x1080— разрешение (совпадает сwidthиheightиз ffprobe)-r 25— частота кадров (совпадает сr_frame_rateиз ffprobe)-pix_fmt yuv420p— формат пикселей (совпадает сpix_fmtиз ffprobe)-t 10— длительность в секундах/opt/ts/backup-h264.ts— выходной файл в формате MPEG-TS
Для потоков HEVC смените кодировщик:
ffmpeg -loop 1 -i image.png -c:v libx265 -s 1920x1080 -r 25 -pix_fmt yuv420p -t 10 /opt/ts/backup-hevc.tsДля потоков 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.tsСоздание потока из видеофайла
Заголовок раздела «Создание потока из видеофайла»Запустите FFmpeg для зацикливания видеофайла и передачи его как 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'Пояснения к опциям:
-stream_loop -1— бесконечно зацикливает файл-re— воспроизводит входной файл с исходной скоростью кадров-i /opt/ts/backup-h264.ts— входной видеофайл-c copy— копирует потоки без перекодирования-f mpegts— выходной форматpkt_size=1316— размер UDP-пакета для MPEG-TS
Запуск FFmpeg как сервиса
Заголовок раздела «Запуск FFmpeg как сервиса»Чтобы FFmpeg работал непрерывно, настройте его как сервис systemd.
Создайте файл /etc/systemd/system/backup-h264.service со следующим содержимым:
[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.targetВ этом файле замените:
- File Name: используйте подходящее имя вместо
backup-h264.service, если у вас несколько резервных потоков - Description: измените описание под ваш случай
- Input File: укажите путь к вашему видеофайлу вместо
/opt/ts/backup-h264.ts - UDP Port: замените
15001на нужный UDP-порт. Для нескольких резервных потоков используйте разные порты.
После создания файла сервиса включите и запустите сервис:
systemctl enable backup-h264systemctl start backup-h264Настройка Astra
Заголовок раздела «Настройка Astra»В настройках канала добавьте второй источник с UDP-адресом:
udp://127.0.0.1:15001Astra автоматически переключится на этот резервный поток при сбое основного источника.