Переключение источников¶
По разным причинам видео может поступать нестабильно или вовсе стать недоступным. Чтобы избежать ситуации, когда у потребителей отсутствует видео, необходимо подготовить альтернативные источники, чтобы вещать их при отсутствии основного источника до тех пор, пока он не восстановится. Flussonic умеет автоматически плавно переключать источники.
Содержание:
- Резервные источники видео
- Когда происходит переключение
- Настройки переключения источников
- Переключение источников вручную
- Запись в архив
- Файл в качестве запасного источника
- Разница между файлом-заглушкой и файлом-источником потока
- Опции заглушки
- Транскодирование заглушки
- Тревожная кнопка
Резервные источники видео¶
Чтобы обеспечить резервирование источников, в настройках потока следует перечислить несколько разных источников видео, и тогда Flussonic Media Server будет переключаться между ними, если выбранный ранее источник стал недоступен. Можно использовать как видео потоки, так и файлы.
Под термином "недоступен" подразумевается либо немедленное отключение, либо отсутствие кадров в течение 60 секунд (180 секунд для источников по hls://, playlist://, timeshift://).
Как работает переключение¶
Если пришлось переключиться на второй источник, то Flussonic Media Server будет периодически перепроверять первый источник на работоспособность.
Note
Если от пропавшего источника снова приходят кадры, Flussonic дождется ключевого кадра и только тогда переключится на этот источник. Этим самым мы обеспечиваем качественное переключение без задержек. Поэтому даже при переключении на видео с большим GOP, например, приходящее по HLS, Flussonic обеспечит качественное переключение.
Warning
Резервные источники ДОЛЖНЫ иметь идентичный набор аудио и видео дорожек, как у источника, если вы хотите получить лучший пользовательский опыт для ваших зрителей.
Пример
Поток example_stream
имеет два источника. Переключение на второй источник произойдет, если в течение 20 секунд от первого не придет ни одного кадра.
stream failover_example_stream1 {
input udp://239.0.0.1:1236 source_timeout=20;
input tshttp://localhost:80/clock2/mpegts;
}
stream clock1 {
input fake://fake;
push udp://239.0.0.1:1236 multicast_loop;
}
stream clock2 {
input 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 {
input publish:// source_timeout=10;
input 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 {
input fake://fake priority=2 source_timeout=30;
input tshttp://10.2.4.5:9000/channel/5 priority=1 source_timeout=10;
}
Правила переключения источников в соответствии с их приоритетом и состоянием (работает поток или нет) распространяются и на публикуемые источники, позволяя гибко управлять показом публикуемого потока.
Переключение источников вручную¶
Flussonic поддерживает принудительное ручное переключение.
Как переключить источники вручную, не дожидаясь таймаута:
- В конфигурации потока поменять порядок, в котором указаны источники. Применяется, если не указан
priority
.
Например, переместите источник в верх списка, и Flussonic переключится на него.
- В конфигурации потока изменить приоритеты переключения
Например, поменяйте местами приоритеты, и Flussonic переключится на источник с более высоким приоритетом.
- Через API явно включить другой источник.
Запись в архив¶
Если на потоке настроен архив, то Flussonic Media Server пишет видео из активного источника в архив.
В случае, если последним адресом указан локальный файл:
stream backup_example_stream1 {
input tshttp://example.com/origin;
input file://vod/bunny.mp4;
dvr /storage;
}
то видео из этого файла также будет писаться в архив.
Чтобы пользователям показывать заглушку вместо потока, но не писать её в архив, надо использовать заглушку
Файл в качестве запасного источника¶
Можно использовать статическое видео (видеофайлы) в качестве источника данных для отработки отказа.
Flussonic поддерживает два разных способа использования файлов, при этом поведение системы различается.
Указание файла как источника потока, используя схему input file://
¶
stream backup_example_stream2 {
input tshttp://10.0.4.5:9000/channel/5;
input file://vod/bunny.mp4;
}
Можно использовать как MP4, так и MPEG-TS файлы (.ts).
Указание файла как заглушки для потока через опцию backup
¶
Заглушка для основного потока задается с помощью опции backup
. Когда основной поток недоступен, Flussonic будет показывать файл, не переключаясь с недоступного источника. Это полезно в ряде ситуаций. Подробнее
stream backup_example_stream3 {
input tshttp://10.0.4.5:9000/channel/5;
backup vod/bunny.mp4;
}
Чем 'backup' отличается от 'input file://'¶
В отличие от переключения источников с опцией input file://<VOD location>
, при использовании заглушки технически не происходит переключения на другой источник. Это особенно полезно при публикации видео на Flussonic, чтобы не заставлять публикующего клиента переподключаться при каждом сбое связи.
Файл-заглушка, указанная через backup <VOD location>
, по умолчанию не транскодируется и не пишется в архив, если вы не настроили иначе. Файловый источник input file://<VOD location>
будет всегда записываться в архив.
Когда стоит применять backup
вместо input file://
:
- При плохом соединении с публикующим видео клиентом Flussonic продолжает принимать кадры, не обрывая соединение с клиентом. Это позволяет клиенту не обрывать сеанс публикации и не начинать его снова. При перебоях зрители видят файл-заглушку, и понимают, что трансляция ещё не окончена.
- Когда все источники работают со сбоями, из-за чего Flussonic часто переключается между ними, лучше показывать файл-заглушку. Если же указать файл как ещё один источник, то зрители увидят его только после того, как истекут таймауты для каждого из сбоящих источников.
- Если вы записываете основной поток в архив, но не хотите записывать в архив проигрывание файла, чтобы в дальнейшем файл не попал в просмотр.
- С помощью таймаутов потока и заглушки можно гибко управлять переключением источников в процессе публикации.
Опции файла-заглушки (backup
)¶
Заглушка принимает опции:
stream example {
input 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 {
input 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 {
input publish:// source_timeout=20;
input 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 {
input udp://239.0.0.1:1235;
source_timeout 5;
backup vod/bunny.mp4 transcode=true;
transcoder vb=1000k ab=64k;
}
Это позволяет изменять настройки транскодера потока без перекодирования вручную файла заглушки. Также это избавляет от необходимости готовить несколько файлов-заглушек с разным битрейтом.
"Тревожная" кнопка¶
Во Flussonic предусмотрена возможность настройки "тревожной" кнопки.
"Тревожная" кнопка
— это механизм, необходимый для сигнализации старта/остановки потока.
Flussonic проверяет статус "тревожной" кнопки перед тем, как запустить источник.
Для того чтобы добавить "тревожную" кнопку, укажите путь до файла-сигнализации в одном из параметров: allow_if
или deny_if
источника url
в настройках потока.
При каких условиях источник будет запущен?
- В указанном через
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 {
input m4f://FLUSSONIC-IP/STREAM_NAME deny_if=/PATH/TO/FILE;
input udp://239.0.0.2:1236 allow_if=/PATH/TO/FILE;
}
В примере выше мы определили двум источникам (m4f://
и udp://239.0.0.2:1236
) — одну "тревожную" кнопку (/PATH/TO/FILE
). Если /PATH/TO/FILE
содержит 1, то источник m4f://
не запустится, в то время как источник udp://239.0.0.2:1236
— запустится. Значит, если /PATH/TO/FILE
содержит 0, то m4f://
запустится, а udp://239.0.0.2:1236
— нет.
Обобщим всё вышесказанное в таблице ("+" — источник запущен, "-" — источник остановлен):
статус файла | allow_if | deny_if |
---|---|---|
Файл содержит 1 | + | - |
Файл содержит 0 | - | + |
Файл содержит иные символы | - | - |
Файл не существует | - | - |