Резервирование источников¶
У потока может быть несколько источников. 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_delay→reconnect_delay_step→reconnect_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.
Наблюдаемость¶
По каждому потоку доступны: время на основном и на резервных входах, время без данных, число ретраев, валидность резервных входов, а также детектор расхождения параметров — если резервный вход отдает другие параметры видео (и бесшовное переключение невозможно), это видно заранее, до аварии. По каждому входу — времена открытия/подключения/старта и последняя ошибка. Смотрите мониторинг.