Skip to content

Внешний источник конфигурации стримов (config_external)

Catena SE может получать список телеканалов (стримов) из внешнего сервиса провижининга вместо ручной настройки. Такой сервис вы реализуете сами: Catena SE обращается к нему по протоколу config_external и синхронизирует конфигурацию со своим состоянием.

Ключевой метод, который обязан предоставлять ваш сервис — streams_list (GET /streams). По этому методу Catena SE выгружает полный список стримов и принудительно приводит свою конфигурацию к этому списку (добавляет, обновляет и при необходимости удаляет каналы).

Что должен реализовать ваш сервис

Внешний сервис должен реализовать HTTP API, совместимый с описанием в приложенном файле catena-se.yaml (OpenAPI 3.1). В первую очередь нужен метод:

  • GET /streams (operationId: streams_list) — возвращает список стримов в формате streams_list.

Формат ответа:

  • Тело ответа — JSON-объект с полем streams: массив элементов типа stream_config.
  • Опционально поддерживаются поля постраничной навигации из collection_response: next, prev, estimated_count, timing. Catena SE может передавать query-параметры limit и cursor для постраничной выборки.

Каждый элемент в streams — конфигурация одного стрима: name, inputs, template, dvr, labels, таймауты, backup, on_play и прочие поля, описанные в схеме stream_config в catena-se.yaml. Имя стрима (name) уникально и после создания не меняется.

Как Catena SE использует список стримов

Алгоритм синхронизации со стороны Catena SE:

  • Catena SE запрашивает у внешнего сервиса список стримов (GET /streams, при необходимости с cursor/limit).
  • Все стримы из ответа добавляются в Catena SE или обновляются: если канал уже есть, его настройки полностью перезаписываются данными из ответа. Существующие лейблы канала заменяются теми, что пришли от внешнего сервиса.
  • Каналы, которые есть в Catena SE, но отсутствуют в списке от внешнего сервиса, удаляются — кроме каналов с лейблом manual.
  • Каналы с лейблом manual не удаляются и не перезаписываются этим механизмом.

Чтобы какой-то канал не управлялся внешним провижинингом, ему нужно выдать лейбл manual (например, в labels.manual). Если во внешнем сервисе позже появится стрим с тем же именем, при следующей синхронизации лейбл будет перезаписан и канал перейдёт под автоматическое управление.

Синхронизация списка передач

Middleware может отдавать абонентам информацию о статусе записи каждой телепередачи для корректного проигрывания.

Статус записи телепередачи можно получить с Catena SE, запросив передачи за указанное время методом episodes_get. Catena SE при необходимости запрашивает список передач с сервера по протоколу config_external для недостающих диапазонов времени, дообогащает его и отдаёт.

Механизм рассчитан на то, что границы передач не меняются, т.е. кеширование выполняется один раз.

Пример: один файл и HTTP-сервер

Минимальный вариант — один статический файл streams с JSON в формате central_streams_list. В этой папке лежит пример такого файла с одним стримом (демо-источник fake://fake).

Запуск отдачи файла через встроенный HTTP-сервер Python:

python3 -m http.server 8000

После запуска список стримов будет доступен по адресу http://localhost:8000/streams. В настройках Catena SE укажите URL вашего сервера (например, http://HOST:8000), чтобы метод config_external запрашивал http://HOST:8000/streams.

Содержимое примера файла streams:

{
  "streams": [
    {
      "name": "channel1",
      "title": "Тестовый канал",
      "comment": "Демо-стрим из внешнего конфига",
      "inputs": [
        {
          "url": "fake://fake"
        }
      ]
    }
  ]
}

Для продакшена нужен сервис, который отдаёт ответ с Content-Type: application/json и при необходимости обрабатывает параметр cursor.

Как включить config external

Для этого надо в файле настройки инсталяции добавить секцию config_external:

config_external:
  url: "https://auth@middleware.myservice.com"

Технические детали протокола config_external

Полное описание API приведено в формате OpenAPI 3.1 в файле catena-se.yaml в этой же папке. Там заданы схемы streams_list, stream_config, типы входов стримов (stream_input_*), параметры DVR, лейблы и остальные поля, которые ваш сервис может возвращать в streams_list для провижининга стримов в Catena SE.