HLS
HLS (HTTP Live Streaming, RFC 8216) — Apple 2009. Стриминг видео через обычный HTTP. Разбивает видео на короткие сегменты (2-10 сек), плеер скачивает их последовательно. Работает везде — Safari, iOS, Android, Chrome (через MSE).
Структура
# master playlist
master.m3u8
├── 1080p.m3u8 → 1080p_0.ts, 1080p_1.ts, ...
├── 720p.m3u8 → 720p_0.ts, ...
├── 480p.m3u8 → 480p_0.ts, ...
└── audio.m3u8
Master playlist
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080,CODECS="avc1.640028,mp4a.40.2"
1080p.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=3000000,RESOLUTION=1280x720
720p.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1000000,RESOLUTION=854x480
480p.m3u8
Media playlist
#EXTM3U
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:2680
#EXT-X-VERSION:6
#EXTINF:5.9760,
seg-2680.ts
#EXTINF:5.9760,
seg-2681.ts
# конец VOD (не для live)
#EXT-X-ENDLIST
Live vs VOD
- Live — playlist обновляется, старые сегменты выпадают (sliding window)
- VOD — все сегменты +
#EXT-X-ENDLIST - Event — как VOD но растёт (архив стрима)
Контейнеры
- .ts (MPEG-TS) — оригинал, overhead ~10%
- .m4s / .mp4 (fMP4, HLS v7+) — тоньше, тот же контейнер что DASH
ABR — Adaptive Bitrate
Плеер сам решает какую версию скачивать. Смотрит на скорость сети, буфер, размер экрана. Алгоритмы: throughput-based, buffer-based, BOLA.
Latency
| Тип | Задержка |
|---|---|
| Классический HLS (6-сек сегменты) | 15-30 сек |
| Short segments (2 сек) | 6-10 сек |
| LL-HLS | 2-5 сек |
Шифрование
#EXT-X-KEY:METHOD=AES-128,URI="key.php",IV=0x...
AES-128 CBC per-segment. DRM через FairPlay (Apple), Widevine, PlayReady.