LL-HLS
Low-Latency HLS — Apple (2019), встроен в HLS v9. Снижает задержку HLS с 15-30с до 2-5с БЕЗ отказа от HTTP/CDN. Работает через chunked transfer и preload hints.
Механизмы
1. Partial segments (parts)
Каждый 4-сек сегмент делится на 4 части по 1 сек. Плеер получает часть до готовности полного сегмента.
#EXT-X-PART:DURATION=1.0,URI="s100.1.mp4"
#EXT-X-PART:DURATION=1.0,URI="s100.2.mp4"
#EXT-X-PART:DURATION=1.0,URI="s100.3.mp4"
#EXT-X-PART:DURATION=1.0,URI="s100.4.mp4"
#EXTINF:4.0,
s100.mp4
2. Preload hint
#EXT-X-PRELOAD-HINT:TYPE=PART,URI="s101.1.mp4"
Плеер знает какая часть следующая → отправляет запрос до готовности → сервер отвечает как только готово (HTTP chunked).
3. Blocking playlist reload
GET /master.m3u8?_HLS_msn=101&_HLS_part=2
Плеер: "дай playlist когда будет part 2 сегмента 101". Сервер держит запрос, отдаёт как только готово. Никакого polling.
4. Rendition report
#EXT-X-RENDITION-REPORT:URI="720p.m3u8",LAST-MSN=101,LAST-PART=2
В master.m3u8 — состояние всех renditions. ABR-переключение без ожидания.
HTTP/2 push (removed 2020)
Изначально LL-HLS полагался на HTTP/2 server push. Apple убрал требование — теперь preload+chunked достаточно.
Latency
| Setup | End-to-end |
|---|---|
| Классический HLS (6с) | ~30 сек |
| Short HLS (2с) | ~10 сек |
| LL-HLS (1с parts) | 2-5 сек |
| WHEP | < 1 сек |
CDN-совместимость
LL-HLS работает через HTTP/1.1 chunked transfer + long-polling. Cloudflare, Akamai, Fastly поддерживают. Не требует WebSocket/UDP.
Плееры
- Safari (нативно с iOS 14+)
- hls.js (частично)
- Shaka Player
- ExoPlayer
См. также
- HLS, DASH, WHEP, HLS vs DASH