Шаблоны конфигурации потоков
С ростом количества потоков на сервере (например, 10 и более) настраивать и администрировать их становится всё сложнее, особенно в случаях, когда фрагменты настроек дублируются для многих потоков. В таких случаях приходится копировать одни и те же опции для каждого потока, что неэффективно и трудоёмко. К тому же велика вероятность допущения ошибки при настройке таких потоков. Здесь на помощь приходят шаблоны конфигурации потоков, или просто шаблоны.
Шаблоны конфигурации потоков — это фрагмент опций или настроек для конфигурации потока, который необходим для эффективного и удобного процесса создания потоков и управления ими.
Что даёт использование шаблонов?
-
Возможность многократного применения фрагмента настроек к разным потокам.
-
Разбиение сложных частей конфигурации на более простые и управляемые части.
-
Уменьшение повторения одинаковых фрагментов настроек в разных частях конфигурации.
-
Упрощение внесения изменений в повторяемых фрагментах настроек потоков.
-
Повышение читабельности и понятности конфигурации.
-
Уменьшение трудозатрат на управление конфигурацией и поддержание её в актуальном состоянии.
Таким образом, шаблоны настройки потоков во Flussonic помогают управлять конфигурацией большого количества потоков.
Файл с конфигурацией Flussonic
Вся конфигурация Flussonic хранится в одном файле — /etc/flussonic/flussonic.conf. У конфигурации свой формат, это не JSON, YAML или INI, но очень простой, легко читается человеком, именно поэтому его часто читают, т.к. это быстрее, чем посмотреть несколько страниц в веб-интерфейсе. На одном экране текстового редактора помещается конфигурация десятка потоков, сразу же видно все глобальные настройки.
Простой синтаксис конфиг файла делает его удобным и для редактирования. Опытные пользователи Flussonic часто пишут конфигурацию именно в текстовом редакторе — так, как они привыкли при работе с другим серверным ПО, таким как веб-серверы.
http 80;
edit_auth flussonic password;
stream example {
input udp://192.168.0.1:5000;
dvr /storage 7d;
}
Пример реальной конфигурации, шести строчек достаточно чтобы определить порт, который будет слушать Flussonic, задать пароль к веб-интерфейсу, создать поток и настроить его запись.
До Flussonic 21.03
Когда потоков становится больше 10-20, не говоря уж о сотнях, в конфигурации прослеживается дублирование строчек, так как одинаковые опции применяются к нескольким потокам:
stream channel1 {
input udp://239.255.0.1:1234;
transcoder vb=1000k deinterlace=true ab=128k;
dvr /storage 1d;
}
stream channel2 {
input udp://239.255.0.2:1234;
transcoder vb=1000k deinterlace=true ab=128k;
dvr /storage 1d;
}
Несмотря на то, что конфиг отлично читается, Администраторам приходилось тратить время на отслеживание состояния конфигурации, чтобы ни у одного из потоков не потерялись опции, или применились только к тем, к каким нужно. Эти затраты времени особенно ощутимы, когда серверов больше 2-3, и у каждого есть ярко выраженная роль: транскодер, рекордер, рестример.
Появление шаблонов во Flussonic 21.03
Мы решили сделать конфигурацию большого количества потоков более удобной. Во Flussonic 21.03 мы добавили шаблоны конфигурации, секцию template
и опцию template
. Вот как теперь выглядит тот же пример:
template t1 {
transcoder vb=1000k deinterlace=true ab=128k;
dvr /storage 1d;
}
stream channel1 {
input udp://239.255.0.1:1234;
template t1;
}
stream channel2 {
input udp://239.255.0.2:1234;
template t1;
}
Все общие настройки потоков выносятся в отдельную секцию, а внутри потока определяются только уникальные настройки. Начиная с 10 потоков, уже хорошо видно, как облегчается flussonic.conf
.
Теперь достаточно один раз привязать поток к шаблону, а дальше работать только с его конфигурацией. Синхронизация настроек потоков на кластере транскодеров сведется к копированию вами определенных template
между серверами.
Внутри template
можно использовать те же опции, что и внутри секции stream
.
Переопределение настроек в конфигурации потока
Если для одного из потоков потребуется переопределить один из параметров, то это можно сделать так:
template t1 {
transcoder vb=1000k deinterlace=true ab=128k;
dvr /storage 1d;
}
stream channel1 {
input udp://239.255.0.1:1234;
template t1;
dvr s3://minioadmin:minioadmin@minio:9001/test 3d;
}
Локальная конфигурация потока channel1
будет приоритетнее, чем настройка из template t1
. Мы рекомендуем использовать переопределение настроек для тестирования, для редких исключений, ведь иначе шаблоны потеряют смысл, большое количество переопределений вернет обратно к ситуации, когда придется вручную отслеживать конфигурацию каждого потока.
Глобальные настройки потоков
Такие опции как on_play
, url_prefix
, cluster_key
можно было и раньше указать сразу для всех потоков, но тогда возникала проблема с контролем исключений.
on_play http://middleware_example/auth;
stream channel1 { # the stream uses global auth
input udp://239.255.0.1:1234;
}
stream channel2 { # the stream overrides global auth with local defined
input udp://239.255.0.2:1234;
on_play securetoken://key;
}
На практике часто получалось, что далеко не всем потокам требуется наследовать общую конфигурацию, и Администраторы отказывались от ее использования. Явное определение более понятно, лучше читается, позволяет совершать меньше ошибок, чем неявное наследование.
stream channel1 {
input udp://239.255.0.1:1234;
on_play http://middleware_example/auth;
}
stream channel2 {
input udp://239.255.0.2:1234;
on_play securetoken://key;
}
Глобальные опции очень похожи на templates, не так ли? Поэтому начиная с 21.03 вы увидите сообщение:
# Stream templates:
# Template globals currently applies to all streams without templates.
# This will change in future, explicit template usage is recommended.
#template globals {
on_play http://middleware_example/auth;
#}
В этом релизе мы оставим это без изменений, но уже скоро перенесем конфигурацию в отдельный шаблон, который будут использовать все потоки без указанного template
.
Теперь становится понятно, что поток может наследовать конфигурацию только из одного template
: либо явно указанного, либо глобального, но никак не из обоих.
Шаблоны и префиксы
Следующая опция связана с использованием динамического имени потока. Шаблон создаёт точку публикации с одной и более локациями для публикации, по количеству указанных префиксов.
Динамическое имя — термин, описывающий заранее неизвестное Flussonic имя публикуемого потока.
Используя параметр prefix
, вы можете задать один или несколько префиксов, которые будут использоваться при формировании имён потоков. Общая структура имени потока выглядит так: PREFIX/STREAM_NAME
.
Итак, конфигурация будет выглядеть следующим образом (настройка input publish://
обязательна):
template example_template {
prefix foo;
prefix bar;
input publish://;
backup priv/bunny.mp4;
source_timeout 2;
}
В примере выше мы определили шаблон example_template
и указали префиксы foo
и bar
, а также файл-заглушку и время ожидания кадров от источника.
Таким образом, когда вы будете осуществлять публикацию потока во Flussonic в одну из локаций публикации (foo
или bar
), то имя потока будет одним из двух возможных: foo/STREAM_NAME
, bar/STREAM_NAME
, в зависимости от выбранной вами локации для публикации.
Например, если вы публикуете RTMP-поток в локацию foo
, то URL будет выглядеть следующим образом: rtmp://FLUSSONIC-IP/foo/STREAM_NAME
.
Итак, все настройки, определённые вами в рамках шаблона с использованием префиксов, будут применены ко всем потокам, публикуемым с использованием этих самых префиксов (foo/STREAM_NAME
или bar/STREAM_NAME
в нашем примере).
Возможно также указать в конфигурации шаблона специальный пустой префикс (""
). В этом случае шаблон может быть использован для публикации потока с любым префиксом или даже вообще без префикса.