Skip to content

HLS (HTTP Live Streaming)

RUSEON Core предоставляет стандартный HLS-поток низкой задержки, упакованный в контейнеры MPEG-TS без перекодирования (Zero-Transcoding).


Сегменты и скользящее окно

  • Целевая длительность: 2.0 секунды. Сегменты нарезаются строго по ключевым кадрам (I-frames) при достижении целевого времени.
  • Скользящее окно: Плейлист хранит 5 последних сегментов (~10 секунд видео).
  • Пул буферов (Buffer Pool): Сегменты формируются в оперативной памяти с использованием sync.Pool из буферов по 1 МБ (bufferPool), что сводит к минимуму нагрузку на сборщик мусора.
  • Обработка разрывов: При отключении камеры муксер вставляет теги #EXT-X-DISCONTINUITY, предотвращая сбои воспроизведения в видеоплеерах.

Ленивый HLS (Lazy HLS Watchdog)

Для экономии ресурсов процессора и памяти HLS-мультиплексирование может работать по требованию:

  • Включается для камеры параметром lazy_hls: true.
  • При поступлении первого запроса от плеера муксер мгновенно запускается и подтягивает 4-секундный предбуфер напрямую из кольцевого буфера памяти.
  • Если в течение 60 секунд к потоку нет обращений, фоновый процесс муксинга автоматически останавливается.

Синхронизация AI-метаданных через WebVTT

RUSEON Core генерирует мастер-плейлист HLS с параллельной дорожкой субтитров WebVTT:

m3u8
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="AI Metadata",DEFAULT=YES,AUTOSELECT=YES,FORCED=NO,URI="subs.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=2500000,RESOLUTION=1920x1080,SUBTITLES="subs"
stream.m3u8

Субтитры содержат сериализованный JSON с координатами рамок детекций (Bounding Boxes). Таймстемпы субтитров строго синхронизированы с видеорядом через заголовок сопоставления MPEG-TS:

vtt
WEBVTT
X-TIMESTAMP-MAP=LOCAL:00:00:00.000,MPEGTS:900000

00:00:00.000 --> 00:00:02.000
{"boxes":[{"x":120,"y":340,"w":150,"h":280,"label":"person","score":0.94}]}

Эндпоинты HLS

ЭндпоинтНазначение
GET /stream/hls/:id/index.m3u8Мастер-плейлист, объединяющий видео и субтитры WebVTT.
GET /stream/hls/:id/stream.m3u8Плейлист скользящего окна видеосегментов .ts.
GET /stream/hls/:id/subs.m3u8Плейлист сегментов субтитров метаданных .vtt.
GET /stream/hls/:id/:segmentПолучение видеосегмента (.ts) или сегмента метаданных (.vtt).

Released under the MIT License.