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). |