Шаблоны для эффективного управления потоками в UGC

01.12.2021

3мин. чтения

stream management

Медиа сервер может получать видеоданные разными способами. В контексте UGC (User Generated Content) это всегда публикация. При публикации инициатором соединения является внешнее устройство, от которого медиа сервер принимает видео. В данном случае, он не может захватывать потоки – ведь устройство, с которого осуществляется трансляция, не имеет статического IP-адреса или находятся за NAT (например, тот же смартфон).

Если в IPTV источник известен, потоки доступны 24/7, и мы знаем их количество, то в UGC – не так. Десятки тысяч открытых сессий с неизвестной продолжительностью – вот что такое крупная UGC-платформа. Создавать отдельный поток для каждой публикации (как в случае с телеканалами), а потом прописывать настройки для каждого потока – мягко скажем, долго и не очень удобно. Более того, в некоторых случаях вообще неизвестно, с каким именем внешняя система будет публиковать поток. Поэтому публикацию в UGC часто организуют по динамическому имени.

Одновременное управление конфигурацией большого количества потоков

Итак, у нас крупная UGC-платформа, много потоков, и они должны публиковаться с динамическими, заранее неизвестными, названиями. Для этого, на серверах нужно заранее настроить шаблоны с префиксами. Например, можно указать на сервере ingest 3 префикс /mobile, чтобы все стримы с мобильных устройств шли туда. Когда стример придет на платформу публиковать свой поток, платформа ему выдаст имя (заранее неизвестное медиа серверу), пусть это будет “АВС”. Из “АВС” и префикса /mobile будет образовано имя потока – “/mobile/ABC”. И стример получит ссылку для публикации на конкретный сервер: rtmp://ingest3/mobile/ABC (в случае публикации по rtmp://).

Настройки всех стримов внутри префикса /mobile будут одинаковыми. Мы называем это шаблоном конфигурации. Шаблоны лишают необходимости прописывать настройки отдельно для каждого потока. Каждому префиксу можно выделить отдельный шаблон (с едиными настройками конфигурации для всех потоков внутри префикса). И для каждой публикации поток будет создаваться с применением соответствующего шаблона.

Например, чтобы применить ко всем стримам внутри /mobile глубину архива 1 день, можно настроить шаблон:

template mobile-devices {
  prefix mobile;
  input publish://;
  dvr @s3 1d;
}

Создание пар шаблон-префикс необходимо для применения к стримам тех или иных параметров видеотракта. Например, когда нужно отправить поток на определенный транскодер в зависимости от необходимых параметров транскодирования. Также, некоторые UGC-платформы могут продавать пользователям дополнительные фичи за деньги (наложение логотипа, архив и проч.) В конечном счете, есть те или иные технические и бизнес условия, в зависимости от которых, системе необходимо распределять одних пользователей на одни группы серверов (с одними конфигурациями видеотракта), а других – на другие.

Например, можно создать локацию mobile-vip, включить транскодер и долгое хранение в архиве следующим образом:

template mobile-devices-vip {
  prefix mobile-transcoded;
  input publish://;
  transcoder vb=1500k size=-1:720 logo=company.png ab=64k;
  dvr @s3 7d;
}

Можно ли жить без шаблонов?

Что означало бы включение опции DVR (digital video recording) для 50 стримов, если бы не было шаблонов конфигурации? Нужно было бы 50 раз перезаписать одну и ту же конструкцию в конфиге и 50 раз применить новые настройки. Шаблоны же позволяют одновременно управлять конфигурацией большого количества потоков.

Мы встречали сервисы, где после регистрации на платформе, администраторы генерировали отдельный поток для каждого пользователя-стримера и дублировали его между всеми серверами. Это чудовищное дублирование информации, которая в итоге приводила к тому, что нужно было заливать 5000 строчек на все 20 серверов. И все это – однотипные конфигурации с минимальной разницей:

stream mobile/usernameA {
  input publish://;
  dvr /storage 1d;
}
stream mobile/usernameB {
  input publish://;
  dvr /storage 1d;
}
stream mobile/usernameC {
  input publish://;
  dvr /storage 7d;
}

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

Приведенная в примерах конфигурация не является полной и может измениться. Для получения актуальной информации обращайтесь к документации и службе support@flussonic.com.