HTTP Live Streaming (HLS) — je protokol adaptivního streamování mediálních dat vyvinutý společností Apple. HLS doručuje video a audio přes HTTP připojení, rozděluje obsah na sekvenci malých souborů-segmentů a řídí přehrávání pomocí textových seznamů stop ve formátu M3U8. Podle zprávy Sandvine Internet Phenomena Report (2025) HLS zpracovává více než 65 % celosvětového provozu adaptivního video streamování. Protokol je podporován na všech platformách Apple a prostřednictvím knihoven třetích stran je dostupný na Androidu, Windows a Smart TV.
Hlavní body
HTTP Live Streaming (HLS) — je protokol streamování médií vyvinutý Apple v roce 2009 a poprvé představený v iOS 3.0 a Safari. V roce 2017 byl protokol navržen jako internetový standard prostřednictvím RFC 8216, což potvrdilo jeho status jako otevřené specifikace dostupné pro implementaci na jakékoli platformě.
Hlavní myšlenkou HLS je rozdělení spojitého mediálního toku na krátké segmenty o délce 2-10 sekund. Každý segment představuje samostatný soubor, který lze stáhnout běžným HTTP požadavkem. Řízení toku je prováděno prostřednictvím textových seznamů stop ve formátu M3U8, které obsahují odkazy na segmenty a metadata pro jejich správné přehrávání.
Adaptivita — je klíčovou výhodou HLS. Server připravuje několik verzí stejného obsahu s různými datovými toky — od 200 Kbps pro slabá připojení až po 20+ Mbps pro 4K video. Klient automaticky vybírá vhodný datový tok na základě aktuální šířky pásma kanálu. Podle výzkumu Apple (WWDC 2024) LL-HLS snižuje dobu přepínání mezi datovými toky na 500 milisekund a zajišťuje plynulou změnu kvality bez znatelných pauz.
První verze HLS (2009) podporovala pouze segmenty MPEG-2 TS s audio kodekem AAC a video kodekem H.264. V iOS 8 (2014) byla přidána podpora segmentů fMP4 (fragmented MP4), což umožnilo použití HLS s modernějšími kodeky, včetně HEVC (H.265). iOS 11 (2017) představil podporu HDR10 a Dolby Vision. iOS 13 (2019) zavedl Low-Latency HLS, čímž snížil latenci z tradičních 6-30 sekund na 2-6 sekund.
V roce 2023 Apple rozšířil HLS o podporu kodeků AV1 a EVC (Essential Video Coding) a také implementoval Content Steering — mechanismus dynamického přesměrování klientů mezi CDN servery pro optimální načítání. Content Steering umožňuje serveru měnit URL segmentů za běhu a přesměrovávat klienta na nejbližší nebo nejméně zatížený CDN uzel bez přerušení přehrávání.
Architektura HLS se skládá ze tří hlavních komponent: serverová část (origin server + kodér), distribuční síť (CDN) a klientská část (přehrávač s podporou HLS). Celý proces — od zachycení videa až po přehrávání na zařízení uživatele — zahrnuje několik po sobě jdoucích fází, z nichž každá je kritická pro kvalitu streamování.
Zdrojové video je nejprve zakódováno do několika variant s různými datovými toky a rozlišeními. Profesionální kodéry jako FFmpeg nebo AWS Elemental MediaConvert vytvářejí současně 4-12 variant toku: od 240p (400 Kbps) až po 4K (40 Mbps). Každá varianta je rozdělena na segmenty stejné délky, obvykle 2-6 sekund pro LL-HLS nebo 6-10 sekund pro tradiční HLS.
Pro každou variantu je vytvořen mediální seznam stop (variant playlist) obsahující URL všech segmentů a jejich dobu trvání. Dále je vytvořen hlavní seznam stop (master playlist), který spojuje všechny varianty a obsahuje informace o každé z nich: rozlišení, datový tok, kodek a zvukové stopy. Klient si nejprve stáhne hlavní seznam stop a poté na základě analýzy rychlosti připojení vybere vhodnou variantu.
Segmenty a seznamy stop jsou ukládány do mezipaměti na CDN serverech umístěných geograficky blízko uživatelům. Použití standardního HTTP protokolu pro doručení dává HLS kritickou výhodu: jakýkoli CDN, load balancer nebo proxy server podporující HTTP pracuje s HLS bez další konfigurace. To odlišuje HLS od protokolů reálného času, jako je RTMP nebo WebRTC, které vyžadují specializované servery.
import subprocess
subprocess.run([
"ffmpeg",
"-i", "input.mp4",
"-codec:v", "libx264",
"-codec:a", "aac",
"-hls_time", "6",
"-hls_list_size", "0",
"-var_stream_map", "v:0,a:0 v:1,a:1",
"-map", "v:0", "-b:v:0", "5000k",
"-map", "v:1", "-b:v:1", "1000k",
"-f", "hls",
"stream/output.m3u8"
])
Klientská strana používá algoritmus výběru datového toku (ABR — Adaptive Bitrate). HLS přehrávač stáhne hlavní seznam stop, analyzuje dostupné varianty a zahájí přehrávání s nejvhodnějším datovým tokem. Během přehrávání přehrávač nepřetržitě monitoruje rychlost stahování segmentů a plnění vyrovnávací paměti a rozhoduje o přepnutí na vyšší nebo nižší datový tok. Moderní ABR algoritmy berou v úvahu nejen rychlost sítě, ale také velikost vyrovnávací paměti, typ obsahu a dokonce i spotřebu energie zařízení.
Porozumění struktuře HLS toku je nezbytné pro správnou konfiguraci kódování, distribuce a ladění problémů s přehráváním. Každý HLS tok se skládá ze dvou úrovní seznamů stop a mnoha mediálních segmentů organizovaných v přísné hierarchii.
Master playlist — je vstupním bodem pro HLS přehrávač. Soubor s příponou .m3u8 obsahuje odkazy na všechny varianty toku (variant streams) a jejich charakteristiky. Přehrávač stáhne tento soubor jako první a na základě informací o datových tocích a rozlišeních učiní počáteční rozhodnutí o výběru varianty. Hlavní seznam stop může také obsahovat odkazy na alternativní zvukové stopy, titulky a seznamy stop I-Frame pro rychlé přetáčení.
#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080
1080p/video.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1000000,RESOLUTION=640x360
360p/video.m3u8
Media playlist obsahuje přímo seznam segmentů pro jednu variantu toku. Každý segment je uveden s dobou trvání a URI. Mediální seznam stop může být statický (pro VOD — úplný seznam všech segmentů) nebo dynamicky aktualizovaný (pro živé přenosy — staré segmenty jsou odstraňovány, nové přidávány).
#EXTM3U
#EXT-X-TARGETDURATION:6
#EXTINF:6.000,
segment001.ts
#EXTINF:6.000,
segment002.ts
#EXT-X-ENDLIST
HLS podporuje dva hlavní formáty mediálních segmentů: MPEG-2 Transport Stream (.ts) a Fragmented MP4 (.m4s nebo .mp4). MPEG-2 TS — původní formát HLS poskytující maximální kompatibilitu. fMP4 — modernější formát podporující HDR, HEVC a efektivnější kompresi. Apple doporučuje fMP4 pro všechny nové projekty od iOS 10 a macOS Sierra.
Další prvky HLS toku zahrnují seznamy stop I-Frame pro rychlé přetáčení, metadata ID3 pro synchronizaci titulků a reklamních markerů a také Session Data pro přenos informací o sledování na analytický server. Všechny tyto prvky jsou volitelné, ale jejich použití zlepšuje kvalitu uživatelského zážitku.
HLS dominuje na trhu video streamování díky řadě architektonických výhod, ale má také omezení, která je třeba zvážit při výběru protokolu pro konkrétní projekt. Porovnejme HLS s alternativními protokoly pro doručování videa.
| Charakteristika | HLS | DASH | RTMP |
|---|---|---|---|
| Transport | HTTP (80/443) | HTTP (80/443) | TCP (1935) |
| Adaptivita | Ano (ABR) | Ano (ABR) | Ne |
| Nízká latence | 2-6 s (LL-HLS) | 3-8 s (LL-DASH) | 0.5-2 s |
| Podpora HDR | Ano (iOS 11+) | Ano | Omezená |
| Nativní iOS | Ano (Safari, AVPlayer) | Přes přehrávače třetích stran | Ne |
| Jednoduchost CDN | Maximální (HTTP) | Maximální (HTTP) | Specializované servery |
Hlavní výhodou HLS — je nativní podpora na všech zařízeních Apple (iPhone, iPad, Apple TV, Mac) prostřednictvím vestavěného AVPlayer. To činí HLS de facto standardem pro iOS/macOS aplikace. Kromě toho použití standardního HTTP pro doručení umožňuje ukládání obsahu do mezipaměti na jakémkoli CDN a proxy serveru bez další konfigurace, což výrazně zjednodušuje doručovací infrastrukturu.
Nevýhody HLS zahrnují vyšší latenci ve srovnání s RTMP nebo WebRTC pro živé přenosy. I s LL-HLS je minimální latence 2-6 sekund, což je nepřijatelné pro interaktivní scénáře v reálném čase. HLS také generuje více souborů na serveru (každý segment je samostatný soubor), což může při velkém počtu současných přenosů zatěžovat souborový systém.
Integrace HLS do mobilních aplikací se liší v závislosti na platformě. Na iOS a macOS je HLS podporován na úrovni operačního systému prostřednictvím AVFoundation a AVPlayer, což zajišťuje hardwarové urychlení dekódování a minimální spotřebu energie. Na Androidu HLS není podporován vestavěným MediaPlayer, ale je dostupný prostřednictvím ExoPlayer — oficiálního mediálního přehrávače od Google.
Na platformě Apple je přehrávání HLS maximálně jednoduché díky vestavěné podpoře v AVPlayer. Stačí vytvořit AVPlayer s URL hlavního seznamu stop a systém automaticky zpracuje adaptivní přepínání datových toků, výběr zvukových stop a zpracování titulků. Vývojář má přitom přístup k plné kontrole nad přehráváním prostřednictvím AVPlayerItem a AVAssetResourceLoader.
import AVFoundation
let url = URL(string: "https://example.com/stream.m3u8")!
let player = AVPlayer(url: url)
let controller = AVPlayerViewController()
controller.player = player
present(controller, animated: true) {
player.play()
}
Pro Android se používá ExoPlayer, který podporuje HLS prostřednictvím samostatného rozšiřujícího modulu. ExoPlayer poskytuje jemnější kontrolu nad HLS tokem: lze spravovat výběr datového toku, konfigurovat vyrovnávací paměť a individuálně zpracovávat chyby načítání segmentů. Pro LL-HLS je vyžadována verze ExoPlayer 2.14.0 a vyšší.
val player = ExoPlayer.Builder(this).build()
val uri = Uri.parse("https://example.com/stream.m3u8")
val mediaItem = MediaItem.fromUri(uri)
player.setMediaItem(mediaItem)
player.prepare()
player.play()
Mobilní aplikace vyžadují zvláštní přístup ke konfiguraci HLS kvůli nestabilitě celulárních sítí a omezením provozu. Hlavní doporučení zahrnují: nastavení počátečního datového toku na základě typu sítě (Wi-Fi nebo mobilní), použití kratší doby trvání segmentů (2-4 sekundy) pro rychlejší adaptaci, předběžné načítání vyrovnávací paměti při přepnutí na Wi-Fi a upřednostnění zvukové stopy při slabém signálu.
Apple v dokumentaci HLS Authoring Specification for Apple Devices (2024) doporučuje používat velikost segmentů ne více než 6 sekund pro mobilní zařízení a alespoň 4 varianty datového toku. Pro úsporu provozu v mobilních sítích by měl server doručovat segmenty s HTTP hlavičkou Cache-Control, umožňující ukládání obsahu do mezipaměti na zprostředkujících proxy serverech telekomunikačních operátorů.
Často kladené otázky
MP4 — je kontejner pro ukládání celého videosouboru, který musí být před zahájením přehrávání zcela stažen. HLS rozděluje video na malé segmenty a umožňuje zahájit sledování 2-6 sekund po stažení prvního segmentu, přičemž automaticky přizpůsobuje kvalitu rychlosti internetu.
Ano, HLS nevyžaduje serverový software Apple. Jakýkoli HTTP server (Nginx, Apache, CDN) může distribuovat obsah HLS. Pro kódování videa do HLS se používá FFmpeg nebo profesionální kodéry. Jediným požadavkem je správná konfigurace MIME typu pro soubory .m3u8.
Ano, HLS byl původně navržen pro živé vysílání. Při živém přenosu je mediální seznam stop dynamicky aktualizován: server přidává nové segmenty a odstraňuje staré. Low-Latency HLS (LL-HLS) snižuje latenci na 2-6 sekund, což činí HLS vhodným pro sportovní přenosy a zpravodajské vysílání.
Master playlist spojuje všechny varianty stejného obsahu s různými datovými toky a rozlišeními. Přehrávač jej stahuje jako první, analyzuje charakteristiky každé varianty (datový tok, rozlišení, kodek) a vybírá optimální pro aktuální síťové podmínky. Bez hlavního seznamu stop není adaptivní přepínání kvality možné.
HLS podporuje šifrování AES-128 segmentů a integraci s DRM systémy: FairPlay Streaming (Apple), Widevine (Google) a PlayReady (Microsoft). Šifrovací klíče jsou přenášeny samostatným zabezpečeným kanálem. Pro dodatečnou ochranu se používá tokenová autentizace přístupu k seznamům stop.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také