Skip to content

Проигрывание по HLS и LL-HLS

Любой поток Sapsan сразу доступен по HLS (fMP4/CMAF) без дополнительной настройки. Для лайва по умолчанию включен LL-HLS с частичными сегментами.

URL проигрывания

Что URL
Мастер-плейлист (все качества) http://server/streaming/v/<stream>/index.m3u8
Плейлист одной дорожки http://server/streaming/v/<stream>/variant/<track>/index.m3u8
Отмотка назад (rewind) http://server/streaming/v/<stream>/rewind/<секунд-назад>/index.m3u8
Архив по абсолютному времени http://server/streaming/v/<stream>/index.m3u8?from=<utc_ms>&to=<utc_ms>

В мастер-плейлисте: качества с RESOLUTION, FRAME-RATE и CODECS, аудио выносится в rendition-группы (EXT-X-MEDIA). Аудио G.711 (PCMA/PCMU) в HLS не отдается — такие потоки сначала транскодируйте в AAC.

LL-HLS

Для живых потоков Sapsan отдает полноценный LL-HLS (протокол версии 9):

  • частичные сегменты EXT-X-PART на живом краю плейлиста и EXT-X-PRELOAD-HINT для следующей части;
  • blocking playlist reload: клиентские параметры _HLS_msn и _HLS_part держат запрос, пока не появится запрошенный сегмент/часть;
  • дельта-обновления плейлиста: _HLS_skip=YES сокращает плейлист тегом EXT-X-SKIP;
  • EXT-X-RENDITION-REPORT для быстрого переключения качеств;
  • параметры PART-HOLD-BACK, CAN-SKIP-UNTIL, HOLD-BACK рассчитываются автоматически от длительностей сегмента и части.

Выключить LL-HLS для конкретного клиента можно параметром ?llhls=false — мастер-плейлист пробросит его во все variant-URL, и плеер получит классический HLS (версия 7).

Токены в плейлистах

Если проигрывание защищено токеном, ?token= автоматически дописывается во все вложенные URL плейлиста: варианты, init-сегменты, сегменты, части и preload-хинты. Плееру достаточно открыть мастер-плейлист с токеном.

Количество сегментов

Длина живого плейлиста задается параметром потока segments:

streams:
  tv1:
    inputs:
    - udp: {host: 239.0.0.1, port: 5000}
    segments: 6

Диагностика

В Sapsan встроен валидатор HLS-плейлистов: он оценивает ожидаемую задержку и указывает на проблемы конфигурации кодами вида LL-DISABLED, TARGETDURATION-INFLATED, PART-TARGET-LARGE, SPARSE-INDEPENDENT-PARTS (слишком длинный GOP для LL-HLS).

Note

TODO: как запускать валидатор (CLI/API).

Что дальше