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 {
    url udp://192.168.0.1:5000;
    dvr /storage 7d;
}

Пример реальной конфигурации, шести строчек достаточно чтобы определить порт, который будет слушать Flussonic, задать пароль к веб-интерфейсу, создать поток и настроить его запись.

До Flussonic 21.03

Когда потоков становится больше 10-20, не говоря уж о сотнях, в конфигурации прослеживается дублирование строчек, так как одинаковые опции применяются к нескольким потокам:

stream channel1 {
    url udp://239.255.0.1:1234;
    transcoder vb=1000k deinterlace=true ab=128k;
    dvr /storage 1d;
}
stream channel2 {
    url 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 {
    url udp://239.255.0.1:1234;
    template t1;
}
stream channel2 {
    url 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 {
    url udp://239.255.0.1:1234;
    template t1;
    dvr s3://example.com 3d;
}

Локальная конфигурация потока channel1 будет приоритетнее, чем настройка из template t1. Мы рекомендуем использовать переопределение настроек для тестирования, для редких исключений, ведь иначе шаблоны потеряют смысл, большое количество переопределений вернет обратно к ситуации, когда придется вручную отслеживать конфигурацию каждого потока.

Глобальные настройки потоков

Такие опции как auth, url_prefix, cluster_key можно было и раньше указать сразу для всех потоков, но тогда возникала проблема с контролем исключений.

http 80;
auth http://middleware_example/auth;

stream channel1 { # the stream uses global auth
    url udp://239.255.0.1:1234;
}
stream channel2 { # the stream overrides global auth with local defined
    url udp://239.255.0.2:1234;
    auth securetoken://key;
}

На практике часто получалось, что далеко не всем потокам требуется наследовать общую конфигурацию, и Администраторы отказывались от ее использования. Явное определение более понятно, лучше читается, позволяет совершать меньше ошибок, чем неявное наследование.

http 80;

stream channel1 {
    url udp://239.255.0.1:1234;
    auth http://middleware_example/auth;
}
stream channel2 {
    url udp://239.255.0.2:1234;
    auth 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 {
    auth http://middleware_example/auth;
#}

В этом релизе мы оставим это без изменений, но уже скоро перенесем конфигурацию в отдельный шаблон, который будут использовать все потоки без указанного template.

Теперь становится понятно, что поток может наследовать конфигурацию только из одного template: либо явно указанного, либо глобального, но никак не из обоих.

Шаблоны и префиксы

Следующая опция схожа с функциональностью live, связанной с динамическим именем потока. Шаблон создаёт точку публикации с одной и более локациями для публикации, в отличие от опции live, где создаётся лишь одна локация для публикации на одну точку публикации.

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

Используя параметр prefix, Вы можете задать один или несколько префиксов, которые будут использоваться при формировании имён потоков. Общая структура имени потока выглядит так: PREFIX/STREAM_NAME.

Итак, конфигурация будет выглядеть следующим образом (url publish:// обязателен):

template example_template {
  prefix foo;
  prefix bar;

  url 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 в нашем примере).

Данная опция применима и к проигрыванию потоков.