Документация Flussonic Media Server

Содержание

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

Эта информация будет полезна, если в вашем сервисе множество серверов Flussonic Media Server и тысячи ondemand-потоков, а конфигурации потоков постоянно обновляются. При этом необходимо организовать централизованное хранение потоковых конфигураций для Flussonic.

Условия:

  • Несколько серверов Flussonic
  • До десятков тысяч публикуемых ondemand-потоков суммарно
  • Тысячи запросов на проигрывание потоков
  • Потоки, которые публикуются на Flussonic, затем могут перенаправляться на сторонние сервисы
  • Файлы с конфигурацией часто обновляются по мере того, как создаются новые потоки и удаляются старые.

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

Решение состоит в том, чтобы хранить настройки потока в централизованной внешней системе и передавать их именно тому серверу Flussonic, который будет обрабатывать этот поток.

Таким образом, Flussonic не имеет информации о потоках, которые будут опубликованы на нем. Когда Flussonic получает запрос от клиентского устройства на воспроизведение потока, он сначала ищет поток в локальном файле конфигурации, и если такого потока нет, Flussonic подключается к специальному бэкенду на внешнем сервере. Бэкенд передаёт настройки потока во Flussonic.

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

Настройки плагина

Чтобы организовать использования внешнего источника конфигурации потоков:

  1. Разработайте собственную систему для централизованного хранения конфигураций потоков и бэкэнд для взаимодействия с серверами Flussonic. Этот бэкэнд должен предоставлять информацию о потоках, которые вы храните и обновляете в своей внешней по отношению к Flussonic системе.

    Во-первых, бэкэнд должен принимать запросы на конфигурацию потока, которые Flussonic отправляет в формате JSON.:

    {"streams": ["stream_name1", "stream_name2", ... "stream_nameN"]}
    

    Ключ "streams" содержит список названий потоков, конфигурацию которых Flussonic запрашивает.

    Во-вторых, бэкэнд должен возвращать JSON объект, содержащий настройки запрошенных потоков (в таком же формате, что используется в API запросе modify_config /flussonic/api/modify_config). Пример ответа:

    {
        "streams": {
            "stream_name2": {
                "urls": [
                    {
                        "url": "fake://fake"
                    }
                ]
            },
            "stream_name1": null
        }
    }
    
    

    Ключ "streams" содержит JSON объект.

    Если конфигурация потока не найдена, бэкенд возвращает null.

    Протокол взаимодействия Flussonic и бэкенда будет подробнее описан позже.

  2. Добавьте плагин config_remote на каждый Flussonic Media Server. Он добавляется в /etc/flussonic/flussonic.conf таким образом:

plugin config_remote {
    backend http://backend1/ timeout=3;
    backend http://localhost:8671/ timeout=3;
    refresh_interval 30;
    default failover_stream_name;
}

  • backend — Flussonic подключается к указанному бэкенду, чтобы получить конфигурации потоков: ondemand поток, published location, или VOD location. Он подключается к бэкенду только если не находит поток в локальном кэше. Flussonic подключается к другому указанному бэкэнду, если предыдущий не передал информацию о запрошенных потоках.

  • refresh_interval (необязательный) — с каким интервалом Flussonic будет периодически проверять обновление конфигурации во внешней системе и синхронизировать у себя локально.

  • default (необязательный) — поток, настройки которого передаются Flussonic, если ни один бэкенд не отвечает. Этот поток должен быть указан в локальном файле конфигурации как поток.

URL бэкенда должен заканчиваться слэшем (/).

Поток по умолчанию

Если ни один их бэкендов не ответил либо запрошенный поток не найден, Flussonic будет показывать поток по умолчанию. Настройте его локально как поток (не VOD файл).

ondemand stream_name {
  url fake://fake;
}

plugin config_remote {
  backend http://backend1/ timeout=3; 
  default stream_name;
}

Как увидеть потоки из внешней системы во Flussonic UI

Flussonic UI поддерживает потоки, запущенные на Flussonic через плагин config_remote.

Эти, "внешние", потоки не добавляются в локальный конфигурационный файл, а хранятся в кэше. Flussonic периодически проверяет, была ли обновлена конфигурация потока во внешней системе, и соответственно обновляет локальную конфигурацию.

Список "внешних" потоков также можно увидеть через API /flussonic/api/read_config в разделе ephemerals.

Конфигурация "внешних" потоков не может быть отредактирована на Flussonic. Единственное разрешенное действие - остановить поток.

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