Skip to content

Live stream

media.live.streams

Live stream в Sapsan — именованный стрим, который объединяет приём медиа, его обработку и доставку потребителям. Медиа поступает и обрабатывается по мере появления новых кадров. У стрима есть конфигурация и текущее состояние. Под одним именем могут идти:

  • Видео — несколько качеств.
  • Звук — дорожки на разных языках.
  • Субтитры — текстовые дорожки.

Все они остаются дорожками одного стрима.

На отдельном сервере live stream управляет работающим медиапайплайном. В central тот же стрим представлен как кластерный объект: его функции могут выполняться несколькими серверами одновременно.

Стрим на одном сервере

Локальный экземпляр стрима — менеджер пайплайна. Он связывает компоненты обработки, передаёт им настройки и следит за их жизненным циклом. Состав пайплайна определяется конфигурацией и ролью этого сервера в обслуживании стрима.

Компонент За что отвечает
Вход Получает медиа от источника или принимает публикацию. Управляет соединением, повторными подключениями и выбором резервного источника.
Транскодер Декодирует и кодирует медиа по настройкам стрима, формирует нужные кодеки и лестницу качеств.
Процессинг Выполняет настроенную обработку: извлечение субтитров, создание миниатюр, обработку метаданных и событий. Задачи вроде распознавания речи могут работать по уже записанному архиву.
Сегментер Собирает фрагменты и части фрагментов, поддерживает живое окно для сегментной выдачи.
Запись DVR Передаёт подготовленные фрагменты подсистеме архива и отслеживает состояние записи.
Пуши Отправляют медиа на настроенные адреса. У каждого направления есть своё состояние соединения и повторных подключений.
Ретрансляторы и подписчики Получают кадры или фрагменты стрима для протокольной выдачи зрителям и другим серверам.

Данные расходятся по нескольким ветвям: один и тот же результат обработки может одновременно поступать в архив, в пуши и на выдачу зрителям. Число зрителей не требует отдельного захвата и транскодирования для каждого из них. Сегментная выдача читает подготовленные фрагменты, а протоколы непрерывной передачи получают поток кадров или транспортных пакетов.

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

Подробнее о компонентах:

Кластерный стрим в central

Central хранит общую конфигурацию стрима: какой источник принимать и какие функции выполнять. Оператор меняет её через API central. Лейаутер определяет, на каких стримерах и в каких ролях будет обслуживаться стрим. Central формирует и доставляет каждому серверу конфигурацию его части работы.

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

Уровень Что описывает
Кластерный стрим Общую конфигурацию и имя стрима, сохраняющиеся при изменении его размещения.
Назначение Какой стример выполняет конкретную роль: захват, запись архива или раздачу.
Локальный экземпляр Работающий на сервере пайплайн с доставленной ему конфигурацией.

Распределение позволяет одновременно задействовать несколько серверов для разных функций одного стрима. В частности, приём и транскодирование могут выполняться на сервере с подходящим оборудованием, архив — записываться на выделенном хранилище, а выдача — обслуживаться эджами рядом со зрителями. Возможные роли и правила их назначения описаны в размещении стримов.

Пример распределения

У стрима news включены транскодирование и запись архива. Для него используются следующие серверы:

  • Сервер A — захват: принимает источник и формирует лестницу качеств.
  • Сервер B — запись: получает готовое медиа от A и пишет архив.
  • Серверы C и D — раздача: получают живое медиа от A, читают архив с B и обслуживают зрителей. При включённом кэше архива повторные обращения могут обслуживаться локально.

Оператор управляет одним стримом news. На серверах работают разные части его обработки и доставки. Для добавления эджа не требуется заводить отдельный операторский стрим с другим именем.

Изменения и отказы

При изменении размещения central доставляет обновлённые конфигурации затронутым стримерам. Имя и общая конфигурация кластерного стрима сохраняются; состав локальных экземпляров и выполняемые ими функции могут меняться.

Локальное восстановление и кластерное переразмещение решают разные задачи. Стример сам переподключает свой вход или переключается на настроенный резерв. Решение перенести работу на другой сервер принимает лейаутер по состоянию кластера и правилам размещения.

При потере связи с central уже работающий стример продолжает исполнять последнюю применённую конфигурацию. Доставка новых настроек и переразмещение требуют работающей плоскости управления. Состояние отдельных компонентов и серверов следует смотреть вместе: исправная выдача с одного эджа сама по себе не подтверждает, что запись архива продолжается на DVR-стримере.