Skip to content

Воспроизведение архива (Streaming)

Видеозаписи сохраняются на диске в формате fMP4 для обеспечения отказоустойчивости при сбоях питания. Для воспроизведения в веб-браузерах с возможностью произвольной перемотки RUSEON Core выполняет ремультиплексирование в HLS на лету в оперативной памяти без транскодирования.


Архитектура ремультиплексирования на лету

  1. Парсинг структуры атомов: При запросе /hls/:id/archive.m3u8?file=... индексатор считывает заголовки коробок moov, moof и mdat, вычисляя смещения байт для каждого GOP-фрагмента без загрузки всего видеофайла в RAM.
  2. Динамическая генерация сегментов: При обращении к /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.

Released under the MIT License.