Документация Help

Алгоритм вещания

Описание

Данный документ описывает процесс формирования вещания и получения конечного плейлиста для приставки Raspberry Pi.

Процесс работы

  1. Регистрация и внесение устройства на медиасервер

    • зарегистрировать устройство в нашем сервисе Balena и получить его uuid внутри сервиса

    • создать сущность Box во вкладке "Приставки" на медиасервере.

    • в форме создания новой приставки нужно указать его uuid, а далее выбрать для него Location из уже существующих, либо создать новую Location во вкладке "Локации".

    • убедиться, что у локации указан корректный Master, либо указать его в случае, если мы создали новую локацию. Если мастер с нужной рекламой и контентом отсутствует, нужно его создать

  2. Создание мастера

    • перейти во вкладку "Мастеры" и создать новый мастер. Указать его имя, порядок (опционально, служит для сортировки по умолчанию внутри вкладки). В форме также можно задать MasterType и нужные Broadcast Package (также опционально).

    • перейти во вкладку редактирования мастера с помощью соответствующего контрола в правой части таблицы. На данной странице создать нужное количество Advertisements и Contents с нужными настройками: датами показа, количеством показов за 6 часов и т. д.

    • указать только что созданный мастер внутри Location для устройства, зарегистрированого на прошлом шаге

  3. Запрос плейлиста

    • Устройство раз в пять минут отправляет GET-запрос на специальный эндпойнт бэкенда, передавая свой uuid в параметрах запроса.

  4. Формирование ответа

    • Бэкенд по uuid находит устройство в базе.

    • По устройству определяется локация.

    • По локации находится мастер.

    • На основе данных из мастера формируется плейлист с видеофайлами.

  5. Возвращение плейлиста

    • Бэкенд отправляет сформированный плейлист устройству Raspberry Pi.

    • Устройство использует полученный плейлист для воспроизведения реклам и контента.

Спецификация эндпойнта

Метод: GET

URL: /api/get-playlist-by-box-uuid/:uuid

Параметры запроса:

Параметр

Тип

Описание

uuid

UUID

Уникальный идентификатор устройства

Пример запроса:

GET http://api.mediaserver.novikovtv.tv/api/get-playlist-by-box-uuid/3f783fe

Пример ответа:

{ "boxId": 2214, "masterId": 228, "playlist": [ { "url": "https://741826.selcdn.ru/novikov-tv-selectel/store/NovikovTV_AD_2sec.mp4", "md5": "7e5efc349d603c6bb329226344ee0caa", "duration": "2", "size": 3715365, "startAt": "2025-01-15", "stopAt": "2025-01-17", "isEveryMonth": false, "contentType": 2, "num": 1 }, { "url": "https://741826.selcdn.ru/novikov-tv-selectel/store/NovikovTV_AD_2sec.mp4", "md5": "7e5efc349d603c6bb329226344ee0caa", "duration": "2", "size": 3715365, "startAt": null, "stopAt": null, "isEveryMonth": false, "contentType": 2, "num": 1 } ] }

Описание алгоритма формирования плейлиста

Функция формирования плейлиста принимает uuid устройства и возвращает объект следующей структуры:

(uuid: string) => { boxId: number, masterId: number, playlist: [{ url: string, md5: string, duration: string | number, size: number, startAt: string | null, stopAt: string | null, isEveryMonth: boolean, contentType?: number, num: number }] }

Алгоритм формирования плейлиста

  1. По uuid устройства находится мастер, на основе которого будет строиться плейлист.

  2. Ищутся все ролики, присутствующие в данном мастере.

  3. Ролики фильтруются по дате:

    • Если startAt равно null, ролик считается доступным с минимально возможной даты.

    • Если stopAt равно null, ролик считается доступным до максимально возможной даты.

    • Все ролики, не соответствующие временным ограничениям, отбрасываются.

  4. Оставшиеся ролики передаются в функцию формирования плейлиста.

  5. Формируется шестичасовой плейлист по следующему правилу:

    • плейлист должен состоять из рекламных и контентных блоков. В блоке может быть несколько видео

    • перед каждым рекламным блоком вставляется двухсекундная рекламная отбивка.

    • плейлист состоит из чередующихся рекламных и контентных блоков.

    • длительность одного цикла (реклама + контент) составляет примерно 4 минуты.

    • алгоритм подбирает длительности блоков в зависимости от пропорции рекламного контента. Если реклама занимает 50% всего времени (3 часа из 6), рекламный блок длится 2 минуты, контентный — 2 минуты. Если реклама занимает, например, 75% времени, рекламный блок длится 3 минуты, контентный — 1 минуту. И так по аналогии.

    • при формировании плейлиста каждому элементу плейлиста (каждому видео) устанавливается num - его порядковый номер в плейлисте, и contentType - число, обозначающее тип видео - реклама это, контент или отбивка. Данные поля нужны для просмотра плейлиста через другой веб-сервис.

13 April 2025