Skip to content

Шаблоны конфигурации потоков

С ростом количества потоков на сервере (например, 10 и более) настраивать и администрировать их становится всё сложнее, особенно в случаях, когда фрагменты настроек дублируются для многих потоков. В таких случаях приходится копировать одни и те же опции для каждого потока, что неэффективно и трудоёмко. К тому же велика вероятность допущения ошибки при настройке таких потоков. Здесь на помощь приходят шаблоны конфигурации потоков, или просто шаблоны.

Шаблоны конфигурации потоков — это фрагмент опций или настроек для конфигурации потока, который необходим для эффективного и удобного процесса создания потоков и управления ими.

Что даёт использование шаблонов?

  1. Возможность многократного применения фрагмента настроек к разным потокам.
  2. Разбиение сложных частей конфигурации на более простые и управляемые части.
  3. Уменьшение повторения одинаковых фрагментов настроек в разных частях конфигурации.
  4. Упрощение внесения изменений в повторяемых фрагментах настроек потоков.
  5. Повышение читабельности и понятности конфигурации.
  6. Уменьшение трудозатрат на управление конфигурацией и поддержание её в актуальном состоянии.

Таким образом, шаблоны настройки потоков во 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 мы добавили шаблоны конфигурации, секцию 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 в нашем примере).

Возможно также указать в конфигурации шаблона специальный пустой префикс (""). В этом случае шаблон может быть использован для публикации потока с любым префиксом или даже вообще без префикса.