четверг, 28 ноября 2019 г.

multicast udp mpegts - timeshift / дилэй для мультикаста TV

Timeshift for mpegts multicast


Для чего может понадобиться таймшифт / дилэй мультикаста на телевидении:

(Этот метод устарел. лучшее решение - TSduck)
  • Создание региональных версий для телеканала  (запись мультикаста с отложенным воспроизведением).
  • Создание резервного мультикаст потока на случай аварии плейаут сервера.
  • DVR - создание копии мультикаста и его анализ.
Source scripts at the bottom of page...

Сложно было найти решение, особенно бесплатное. Было много тестов  на ffmpeg, но они не увенчались успехом. Всему виной изменение характеристик потока на выходе.
Иными словами нужно было просто записать мультикаст UDP поток и воспроизвести его через время, но в другую сетевую карту или под другим  мультикаст адресом, не меняя в потоке ничего, то есть, воспроизвести ASIS. FFmpeg так не может.
На самом деле всё оказалось очень просто. Много времени ушло на поиски того что нужно.
Это Multicat! От VideoLAN... Очень стабильный софт! Пишет, рестримит мультикасты от SD вплоть до UHD, почти не потребляя вычислительной мощности. Только под Linux.

На картинке выход стрима после multicat. FHD


Для одного из наших проектов потребовалось организовать резерв канала на случай аварии вещательного сервера. Необходимо было иметь хоть что-то на подмену, например, заглушку на время восстановительных работ. Было решено сделать циклическую запись последних суток вещания канала и создание вчерашней версии телеканала.
Настроили софт на запись канала на 24 часа. Создаются чанки по 60 минут. Все чанки, что старше 24 часов, удаляются скриптом. На самом деле необходимо наличие чанков на время задержки + 1 минута - чтобы не удалялся чанк который предназначен для воспроизведения.
Далее воспроизводим записанные чанки с задержкой 24 часа в новый мультикаст поток в ту же сетевую карту.
Тут же возникает вопрос о подмене основного потока с плейаута на записанный. Это делается разными способами, и на спец железках / коммутаторах или на различном софте. Multicat тоже может сделать такое. Уровень, конечно, элементарный, но на случай аварии спасает оперативно. Об этом в следующем посте.

Надо дополнить, что на основе этого же софта были изготовлены аварийные заглушки для множетсва наших каналов. Правда за последний час, но всё же. Не обошлось без решающего звена Zabbix.

Этот способ хорошо подходит для экстренной подмены одного из "упавших" серверов вещания. Другими словами по задумке существует один единственный сервер для горячей подмены мультикаста любого плейаут сервера.

Скажем так, у нас много плейаутов, у которых нет резерва по договору в связи с ограничением бюджета клиента. Для всех таких подобных плейаутов даже на время профилакики требуется оперативная подмена этого же материала за последний час, чтобы не составлять чёрное поле в эфире на время профилактических работ с севером.
Создаём сервер с multicat, который постоянно пишет последний час наших безрезервных плейаутов. Каждый TS складывается в свою папку с присвоенным названием канала. Таким образом, у нас на сервере замещения мультикастов собираются записи всех плейаутов за последний час.
Далее, в момент аварии (тогда, когда мультикаст не идёт с сервера N) нужно запустить скрипт изменения сетевого адреса на подменном сервере идентичный серверу N для того, чтобы рассылка мультиката шла именно с такого же адреса что у упавшего сервера. После изменения адреса сетевой карты можно запустить воспроизведение записи канала N за последний час и приступить к восстановительным работам на сервере N.
Есть некоторый нюанс. При изменении сетевого адреса карты на подменном сервере скрипты, отвечающие за запись каналов, необходимо перезапустить.
Автоматизируется это с помощью Zabbix.
Клиент Zabbix установленный на плейаут N отправляет информацию о том, что с сервера N не выходит мултикаст. Например, при выходе из строя блока питания, Zabbix клиент перестаёт отправлять данные о мультикасте на сетевом интерфейсе плейаута N на сервер Zabbix. Zabbix сервер принимает логическое решение на основании собранных данных, что мультикаст в сети пропал и отправляет команду запустить скрипт воспроизведения канала N на подменном сервере. Этот процесс надо хорошо отлаживать. Лучше пристроить систему мониторинга мультикастов, которая будет оповещать о наличии и состоянии мультикаст потока для повышения надёжности.

Набор скриптов для запуска timeshift
https://cloud.mail.ru/public/4uxm/54tSR2hMN

convert colors to midi note for midi controllers

I recently (2 years ago) designed and built a simple MIDI controller for my intercom system using an Arduino Leonardo, USB hub, sound card, ...