A Dynamic Adaptive Streaming over HTTP (DASH) egy nemzetközi szabvány az adaptív multimédiás adatfolyam-átvitelre, amelyet az MPEG (Moving Picture Experts Group) fejlesztett ki. A DASH a videó és audió HTTP-n keresztüli szállítását biztosítja, XML formátumú adatfolyam-leírást (Media Presentation Description, MPD) használva, és a tartalmat különböző bitsebességű szegmensekre bontva. A Bitmovin Video Developer Report (2025) tanulmánya szerint a videófejlesztők 58%-a használ DASH-t, ami a HLS után a második legnépszerűbb protokollá teszi.
Főbb pontok
MPEG-DASH (Dynamic Adaptive Streaming over HTTP) — egy ISO/IEC 23009-1 nemzetközi szabvány, amelyet 2012-ben tettek közzé válaszul az adaptív adatfolyam-továbbítás saját tulajdonú megoldásainak széttöredezésére. Ellentétben a HLS-sel (Apple saját protokollja) és a Smooth Streaminggel (Microsoft), a DASH-t kezdettől fogva nyílt, adott gyártóhoz nem kötött szabványként fejlesztették, ami biztosította széles iparági támogatását.
A DASH fő innovációja — az adatfolyam leírásának és a médiatartalomnak a szétválasztása. Az adatfolyam leírása az MPD (Media Presentation Description) XML fájlban tárolódik, amely tartalmazza az összes információt a rendelkezésre álló változatokról: bitsebességek, felbontások, kodekek, feliratok, hangsávok. A médiatartalom különálló szegmensekben (általában fMP4) tárolódik, amelyek egymástól függetlenül tölthetők le HTTP-n keresztül. Ez az architektúra lehetővé teszi, hogy a szerver infrastruktúra maximálisan egyszerű legyen — bármely HTTP szerver képes DASH tartalmat kiszolgálni.
A DASH adaptivitása ugyanazon tartalom változatainak multiplexálásával valósul meg. A szerver több Reprezentációt készít elő — a tartalom különböző tömörítési paraméterű másolatait. A kliens elemzi a csatorna sávszélességét és dinamikusan vált a reprezentációk között, kiválasztva a minőség és a lejátszás stabilitásának optimális arányát. Akadémiai kutatás (IEEE Access, 2024) szerint a DASH a BOLA algoritmussal 22%-kal kevesebb bitsebesség-váltást mutat a HLS-hez képest instabil kapcsolat esetén.
MPEG 2010-ben kezdte meg a munkát a DASH-en a meglévő megoldások elemzése után: Apple HLS, Microsoft Smooth Streaming és Adobe HDS. A szabvány első verziója (ISO/IEC 23009-1:2012) 2012-ben jelent meg. A második verzió (2014) hozzáadta az események támogatását, a továbbfejlesztett reklámbeszúrást és a szerver által irányított adaptációt. A harmadik verzió (2019) — a HDR, 8K, tapintási videó támogatását és a továbbfejlesztett integrációt az MMT-vel (MPEG Media Transport) az 5G hálózatok számára.
2024-ben az MPEG bejelentette a DASH Next Generation változatát, amely magában foglalja a neurális hálózati kodekek támogatását, a felhőalapú renderelést és az Extended Reality (XR) forgatókönyvek optimalizálását. A kulcsinnováció — a Neural Network-Based Video Coding (NNVC), amely ML modelleket használ a kliens oldali dekódoláshoz, ami 30-50%-kal csökkentheti a bitsebességet a minőség megőrzése mellett.
A DASH adatfolyam lejátszásának folyamata négy egymást követő szakaszból áll: az MPD megszerzése, az adatfolyam leírásának elemzése, a kezdeti reprezentáció kiválasztása és a reprezentációk közötti dinamikus váltás. Minden szakasznak megvan a maga sajátossága, amely befolyásolja a felhasználói élmény minőségét.
A lejátszó betölti az MPD fájlt egy ismert URL-ről. Az MPD egy XML struktúrát tartalmaz a teljes adatfolyam leírásával: a tartalom időtartama, időskála, rendelkezésre álló időszakok (Period), adaptációs készletek (AdaptationSet) és reprezentációk (Representation) konkrét kódolási paraméterekkel. A lejátszó elemzi az MPD-t és létrehozza a rendelkezésre álló média erőforrások belső modelljét.
Példa egy alap MPD fájlra két felbontású VOD tartalomhoz:
<?xml version="1.0" encoding="utf-8"?>
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011"
profiles="urn:mpeg:dash:profile:isoff-live:2011"
type="static"
mediaPresentationDuration="PT1H30M">
<Period duration="PT1H30M">
<AdaptationSet mimeType="video/mp4">
<Representation bandwidth="5000000"
width="1920" height="1080"
codecs="avc1.640028"/>
<Representation bandwidth="1000000"
width="640" height="360"
codecs="avc1.64001E"/>
</AdaptationSet>
</Period>
</MPD>
A kezdeti reprezentáció kiválasztása után a lejátszó elkezdi betölteni a szegmenseket. Minden szegmens néhány másodpercnyi tartalmat tartalmaz (általában 2-10 másodperc). A lejátszó pufferel néhány szegmenst előre, ami biztosítja a hálózati sebesség rövid távú csökkenéseivel szembeni ellenállást. A reprezentáció kiválasztási algoritmus (ABR) folyamatosan figyeli a szegmensek betöltési sebességét és dönt a rendelkezésre álló bitsebességek közötti váltásról.
A DASH modern ABR algoritmusai, mint a BOLA (Buffer Occupancy based Lyapunov Algorithm) és a Pensieve (Reinforcement Learning alapú), nemcsak a jelenlegi sávszélességet, hanem a puffer méretét, a tartalom típusát (sport, hírek, film) és még az eszköz energiafogyasztását is figyelembe veszik. A BOLA, amely a dash.js és az ExoPlayer része, minimalizálja a bitsebesség-váltások számát a stabil puffer fenntartása mellett, amit az ACM kutatások (Spiteri et al., 2020) is megerősítettek.
A DASH adatfolyam hierarchikus felépítése négy szinten szerveződik: MPD → Period → AdaptationSet → Representation. Minden szint hozzáad egy részletességi szintet, lehetővé téve összetett forgatókönyvek leírását — az egyszerű VOD-tól a reklámbeszúrásokkal és többkamerás videóval ellátott élő közvetítésekig.
MPD — a gyökérelem, amely a teljes média prezentációt írja le. Az MPD attribútumai meghatározzák az adatfolyam típusát (static VOD-hoz, dynamic élő közvetítéshez), a teljes időtartamot, az időskálát, a profilt és a DRM-re vonatkozó információkat. Az MPD egy vagy több Period-ot tartalmazhat, amelyek mindegyike a tartalom egy független időintervallumát képviseli.
Period — a prezentáció időbeli szegmense. VOD esetén egy Period-ot használnak a teljes tartalomhoz. Reklámbeszúrásokkal ellátott élő közvetítés esetén a Period dinamikusan változhat — a lejátszó betölti a frissített MPD-t és észleli az új Period-ot, amely a reklámblokknak felel meg. Minden Period egy vagy több AdaptationSet-et tartalmaz.
AdaptationSet — azonos médiatípus (videó, audio, felirat) egymással felcserélhető reprezentációinak csoportja. Az AdaptationSet-en belül minden reprezentáció csak bitsebességben és/vagy felbontásban különbözik, de ugyanazt a tartalmat kódolja. Fontos tulajdonság: a lejátszó képes váltani a reprezentációk között ugyanazon AdaptationSet-en belül a szegmensek határán a lejátszás megszakítása nélkül.
Representation — egy konkrét kódolási változat meghatározott bitsebességgel, felbontással és kodekkel. Minden Reprezentációhoz az MPD-ben meg van adva egy URL sablon a szegmensek betöltéséhez. A DASH rugalmas szegmenscímzési rendszert használ — URL sablonokon keresztül a szegmensszám és idő behelyettesítésével ($Number$, $Time$), ami lehetővé teszi a szerver számára a fájlnevek dinamikus generálását anélkül, hogy minden szegmenst fel kellene sorolni az MPD-ben.
A DASH szegmensei két típusúak lehetnek: Segment típus (csak médiaadatokat tartalmaz) és Subsegment típus (egy szegmens része finomabb hozzáféréshez). A DASH tartalom kódolásához olyan eszközöket használnak, mint az FFmpeg vagy csomagkódolók. Példa DASH adatfolyam létrehozására egy bemeneti fájlból:
import subprocess
subprocess.run([
"ffmpeg",
"-i", "input.mp4",
"-filter_complex",
"[0:v]split=2[v1][v2];[v1]scale=1920:1080[v1out];[v2]scale=640:360[v2out]",
"-map", "[v1out]", "-b:v:0", "5000k",
"-map", "[v2out]", "-b:v:1", "1000k",
"-map", "0:a",
"-f", "dash",
"-seg_duration", "4",
"-use_template", "1",
"-use_timeline", "1",
"dash/stream.mpd"
])
A DASH és HLS közötti választás az egyik kulcsfontosságú döntés a videó streamelő rendszer tervezésekor. Mindkét protokoll ugyanazt a feladatot oldja meg (adaptív HTTP videó szállítás), de alapvető különbségek vannak az architektúrában, a kodek támogatásban és az ökoszisztémában. Vizsgáljuk meg őket a fő paraméterek szerint.
| Paraméter | DASH | HLS |
|---|---|---|
| Szabvány | Nemzetközi (ISO/IEC 23009-1) | Saját tulajdonú (RFC 8216, Apple) |
| Adatfolyam leírása | XML (MPD) | M3U8 lejátszási lista |
| Kodekek | Bármilyen (H.264, HEVC, AV1, VP9) | Korlátozott (H.264, HEVC, AV1 2023-tól) |
| Szegmens formátum | fMP4 (elsődleges), MPEG-2 TS | MPEG-2 TS, fMP4 |
| DRM | CENC (egységes az összes DRM-hez) | FairPlay, Widevine (külön) |
| iOS támogatás | Harmadik féltől származó lejátszókon keresztül | Natív (AVPlayer, Safari) |
| Böngészők | Chrome, Firefox, Edge (MSE-n keresztül) | Safari (natív), többi MSE-n keresztül |
A DASH fő előnye — a kodekektől való függetlenség. Míg a HLS eredetileg a kodekeket az Apple által támogatottakra korlátozta (H.264, HEVC, és nemrég AV1), addig a DASH bármilyen, a lejátszó által támogatott kodeket használhat: VP9/VP8 (kritikus a YouTube és Chrome számára), AV1 (hatékonyságért), H.264/HEVC (kompatibilitásért). Ez teszi a DASH-t előnyös választássá a platformfüggetlen szolgáltatások számára, ahol egységes adatfolyamra van szükség minden eszközhöz.
A DASH hátránya iOS-en — a natív támogatás hiánya a Safariban és az AVPlayerben. Az iOS alkalmazások fejlesztőinek harmadik féltől származó HLS-kompatibilis lejátszókat vagy olyan könyvtárakat kell használniuk, mint a libdash VTDecoderen keresztüli integrációval. A gyakorlatban ez azt jelenti, hogy az iOS-központú projekteknél a HLS marad a de facto szabvány, míg az Android és web platformok esetében a DASH rugalmasabb és hatékonyabb megoldás.
A DASH integrációja a mobilalkalmazásokban platformfüggő. Androidon a DASH közvetlenül támogatott az ExoPlayer bővítőmodulján keresztül. iOS-en harmadik féltől származó könyvtárak használata szükséges, mint a libdash AVFoundationon keresztüli integrációval vagy az MPEGDASHPlayer. Tekintsük át a gyakorlati megvalósítást mindkét platformra.
A Google ExoPlayer beépített DASH támogatást nyújt az `exoplayer-dash` modulon keresztül. A DASH adatfolyam csatlakoztatása nem különbözik más formátumoktól — elég megadni az MPD fájl URI-ját a MediaItem-ben. Az ExoPlayer automatikusan meghatározza a tartalom formátumát és elindítja a megfelelő renderelőt, támogatva az összes szabványos ABR algoritmust.
val player = ExoPlayer.Builder(this).build()
val dashMediaItem = MediaItem
.Builder()
.setUri("https://example.com/dash/stream.mpd")
.setMimeType("application/dash+xml")
.build()
player.setMediaItem(dashMediaItem)
player.prepare()
player.playWhenReady = true
Common Encryption (CENC) — a DASH egyik kulcsképessége, amely lehetővé teszi egyetlen média adatfolyam használatát különböző DRM rendszerekkel. Az MPD fájl ContentProtection XML elemeket tartalmaz a DRM rendszerek azonosítóival (Widevine, PlayReady, FairPlay). A kliens a platformja alapján kiválasztja a megfelelő DRM rendszert, és licencet kér a licencszerveren keresztül.
val drmLicenseUri = Uri.parse("https://license.example.com/wv")
val drmSessionManager = DefaultDrmSessionManager
.Builder()
.setUuidAndExoMediaDrmProvider(
C.WIDEVINE_UUID,
FrameworkMediaDrm.DEFAULT_PROVIDER
)
.build(drmLicenseUri, null)
val mediaItem = MediaItem
.Builder()
.setUri("https://example.com/encrypted/stream.mpd")
.setDrmConfiguration(
MediaItem.DrmConfiguration.Builder(C.WIDEVINE_UUID)
.setLicenseUri("https://license.example.com/wv")
.build()
)
.build()
A mobilalkalmazások a sávszélesség és energiafogyasztás korlátai miatt a DASH speciális beállítását igénylik. A fő ajánlások a következők: minimum 2-3 szegmensből álló puffer beállítása a rövid távú sebességcsökkenésekkel szembeni ellenálláshoz, 2-4 másodperces szegmensek használata a hálózati változásokra való gyorsabb reagáláshoz, és a következő szegmens előzetes betöltése minőségváltáskor.
A mobil hálózatokban való adatforgalom megtakarítása érdekében a Bitmovin (2024) a Content Steering használatát javasolja — egy olyan mechanizmust, amely hasonló a HLS analóg funkciójához, lehetővé téve a kliens dinamikus irányítását az optimális CDN csomóponthoz. A DASH Content Steering az ISO/IEC 23009-1:2022 specifikációban van leírva, és a dash.js 4.5+ és ExoPlayer 2.18+ támogatja.
Gyakran ismételt kérdések
DASH — nyílt nemzetközi MPEG szabvány, nem kötődik gyártóhoz. Ellentétben a HLS-sel (Apple saját protokollja), a DASH bármilyen kodeket támogat, XML adatfolyam leírást (MPD) használ M3U8 helyett, és egységes DRM rendszert biztosít a CENC-en keresztül. A HLS natív támogatással rendelkezik iOS-en, a DASH rugalmasabb a platformfüggetlen megoldásokhoz.
Androidon a DASH fő lejátszója a Google ExoPlayere az exoplayer-dash modullal. iOS-en harmadik féltől származó megoldásokat használnak, mint a libdash AVFoundationon keresztüli integrációval vagy kereskedelmi lejátszók (THEOplayer, Bitmovin). Webböngészőkben a DASH a dash.js segítségével játszható le MediaSource Extensions használatával.
MPD (Media Presentation Description) — egy XML fájl, amely leírja a DASH adatfolyam szerkezetét: a tartalom időtartamát, a rendelkezésre álló bitsebességeket, felbontásokat, kodekeket, szegmensformátumokat és azok elhelyezkedését. Az MPD belépési pontként szolgál a lejátszó számára, helyettesítve a HLS fő lejátszási listáját. MPD fájl nélkül a DASH tartalom lejátszása lehetetlen.
Igen, a DASH támogatja a VOD és az élő közvetítéseket is. Az élő közvetítésekhez a dynamic típusú MPD-t használják automatikus frissítéssel. A szerver időszakosan frissíti az MPD-t, új szegmenseket adva hozzá és eltávolítva a régieket. A Low-Latency DASH (LL-DASH) chunked encoding segítségével 3-8 másodperces késleltetést tesz lehetővé, ami összehasonlítható az LL-HLS-sel.
DASH a Common Encryption (CENC, ISO/IEC 23001-7) rendszert használja, amely lehetővé teszi a médiatartalom egyszeri titkosítását és bármely DRM rendszer általi visszafejtését. Az MPD ContentProtection XML elemeket tartalmaz a támogatott DRM-ek (Widevine, PlayReady, FairPlay) megjelölésével. A lejátszó a platform alapján kiválasztja a megfelelő DRM-et, és licencet kér a megadott URL-en keresztül.
Ö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