Skip to content

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

Шаблоны настройки потоков во 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: либо явно указанного, либо глобального, но никак не из обоих.

Что дальше?

Шаблоны станут ключевым элементов в управлении группой серверов, мы поработаем над дизайном в админке, чтобы в ней потоки template выглядели так же понятно, как и в конфигурационном файле, добавим в них уникальных возможностей, например, символы подстановки, "on action" события, которые позволят реализовать очень гибкие сценарии, а Flussonic Catena будет управлять в первую очередь шаблонами, а не per-stream конфигурацией.

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