Skip to content

Переключение источников

По разным причинам видео может поступать нестабильно или вовсе стать недоступным. Чтобы избежать ситуации, когда у потребителей отсутствует видео, необходимо подготовить альтернативные источники, чтобы вещать их при отсутствии основного источника до тех пор, пока он не восстановится. Flussonic умеет автоматически плавно переключать источники.

Содержание:

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

Чтобы обеспечить резервирование источников, в настройках потока следует перечислить несколько разных источников видео, и тогда Flussonic Media Server будет переключаться между ними, если выбранный ранее источник стал недоступен. Можно использовать как видео потоки, так и файлы.

Под термином "недоступен" подразумевается либо немедленное отключение, либо отсутствие кадров в течение 60 секунд (180 секунд для источников по hls://, playlist://, timeshift://).

Как работает переключение

Если пришлось переключиться на второй источник, то Flussonic Media Server будет периодически перепроверять первый источник на работоспособность.

Note

Если от пропавшего источника снова приходят кадры, Flussonic дождется ключевого кадра и только тогда переключится на этот источник. Этим самым мы обеспечиваем качественное переключение без задержек. Поэтому даже при переключении на видео с большим GOP, например, приходящее по HLS, Flussonic обеспечит качественное переключение.

Warning

Резервные источники ДОЛЖНЫ иметь идентичный набор аудио и видео дорожек, как у источника, если вы хотите получить лучший пользовательский опыт для ваших зрителей.

Пример

Поток example_stream имеет два источника. Переключение на второй источник произойдет, если в течение 20 секунд от первого не придет ни одного кадра.

stream example_stream {
  url udp://239.0.0.1:1236 source_timeout=20;
  url tshttp://localhost:80/clock2/mpegts;
}
stream clock1 {
  url fake://fake;
  push udp://239.0.0.1:1236 multicast_loop;
}
stream clock2 {
  url fake://fake;
}

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

Flussonic Media Server следит только за тем, чтобы от источника были кадры, и переключается на другой источник, если кадры не поступают определенное количество секунд.

Он не переключит источник при пропадании звука или видео, или при росте количества MPEG-TS CC ошибок.

Настройки переключения источников

source_timeout

Для каждого источника можно указать количество секунд, которое Flussonic Media Server будет ожидать кадры от этого источника. По умолчанию таймаут равен 60 секундам (180 секундам для hls://, playlist://, timeshift://).

Можно задавать source_timeout как для всего потока, так и для каждого из источников. Опция source_timeout всего потока не применяется, если указаны source_timeout для его видео-источников. Пример:

stream backup_timeout { 
    url publish:// source_timeout=10;
    url fake://fake source_timeout=5;
    source_timeout 20;
}

Если переключение происходит на ваш взгляд часто, можно увеличить source_timeout, чтобы не было "перепрыгиваний" с одного источника на другой. Наоборот, чтобы не ждать подолгу переключения, можно уменьшить таймаут.

Значение source_timeout не играет роли при переключении источника вручную.

priority

Для источников можно указать приоритет, в порядке которого Flussonic будет переключаться на источник. Самый высокий приоритет у источника с priority=1, более низкий у источника с priority=2, и т.д.

По умолчанию, высший приоритет имеет первый источник в списке в настройках, низший приоритет — последний источник в списке. Если для каких-то источников в списке приоритет не указан, то применяется нумерация по умолчанию.

Flussonic проверяет приоритеты после того, как определены все активные источники.

Если приоритет недоступного источника такой же как и текущего активного, то Flussonic Media Server не будет периодически проверять такой недоступный источник и не будет пытаться на него переключиться.

stream example_stream {
  url fake://fake priority=2 source_timeout=30;
  url tshttp://10.2.4.5:9000/channel/5 priority=1 source_timeout=10;
}

Правила переключения источников в соответствии с их приоритетом и состоянием (работает поток или нет) распространяются и на публикуемые источники, позволяя гибко управлять показом публикуемого потока.

Переключение источников вручную

Flussonic поддерживает принудительное ручное переключение.

Как переключить источники вручную, не дожидаясь таймаута:

  • В конфигурации потока поменять порядок, в котором указаны источники. Применяется, если не указан priority. Например, переместите источник в верх списка, и Flussonic переключится на него.

  • В конфигурации потока изменить приоритеты переключения Например, поменяйте местами приоритеты, и Flussonic переключится на источник с более высоким приоритетом.

  • Через API явно включить другой источник.

Запись в архив

Если на потоке настроен архив, то Flussonic Media Server пишет видео из активного источника в архив.

В случае, если последним адресом указан локальный файл:

stream example_stream {
  url tshttp://example.com/origin;
  url file://vod/bunny.mp4;
  dvr /storage;
}

то видео из этого файла также будет писаться в архив.

Чтобы пользователям показывать заглушку вместо потока, но не писать её в архив, надо использовать заглушку

Файл в качестве запасного источника

Можно использовать статическое видео (видеофайлы) в качестве источника данных для отработки отказа.

Flussonic поддерживает два разных способа использования файлов, при этом поведение системы различается.

Указание файла как источника потока, используя схему url file://

stream example_stream {
    url tshttp://10.0.4.5:9000/channel/5;
    url file://vod/bunny.mp4;
  }

Можно использовать как MP4, так и MPEG-TS файлы (.ts).

Читайте также:

Указание файла как заглушки для потока через опцию backup

Заглушка для основного потока задается с помощью опции backup. Когда основной поток недоступен, Flussonic будет показывать файл, не переключаясь с недоступного источника. Это полезно в ряде ситуаций. Подробнее

stream example_stream {
    url tshttp://10.0.4.5:9000/channel/5;
    backup vod/bunny.mp4;
  }

Чем 'backup' отличается от 'url file://'

В отличие от переключения источников с опцией url file://<VOD location>, при использовании заглушки технически не происходит переключения на другой источник. Это особенно полезно при публикации видео на Flussonic, чтобы не заставлять публикующего клиента переподключаться при каждом сбое связи.

Файл-заглушка, указанная через backup <VOD location>, по умолчанию не транскодируется и не пишется в архив, если вы не настроили иначе. Файловый источник url file://<VOD location> будет всегда записываться в архив.

Когда стоит применять backup вместо url file://:

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

  • Когда все источники работают со сбоями, из-за чего Flussonic часто переключается между ними, лучше показывать файл-заглушку. Если же указать файл как ещё один источник, то зрители увидят его только после того, как истекут таймауты для каждого из сбоящих источников.

  • Если вы записываете основной поток в архив, но не хотите записывать в архив проигрывание файла, чтобы в дальнейшем файл не попал в просмотр.

  • С помощью таймаутов потока и заглушки можно гибко управлять переключением источников в процессе публикации.

Опции файла-заглушки (backup)

Заглушка принимает опции:

stream example {
    url udp://239.0.0.1:1234;
    backup vod/bunny.mp4 video_timeout=5 audio_timeout=10 timeout=20 dvr=true transcode=true;
    dvr /storage;
}

Опции файла-заглушки

dvr=true

Если основной поток пишется в архив, то заглушка будет тоже записываться в архив, если указать эту опцию:

stream example {
    url udp://239.0.0.1:1234;
    backup vod/bunny.mp4 dvr=true;
    dvr /storage;
}

timeout=10

Через какое время (в секундах) Flussonic переключится на заглушку, если от основного источника видеопотока перестанут поступать кадры. Важно, что источник при этом остается запущенным, что позволяет, например, оставаться на сокете клиенту-публикатору.

Опция учитывает все виды кадров.

Flussonic также может переключаться на резервный источник только тогда, когда не поступают кадры определенного типа (видео или аудио), что позволяет лучше управлять переключением, если источник имеет плохое качество. Для разных кадров можно использовать разные интервалы тайм-аута. Чтобы учитывать не любые кадры, а только аудио или видео, используйте опции video_timeout и audio_timeout (см. далее в этом списке).

Если не указывать timeout специально для заглушки, то в случае отсутствия кадров будет использоваться source_timeout основного источника.

Комбинируя настройки timeout и source_timeout, можно:

  • задать более долгое время для того, чтобы мобильные клиенты успели начать публикацию и не были отключены;

  • при этом переключаться за заглушку как можно скорее.

Пример:

stream example {
    url publish:// source_timeout=20;
    url fake://fake;
    backup vod/bunny.mp4 timeout=1;
}

В этом примере:

До начала публикации будет воспроизводиться поток fake. Затем подключается клиентское приложение, которое будет публиковать видео на Flussonic. Если после подключения от клиента-публикатора потока так и не пришли кадры в течение 20 секунд, то клиент принудительно отключается и начинает проигрываться fake.

Затем, когда началась публикация, файл-заглушка backup-file.mp4 начнет проигрываться, если в течение 1 секунды не поступит ни одного кадра от публикуемого потока. Источник публикации при этом пока не отключается.

При возобновлении кадров от источника поток переключается на клиента-публикатора. Если же в течение 20 секунда кадры не приходят, то публикатор принудительно отключается и начинает проигрываться fake.

video_timeout=5

Через какое время (в секундах) Flussonic переключится на заглушку, если от основного источника перестанут поступать видео-кадры.

Если указать video_timeout, audio_timeout и одновременно timeout основного источника, переключение сработает по таймауту, который наступит быстрее. У этих опций одинаковый приоритет.

audio_timeout=10

Через какое время (в секундах) Flussonic переключится на заглушку, если от основного источника перестанут поступать аудио-кадры.

Если указать audio_timeout, video_timeout и одновременно timeout основного источника, переключение сработает по таймауту, который наступит быстрее. У этих опций одинаковый приоритет.

transcode=true

См. Транскодирование файла-заглушки ниже.

Транскодирование файла-заглушки

transcode=true

Если основной поток транскодируется, то заглушка также будет транскодироваться, если указать эту опцию.

stream backup_transcode {
    url udp://239.0.0.1:1235;
    source_timeout 5;
    backup vod/bunny.mp4 transcode=true;
    transcoder vb=1000k ab=64k;
}

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

Flussonic fallback file

"Тревожная" кнопка

Во Flussonic предусмотрена возможность настройки "тревожной" кнопки.

"Тревожная" кнопка — это механизм, который необходим для сигнализации старта/остановки потока.

"Тревожная" кнопка проверяется системой перед тем, как запустить основной источник.

Для того, чтобы добавить "тревожную" кнопку, укажите путь до файла-сигнализации в одном из параметров: allow_if или deny_if источника в настройках потока.

При каких условиях источник будет запущен?

  • В указанном через allow_if файле содержится 1 (allow_if=/PATH/TO/FILE).

  • В указанном через deny_if файле содержится 0 (deny_if=/PATH/TO/FILE).

Следовательно, во всех остальных случаях источник не будет запущен. А именно:

  • В указанном через allow_if файле содержится 0 (allow_if=/PATH/TO/FILE).

  • В указанном через deny_if файле содержится 1 (deny_if=/PATH/TO/FILE).

  • Файл содержит что-то отличное от 1 и 0.

  • Файл не существует.

Конфигурация выглядит следующим образом:

stream example_stream {
    url sdi://1 deny_if=/PATH/TO/FILE;
    url udp://239.0.0.2:1236 allow_if=/PATH/TO/FILE;
}

В примере выше мы определили двум источникам (sdi://1 и udp://239.0.0.2:1236) — одну "тревожную" кнопку (/PATH/TO/FILE). Если /PATH/TO/FILE содержит 1, то источник sdi:// не запустится, в то время как источник udp://239.0.0.2:1236 — запустится. Значит, если /PATH/TO/FILE содержит 0, то sdi://1 запустится, а udp://239.0.0.2:1236 — нет.

Обобщим всё вышесказанное в таблице ("+" — источник запущен, "-" — источник остановлен):

allow_if deny_if
Файл содержит 1 + -
Файл содержит 0 - +
Файл содержит иные символы - -
Файл не существует - -