Skip to content

Резервирование источников

У потока может быть несколько источников. Sapsan следит за активным источником и при его деградации автоматически переключается на следующий, а при восстановлении основного — возвращается на него. Эта логика называется LSI (Live Source Input).

Несколько входов

Входы перечисляются в порядке приоритета — первый в списке главный:

streams:
  tv1:
    inputs:
    - udp:
        host: 239.0.0.1
        port: 5000
    - tshttp:
        url: http://backup-origin.example.com/tv1/mpegts

Как происходит переключение

Ключевые свойства алгоритма, важные для эфира:

  • Источник становится активным только по готовности: он должен отдать параметры потока (MediaInfo) и первый ключевой кадр. До этого зрителям продолжает идти текущий источник.
  • Возврат на основной — без черного экрана: восстановившийся приоритетный вход проверяется в фоне, и переключение происходит только когда он отдал ключевой кадр.
  • Упавший вход переподключается с нарастающей задержкой (reconnect_initial_delayreconnect_delay_stepreconnect_max_delay); когда истекли все входы, ротация начинается с первого.
  • Источник, чей битрейт превысил max_bitrate, принудительно останавливается.
  • Отдельные таймауты на отсутствие видео и аудио: пропавший звук при живом видео тоже считается деградацией.

Политика переключения

Секция lsi задает политику для потока в целом; source_options у конкретного входа переопределяет ее:

streams:
  tv1:
    inputs:
    - udp: {host: 239.0.0.1, port: 5000}
    - udp:
        host: 239.0.0.2
        port: 5000
      source_options:
        source_timeout: 10
    lsi:
      source_timeout: 5
      video_timeout: 3
      audio_timeout: 3

Таймауты задаются в секундах. Основные параметры (lsi и/или source_options):

Параметр Описание
source_timeout, video_timeout, audio_timeout таймауты отсутствия данных/видео/аудио
max_bitrate ограничение битрейта источника
reconnect_initial_delay, reconnect_delay_step, reconnect_max_delay политика переподключения
retry_limit, max_retry_timeout ограничение числа попыток
recheck_secondary_inputs_interval как часто проверять, не ожил ли более приоритетный вход
allow_if, deny_if (только source_options) включать/выключать вход по внешнему файлу-флагу

allow_if/deny_if позволяют управлять входами извне без правки конфига: вход используется, только пока файл-флаг разрешает.

Файл-заставка (backup)

Если все источники умерли, вместо черного экрана показывается файл (см. как подготовить файл):

streams:
  tv1:
    inputs:
    - udp: {host: 239.0.0.1, port: 5000}
    lsi:
      backup:
        file: /storage/technical-difficulties.mp4
        timeout: 5

Заставка включается через timeout секунд после падения входов (если входов нет вообще — сразу) и имеет собственные audio_timeout/video_timeout.

Наблюдаемость

По каждому потоку доступны: время на основном и на резервных входах, время без данных, число ретраев, валидность резервных входов, а также детектор расхождения параметров — если резервный вход отдает другие параметры видео (и бесшовное переключение невозможно), это видно заранее, до аварии. По каждому входу — времена открытия/подключения/старта и последняя ошибка. Смотрите мониторинг.

Что дальше