Бесплатно и не сильно сложно.
(Этот метод устарел. лучшее решение - TSduck)
Переключатель UDP mpegTS собран на Multicat, о котором я писал в предыдущем посте.
Решение не очень элегантное на мой взгляд, но достаточно хорошо справляется с задачей.
Автоматическое переключение происходит при обрыве одного из потоков, а также вручную. Отслеживание состояния и переключение между потоками выполняется на удалённом сервере с Zabbix.
Работает следующим образом:
2 потока: основной и резервный, с идентичными PID-ами и настройками кодирования (различающимися только мультикаст адресами) записываются в RAM диск в разные папки, 1 и 2.
Записывается по 1 чанку - 5 секунд для каждого канала используя при этом ~10 Мб опреативки для двух стримов по 5 Мбит.
Запускается скрипт воспроизведения, содержащий бесконечное циклическое переключение задачи воспроизведения из папки 1 и 2. При этом есть задержка воспроизведения, минимальная для multicat - 250 мсек.
Например, при обрыве одного из входящих мультикастов временно прекращается запись файла, например 1-го. Если воспроизводился TS именно из 1-й папки, то через 250 мсек воспроизведение прервётся из-за окончания файла, и процесс воспроизведения завершится. По скрипту сразу запустится вспроизведение 2-го TS. И теперь, если первый фид снова прервётся, воспроизведение продолжится со 2-го TS файла.
Если прерывается 2-й фид, воспроизведение автоматически перебрасывается на 1-й TS и так до бесконечности.
В момент переключения создаётся промежуточный файл с информацией о том, какой ts сейчас вещает и отправляется SNMP trap. При ручном переключении текущий воспроизводящий multicat закрывается и запускается другой TS. Ну и само собой отправляется SNMP trap оповещение в тот же Zabbix о переключении, чтобы быть в курсе дела, а так-же добавить скрипт переключения из среды Zabbix для внешнего управления ченджовером.
При этом мониторинг не уловил момента - отсутствия потока, но показал MLR и СС. Переключение происходит очень быстро. Загрузка i3-3220 - 2-5 %. Теоретически, можно создать столько ченджоверов, сколько позволит сетевой интерфейс...
Это не прямой проброс мультикаста на прямую на выход, но у этого способа есть не раскрытый потенциал ввиде бесшовного перехода между источниками, в случае если натравить некоторый сервис обнаруживающий в потоке ключевой кадр, и при поступлении запроса переключаться именно на ключевой кадр. В этом случае при переходе на другой источник рассыпания картинки очень маловероятны.
(Этот метод устарел. лучшее решение - TSduck)
Переключатель UDP mpegTS собран на Multicat, о котором я писал в предыдущем посте.
Решение не очень элегантное на мой взгляд, но достаточно хорошо справляется с задачей.
Автоматическое переключение происходит при обрыве одного из потоков, а также вручную. Отслеживание состояния и переключение между потоками выполняется на удалённом сервере с Zabbix.
Source scripts are at bottom of page...
Работает следующим образом:
2 потока: основной и резервный, с идентичными PID-ами и настройками кодирования (различающимися только мультикаст адресами) записываются в RAM диск в разные папки, 1 и 2.
Записывается по 1 чанку - 5 секунд для каждого канала используя при этом ~10 Мб опреативки для двух стримов по 5 Мбит.
Запускается скрипт воспроизведения, содержащий бесконечное циклическое переключение задачи воспроизведения из папки 1 и 2. При этом есть задержка воспроизведения, минимальная для multicat - 250 мсек.
Например, при обрыве одного из входящих мультикастов временно прекращается запись файла, например 1-го. Если воспроизводился TS именно из 1-й папки, то через 250 мсек воспроизведение прервётся из-за окончания файла, и процесс воспроизведения завершится. По скрипту сразу запустится вспроизведение 2-го TS. И теперь, если первый фид снова прервётся, воспроизведение продолжится со 2-го TS файла.
Если прерывается 2-й фид, воспроизведение автоматически перебрасывается на 1-й TS и так до бесконечности.
В момент переключения создаётся промежуточный файл с информацией о том, какой ts сейчас вещает и отправляется SNMP trap. При ручном переключении текущий воспроизводящий multicat закрывается и запускается другой TS. Ну и само собой отправляется SNMP trap оповещение в тот же Zabbix о переключении, чтобы быть в курсе дела, а так-же добавить скрипт переключения из среды Zabbix для внешнего управления ченджовером.
На картинке: момент переключения между потоками.
При этом мониторинг не уловил момента - отсутствия потока, но показал MLR и СС. Переключение происходит очень быстро. Загрузка i3-3220 - 2-5 %. Теоретически, можно создать столько ченджоверов, сколько позволит сетевой интерфейс...
Это не прямой проброс мультикаста на прямую на выход, но у этого способа есть не раскрытый потенциал ввиде бесшовного перехода между источниками, в случае если натравить некоторый сервис обнаруживающий в потоке ключевой кадр, и при поступлении запроса переключаться именно на ключевой кадр. В этом случае при переходе на другой источник рассыпания картинки очень маловероятны.
Набор скриптов для создания Fail Over.
Читайте Readme, внесите нужные изменения в config.ini и запускайте.
https://cloud.mail.ru/public/2nzv/3aEXQ2Zv7
Исходники и доп. информация multicat на Github:
https://code.videolan.org/videolan/multicat