HTTP Live Streaming (HLS) — egy adaptív médiaadat-streamelési protokoll, amelyet az Apple fejlesztett ki. A HLS HTTP-kapcsolatokon keresztül szállítja a videót és a hangot, a tartalmat kis fájl-szegmensek sorozatára bontva, és a lejátszást M3U8 formátumú szöveges lejátszási listákon keresztül vezérli. A Sandvine Internet Phenomena Report (2025) szerint a HLS a globális adaptív videostreamelési forgalom több mint 65%-át dolgozza fel. A protokoll minden Apple platformon támogatott, és harmadik féltől származó könyvtárakon keresztül Androidon, Windows-on és Smart TV-n is elérhető.
Főbb pontok
HTTP Live Streaming (HLS) — egy média streamelési protokoll, amelyet az Apple fejlesztett ki 2009-ben, és először az iOS 3.0-ban és a Safari-ban mutatták be. 2017-ben a protokollt internetes szabványként javasolták az RFC 8216-on keresztül, ami megerősítette nyílt specifikációkénti státuszát, amely bármely platformon implementálható.
A HLS alapötlete a folyamatos médiafolyam felosztása rövid, 2-10 másodperces szegmensekre. Minden szegmens egy önálló fájl, amely egy szokásos HTTP-kéréssel tölthető le. A folyam vezérlése M3U8 formátumú szöveges lejátszási listákon keresztül történik, amelyek linkeket tartalmaznak a szegmensekhez és metaadatokat a helyes lejátszáshoz.
Adaptivitás — a HLS kulcsfontosságú előnye. A szerver több verziót készít ugyanabból a tartalomból különböző bitrátákkal — 200 Kbps-tól gyenge kapcsolatokhoz egészen 20+ Mbps-ig 4K videóhoz. Az ügyfél automatikusan kiválasztja a megfelelő bitrátát a csatorna aktuális sávszélessége alapján. Az Apple kutatása szerint (WWDC 2024) az LL-HLS 500 ezredmásodpercre csökkenti a bitráták közötti váltási időt, biztosítva a minőség zökkenőmentes változását észrevehető szünetek nélkül.
Az első verzió HLS (2009) csak MPEG-2 TS szegmenseket támogatott AAC hangkodekkel és H.264 videókodekkel. Az iOS 8-ban (2014) hozzáadták az fMP4 (fragmented MP4) szegmensek támogatását, ami lehetővé tette a HLS használatát modernebb kodekekkel, beleértve a HEVC-t (H.265). Az iOS 11 (2017) bevezette a HDR10 és Dolby Vision támogatását. Az iOS 13 (2019) bevezette a Low-Latency HLS-t, csökkentve a késleltetést a hagyományos 6-30 másodpercről 2-6 másodpercre.
2023-ban az Apple kibővítette a HLS-t az AV1 és EVC (Essential Video Coding) kodekek támogatásával, valamint bevezette a Content Steeringet — egy mechanizmust az ügyfelek dinamikus átirányítására a CDN-szerverek között az optimális betöltés érdekében. A Content Steering lehetővé teszi a szerver számára, hogy menet közben megváltoztassa a szegmensek URL-jeit, átirányítva az ügyfelet a legközelebbi vagy legkevésbé terhelt CDN-csomópontra a lejátszás megszakítása nélkül.
A HLS architektúrája három fő komponensből áll: szerveroldal (origin-szerver + kódoló), elosztó hálózat (CDN) és ügyféloldal (HLS-t támogató lejátszó). A teljes folyamat — a videó rögzítésétől a felhasználó eszközén történő lejátszásig — több egymást követő szakaszt foglal magában, amelyek mindegyike kritikus a streamelés minősége szempontjából.
A forrásvideót először kódolják több változatba különböző bitrátákkal és felbontásokkal. A professzionális kódolók, mint az FFmpeg vagy az AWS Elemental MediaConvert, egyszerre 4-12 folyamváltozatot hoznak létre: 240p-től (400 Kbps) 4K-ig (40 Mbps). Minden változatot azonos hosszúságú szegmensekre vágnak, általában 2-6 másodpercre LL-HLS esetén vagy 6-10 másodpercre hagyományos HLS esetén.
Minden változathoz létrehoznak egy média lejátszási listát (variant playlist), amely tartalmazza az összes szegmens URL-jét és azok időtartamát. Emellett létrehoznak egy master lejátszási listát (master playlist), amely egyesíti az összes változatot, és információkat tartalmaz mindegyikről: felbontás, bitráta, kodek és hangsávok. Az ügyfél először a master lejátszási listát tölti le, majd a kapcsolat sebességének elemzése alapján kiválasztja a megfelelő változatot.
A szegmensek és lejátszási listák a felhasználókhoz földrajzilag közel elhelyezkedő CDN-szervereken vannak gyorsítótárazva. A szabványos HTTP protokoll használata a szállításhoz kritikus előnyt biztosít a HLS-nek: bármely CDN, terheléselosztó vagy proxy szerver, amely támogatja a HTTP-t, további konfiguráció nélkül működik a HLS-sel. Ez különbözteti meg a HLS-t a valós idejű protokolloktól, mint az RTMP vagy a WebRTC, amelyek speciális szervereket igényelnek.
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"
])
Az ügyféloldal bitráta kiválasztási algoritmust (ABR — Adaptive Bitrate) használ. A HLS-lejátszó letölti a master lejátszási listát, elemzi a rendelkezésre álló változatokat, és a legmegfelelőbb bitrátával kezdi a lejátszást. A lejátszás során a lejátszó folyamatosan figyeli a szegmensek letöltési sebességét és a puffer feltöltődését, döntést hozva a magasabb vagy alacsonyabb bitrátára váltásról. A modern ABR algoritmusok nemcsak a hálózati sebességet veszik figyelembe, hanem a puffer méretét, a tartalom típusát és akár az eszköz energiafogyasztását is.
A HLS folyam szerkezetének megértése szükséges a kódolás, az elosztás helyes konfigurálásához és a lejátszási problémák hibaelhárításához. Minden HLS folyam két szintű lejátszási listából és számos média szegmensből áll, amelyek szigorú hierarchiába vannak szervezve.
Master playlist — a belépési pont a HLS-lejátszó számára. A .m3u8 kiterjesztésű fájl linkeket tartalmaz az összes folyamváltozathoz (variant streams) és azok jellemzőihez. A lejátszó ezt a fájlt tölti le elsőként, és a bitrátákról és felbontásokról szóló információk alapján kezdeti döntést hoz a változat kiválasztásáról. A master lejátszási lista linkeket tartalmazhat alternatív hangsávokhoz, feliratokhoz és I-Frame lejátszási listákhoz a gyors visszatekeréshez.
#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 közvetlenül tartalmazza a szegmensek listáját egy folyamváltozathoz. Minden szegmens időtartammal és URI-val van megadva. A média lejátszási lista lehet statikus (VOD esetén — az összes szegmens teljes listája) vagy dinamikusan frissülő (élő közvetítések esetén — a régi szegmensek törlődnek, újak kerülnek hozzáadásra).
#EXTM3U
#EXT-X-TARGETDURATION:6
#EXTINF:6.000,
segment001.ts
#EXTINF:6.000,
segment002.ts
#EXT-X-ENDLIST
A HLS két fő média szegmensformátumot támogat: MPEG-2 Transport Stream (.ts) és Fragmented MP4 (.m4s vagy .mp4). MPEG-2 TS — az eredeti HLS formátum, amely maximális kompatibilitást biztosít. fMP4 — egy modernebb formátum, amely támogatja a HDR-t, a HEVC-t és a hatékonyabb tömörítést. Az Apple az fMP4-et ajánlja minden új projekthez az iOS 10 és macOS Sierra óta.
A HLS folyam további elemei közé tartoznak az I-Frame lejátszási listák a gyors visszatekeréshez, az ID3 metaadatok a feliratok és reklámjelzők szinkronizálásához, valamint a Session Data a megtekintési információk analitikai szerverre történő továbbításához. Mindezek az elemek opcionálisak, de használatuk javítja a felhasználói élmény minőségét.
A HLS számos architekturális előnyének köszönhetően dominál a videostreamelési piacon, de vannak korlátai is, amelyeket figyelembe kell venni a protokoll kiválasztásakor egy adott projekthez. Hasonlítsuk össze a HLS-t alternatív videószállítási protokollokkal.
| Jellemző | HLS | DASH | RTMP |
|---|---|---|---|
| Szállítás | HTTP (80/443) | HTTP (80/443) | TCP (1935) |
| Adaptivitás | Igen (ABR) | Igen (ABR) | Nem |
| Alacsony késleltetés | 2-6 mp (LL-HLS) | 3-8 mp (LL-DASH) | 0.5-2 mp |
| HDR támogatás | Igen (iOS 11+) | Igen | Korlátozott |
| Natív iOS | Igen (Safari, AVPlayer) | Harmadik féltől származó lejátszókon keresztül | Nem |
| CDN egyszerűség | Maximális (HTTP) | Maximális (HTTP) | Speciális szerverek |
A HLS fő előnye — natív támogatás az összes Apple eszközön (iPhone, iPad, Apple TV, Mac) a beépített AVPlayeren keresztül. Ez teszi a HLS-t de facto szabvánnyá az iOS/macOS alkalmazások számára. Emellett a szabványos HTTP használata a szállításhoz lehetővé teszi a tartalom gyorsítótárazását bármely CDN-en és proxy szerveren további konfiguráció nélkül, ami jelentősen leegyszerűsíti a szállítási infrastruktúrát.
A HLS hátrányai közé tartozik a magasabb késleltetés az RTMP-hez vagy WebRTC-hez képest élő közvetítések esetén. Még LL-HLS-sel is a minimális késleltetés 2-6 másodperc, ami elfogadhatatlan interaktív valós idejű forgatókönyvek esetén. Továbbá a HLS több fájlt generál a szerveren (minden szegmens egy külön fájl), ami nagy számú egyidejű közvetítés esetén terhelheti a fájlrendszert.
A HLS integrációja a mobilalkalmazásokban platformonként eltérő. iOS-en és macOS-en a HLS operációs rendszer szintjén támogatott az AVFoundation és AVPlayer segítségével, ami hardveres dekódolási gyorsítást és minimális energiafogyasztást biztosít. Androidon a HLS-t a beépített MediaPlayer nem támogatja, de elérhető az ExoPlayeren — a Google hivatalos média lejátszóján — keresztül.
Az Apple platformon a HLS lejátszása rendkívül egyszerű a AVPlayer beépített támogatásának köszönhetően. Elég létrehozni egy AVPlayert a master lejátszási lista URL-jével, és a rendszer automatikusan kezeli az adaptív bitráta váltást, a hangsávok kiválasztását és a feliratok feldolgozását. A fejlesztő eközben teljes hozzáféréssel rendelkezik a lejátszás vezérléséhez az AVPlayerItem és AVAssetResourceLoader segítségével.
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()
}
Android esetén az ExoPlayer használatos, amely egy külön bővítőmodulon keresztül támogatja a HLS-t. Az ExoPlayer finomabb vezérlést biztosít a HLS folyam felett: a bitráta kiválasztása menedzselhető, a pufferelés konfigurálható, és a szegmensbetöltési hibák egyénileg feldolgozhatók. Az LL-HLS-hez ExoPlayer 2.14.0 vagy újabb verzió szükséges.
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()
A mobilalkalmazások különleges megközelítést igényelnek a HLS konfigurálásához a celluláris hálózatok instabilitása és a forgalmi korlátozások miatt. A fő ajánlások a következőket foglalják magukban: a kezdeti bitráta beállítása a hálózat típusa alapján (Wi-Fi vagy celluláris), rövidebb szegmens időtartam (2-4 másodperc) használata a gyorsabb alkalmazkodáshoz, a puffer előzetes betöltése Wi-Fi-re váltáskor, valamint a hangsáv előnyben részesítése gyenge jel esetén.
Az Apple a HLS Authoring Specification for Apple Devices (2024) dokumentációjában legfeljebb 6 másodperces szegmensméretet javasol mobileszközökhöz és legalább 4 bitráta változatot. A mobil hálózatokon történő forgalom megtakarítása érdekében a szervernek Cache-Control HTTP fejléccel kell szolgálnia a szegmenseket, lehetővé téve a tartalom gyorsítótárazását a távközlési szolgáltatók közbenső proxy szerverein.
Gyakran Ismételt Kérdések
MP4 — egy tároló a teljes videófájl számára, amelyet a lejátszás megkezdése előtt teljesen le kell tölteni. A HLS a videót kis szegmensekre bontja, és lehetővé teszi a nézés megkezdését 2-6 másodperccel az első szegmens letöltése után, automatikusan hozzáigazítva a minőséget az internet sebességéhez.
Igen, a HLS nem igényel Apple szerver szoftvert. Bármely HTTP szerver (Nginx, Apache, CDN) terjeszthet HLS tartalmat. A videó HLS-be kódolásához FFmpeg vagy professzionális kódolók használatosak. Az egyetlen követelmény a .m3u8 fájlok MIME típusának helyes konfigurálása.
Igen, a HLS-t eredetileg élő közvetítésre tervezték. Élő közvetítés esetén a média lejátszási lista dinamikusan frissül: a szerver új szegmenseket ad hozzá és eltávolítja a régieket. A Low-Latency HLS (LL-HLS) 2-6 másodpercre csökkenti a késleltetést, ami alkalmassá teszi a HLS-t sportközvetítések és hírműsorok számára.
Master playlist egyesíti ugyanazon tartalom összes változatát különböző bitrátákkal és felbontásokkal. A lejátszó ezt tölti le elsőként, elemzi az egyes változatok jellemzőit (bitráta, felbontás, kodek), és kiválasztja az aktuális hálózati körülményekhez optimálisat. Master lejátszási lista nélkül az adaptív minőségváltás lehetetlen.
A HLS támogatja a szegmensek AES-128 titkosítását és az integrációt DRM rendszerekkel: FairPlay Streaming (Apple), Widevine (Google) és PlayReady (Microsoft). A titkosítási kulcsok egy külön védett csatornán kerülnek továbbításra. Kiegészítő védelemként token alapú hitelesítés használható a lejátszási listákhoz való hozzáféréshez.
Összefoglalás
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is