HLS: co to je, protokol a princip fungování

Autor: IT Sectr Publikováno: 2026-05-23 Doba čtení: 9 min

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

  • HLS — je adaptivní streamovací protokol od Apple, založený na HTTP a používající seznamy stop M3U8 pro řízení toku.
  • Adaptivita HLS umožňuje automatické přepínání mezi datovými toky v závislosti na rychlosti internetu uživatele.
  • Seznamy stop master.m3u8 a segmentové soubory .ts nebo .m4s tvoří základní architekturu HLS toku.
  • Ochrana obsahu je realizována pomocí šifrování AES-128 a podpory DRM systémů (FairPlay Streaming, Widevine).
  • Latence HLS byla snížena na 2-6 sekund díky Low-Latency HLS (LL-HLS) představenému v roce 2020.

Co je HLS?

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.

Historie vývoje HLS

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í.

Jak funguje HLS?

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í.

Kódování a segmentace

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.

Doručení přes CDN

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.

python
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í.

Struktura HLS toku: seznamy stop a segmenty

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 (hlavní seznam stop)

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í.

m3u8
#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 (mediální seznam stop)

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).

m3u8
#EXTM3U
#EXT-X-TARGETDURATION:6
#EXTINF:6.000,
segment001.ts
#EXTINF:6.000,
segment002.ts
#EXT-X-ENDLIST

Formáty segmentů

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.

Výhody a nevýhody HLS

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.

CharakteristikaHLSDASHRTMP
TransportHTTP (80/443)HTTP (80/443)TCP (1935)
AdaptivitaAno (ABR)Ano (ABR)Ne
Nízká latence2-6 s (LL-HLS)3-8 s (LL-DASH)0.5-2 s
Podpora HDRAno (iOS 11+)AnoOmezená
Nativní iOSAno (Safari, AVPlayer)Přes přehrávače třetích stranNe
Jednoduchost CDNMaximá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.

HLS v mobilních aplikacích

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.

HLS na iOS přes AVPlayer

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.

swift
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()
}

HLS na Androidu přes ExoPlayer

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šší.

kotlin
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()

Optimalizace HLS pro mobilní sítě

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

Čím se HLS liší od běžného MP4 videa?

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.

Lze HLS používat bez serveru Apple?

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.

Podporuje HLS živé přenosy?

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í.

Proč je v HLS potřeba hlavní seznam stop?

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é.

Jak chránit HLS obsah před stahováním?

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í

  • HLS — adaptivní streamovací protokol od Apple, založený na HTTP, používající seznamy stop M3U8 a mediální segmenty.
  • Adaptivita prostřednictvím více variant datového toku (ABR) zajišťuje plynulé přehrávání za jakýchkoli síťových podmínek.
  • LL-HLS snižuje latenci živých přenosů na 2-6 sekund a přibližuje se ukazatelům RTMP.
  • Na iOS je HLS přehráván vestavěným AVPlayer s hardwarovým urychlením; na Androidu — prostřednictvím ExoPlayer.
  • Formáty segmentů: MPEG-2 TS (.ts) pro kompatibilitu a fMP4 (.m4s) pro HDR/HEVC.
  • Ochrana obsahu prostřednictvím šifrování AES-128 a DRM (FairPlay, Widevine).
  • Doporučuje se používat HLS pro jakékoli iOS/macOS projekty se streamováním a pro multiplatformní řešení prostřednictvím ExoPlayer na Androidu.

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í.

Prodiskutovat projekt

Přečtěte si také