Воспроизведение архива (Streaming)
Видеозаписи сохраняются на диске в формате fMP4 для обеспечения отказоустойчивости при сбоях питания. Для воспроизведения в веб-браузерах с возможностью произвольной перемотки RUSEON Core выполняет ремультиплексирование в HLS на лету в оперативной памяти без транскодирования.
Архитектура ремультиплексирования на лету
- Парсинг структуры атомов: При запросе
/hls/:id/archive.m3u8?file=...индексатор считывает заголовки коробокmoov,moofиmdat, вычисляя смещения байт для каждого GOP-фрагмента без загрузки всего видеофайла в RAM. - Динамическая генерация сегментов: При обращении к
/hls/:id/segment.ts?file=...&seq=...сервер позиционируется на нужный offset в файле, извлекает сырые NAL-юниты H.264/H.265 и оборачивает их в пакеты MPEG-TS PES через временный буфер изsync.Pool.
Эндпоинты воспроизведения архива
1. HLS Манифест архива
- URL:
GET /hls/:id/archive.m3u8?file={filename} - Параметр:
file(string, обязательный): Имя файла в каталогеrecordings/<id>/. - Ответ:
#EXTM3Uплейлист с индексными ссылками на сегменты.ts.
2. TS Сегмент архива
- URL:
GET /hls/:id/segment.ts?file={filename}&seq={index} - Параметры:
file: Имя файла записи.seq: Индекс сегмента (0, 1, 2...).
- Ответ: Бинарный поток
video/mp2t.