DASH — co to je, protokol a princip fungování dynamického streamování

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

Dynamic Adaptive Streaming over HTTP (DASH) je mezinárodní standard adaptivního streamování multimédií vyvinutý organizací MPEG (Moving Picture Experts Group). DASH zajišťuje doručování videa a zvuku přes HTTP pomocí popisu streamu ve formátu XML nazvaného Media Presentation Description (MPD) a rozděluje obsah na segmenty různých bitových rychlostí. Podle studie Bitmovin Video Developer Report (2025) používá DASH 58 % vývojářů videa, což z něj činí druhý nejoblíbenější protokol po HLS.

Hlavní body

  • DASH — je otevřený mezinárodní standard MPEG pro adaptivní streamování přes HTTP.
  • Soubor MPD (Media Presentation Description) řídí stream prostřednictvím XML struktury s popisem období a sad adaptace.
  • Kodeky nejsou omezeny specifikací — DASH podporuje H.264, HEVC, AV1, VP9, AAC a další.
  • DRM je implementováno prostřednictvím Common Encryption (CENC), které podporuje Widevine, PlayReady a FairPlay v jednom streamu.
  • Multiplatformnost DASH je zajištěna prostřednictvím ExoPlayer (Android), dash.js (prohlížeče) a libdash.

Co je DASH?

MPEG-DASH (Dynamic Adaptive Streaming over HTTP) — je mezinárodní standard ISO/IEC 23009-1, publikovaný v roce 2012 jako odpověď na fragmentaci proprietárních řešení adaptivního streamování. Na rozdíl od HLS (proprietární protokol Apple) a Smooth Streaming (Microsoft) byl DASH od samého počátku vyvíjen jako otevřený standard nezá vislý na konkrétním dodavateli, což zajistilo jeho širokou podporu v průmyslu.

Hlavní inovací DASH — oddělení popisu streamu a mediálního obsahu. Popis streamu je uložen v XML souboru MPD (Media Presentation Description), který obsahuje všechny informace o dostupných variantách: bitové rychlosti, rozlišení, kodeky, titulky, zvukové stopy. Mediální obsah je uložen ve formě samostatných segmentů (obvykle fMP4), které lze nezávisle stahovat přes HTTP. Taková architektura umožňuje, aby serverová infrastruktura byla maximálně jednoduchá — jakýkoli HTTP server je schopen distribuovat obsah DASH.

Adaptivita DASH je realizována multiplexováním variant stejného obsahu. Server připraví několik reprezentací — kopie obsahu s různými parametry komprese. Klient analyzuje šířku pásma kanálu a dynamicky přepíná mezi reprezentacemi, přičemž volí optimální poměr kvality a stability přehrávání. Podle akademického výzkumu (IEEE Access, 2024) vykazuje DASH s algoritmem BOLA o 22 % méně přepínání bitové rychlosti ve srovnání s HLS při nestabilním připojení.

Historie a standardizace DASH

MPEG zahájil práci na DASH v roce 2010 po analýze stávajících řešení: Apple HLS, Microsoft Smooth Streaming a Adobe HDS. První verze standardu (ISO/IEC 23009-1:2012) byla vydána v roce 2012. Druhá verze (2014) přidala podporu událostí, vylepšené vkládání reklam a adaptaci řízenou serverem. Třetí verze (2019) — podporu HDR, 8K, taktilního videa a vylepšenou integraci s MMT (MPEG Media Transport) pro sítě 5G.

V roce 2024 MPEG oznámil DASH Next Generation, který zahrnuje podporu neuronových kodeků, cloudové vykreslování a optimalizaci pro scénáře Extended Reality (XR). Klíčovou inovací je Neural Network-Based Video Coding (NNVC), který využívá ML modely pro dekódování na straně klienta, což může snížit bitovou rychlost o 30-50 % při zachování kvality.

Jak DASH funguje?

Proces přehrávání streamu DASH se skládá ze čtyř po sobě jdoucích fází: získání MPD, parsování popisu streamu, výběr počáteční reprezentace a dynamické přepínání mezi reprezentacemi. Každá fáze má svá specifika ovlivňující kvalitu uživatelského zážitku.

Získání a parsování MPD

Přehrávač načte soubor MPD ze známé URL. MPD obsahuje XML strukturu s popisem celého streamu: délku obsahu, časovou osu, dostupná období (Period), sady adaptace (AdaptationSet) a reprezentace (Representation) s konkrétními parametry kódování. Přehrávač parsuje MPD a vytváří interní model dostupných mediálních zdrojů.

Příklad základního souboru MPD pro obsah VOD se dvěma rozlišeními:

xml
<?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>

Načítání segmentů a adaptace

Po výběru počáteční reprezentace začne přehrávač načítat segmenty. Každý segment obsahuje několik sekund obsahu (obvykle 2-10 sekund). Přehrávač udržuje buffer na několik segmentů dopředu, což zajišťuje odolnost vůči krátkodobým poklesům rychlosti sítě. Algoritmus výběru reprezentace (ABR) neustále monitoruje rychlost načítání segmentů a rozhoduje o přepínání mezi dostupnými bitovými rychlostmi.

Moderní ABR algoritmy pro DASH, jako jsou BOLA (Buffer Occupancy based Lyapunov Algorithm) a Pensieve (založený na Reinforcement Learning), berou v úvahu nejen aktuální šířku pásma, ale také velikost bufferu, typ obsahu (sport, zprávy, film) a dokonce i spotřebu energie zařízení. BOLA, který je součástí dash.js a ExoPlayer, minimalizuje počet přepnutí bitové rychlosti při zachování stabilního bufferu, což bylo potvrzeno výzkumy ACM (Spiteri et al., 2020).

Struktura DASH: MPD, Period, Adaptation Set

Hierarchická struktura streamu DASH je organizována na čtyřech úrovních: MPD → Period → AdaptationSet → Representation. Každá úroveň přidává úroveň detailu a umožňuje popis složitých scénářů — od jednoduchého VOD po živé přenosy s reklamními vložkami a multiúhlovým videem.

MPD (Media Presentation Description)

MPD — kořenový prvek, který popisuje celou mediální prezentaci. Atributy MPD určují typ streamu (static pro VOD, dynamic pro živé vysílání), celkovou dobu trvání, časovou osu, profil a informace o DRM. MPD může obsahovat jedno nebo více období Period, z nichž každé představuje nezávislý časový interval obsahu.

Period, AdaptationSet a Representation

Period — časový segment prezentace. Pro VOD se používá jedna Perioda pro celý obsah. Pro živé vysílání s reklamními vložkami se Perioda může dynamicky měnit — přehrávač načte aktualizovaný MPD a detekuje novou Periodu odpovídající reklamnímu bloku. Každá Perioda obsahuje jednu nebo více sad AdaptationSet.

AdaptationSet — skupina vzájemně zaměnitelných reprezentací stejného typu média: video, audio, titulky. Uvnitř AdaptationSet se všechny reprezentace liší pouze bitovou rychlostí a/nebo rozlišením, ale kódují stejný obsah. Důležitá vlastnost: přehrávač může přepínat mezi reprezentacemi v rámci stejného AdaptationSet na hranici segmentů bez přerušení přehrávání.

Representation — konkrétní varianta kódování s určitou bitovou rychlostí, rozlišením a kodekem. Pro každou reprezentaci je v MPD uvedena URL šablona pro načítání segmentů. DASH používá flexibilní systém adresování segmentů — prostřednictvím URL šablon s dosazováním čísla segmentu a času ($Number$, $Time$), což serveru umožňuje dynamicky generovat názvy souborů bez nutnosti vyjmenovávat každý segment v MPD.

Segmentace a balení

Segmenty DASH mohou být dvou typů: typ Segment (obsahují pouze mediální data) a typ Subsegment (část segmentu pro jemnější přístup). Pro kódování obsahu DASH se používají nástroje jako FFmpeg nebo paketové kodéry. Příklad vytvoření streamu DASH ze vstupního souboru:

python
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"
])

DASH vs HLS: srovnání protokolů

Volba mezi DASH a HLS je jedním z klíčových rozhodnutí při návrhu systému streamování videa. Oba protokoly řeší stejný úkol (adaptivní doručování videa přes HTTP), ale mají zásadní rozdíly v architektuře, podpoře kodeků a ekosystému. Podívejme se na ně podle klíčových parametrů.

ParametrDASHHLS
StandardMezinárodní (ISO/IEC 23009-1)Proprietární (RFC 8216, Apple)
Popis streamuXML (MPD)M3U8 playlist
KodekyLibovolné (H.264, HEVC, AV1, VP9)Omezené (H.264, HEVC, AV1 od 2023)
Formát segmentůfMP4 (hlavní), MPEG-2 TSMPEG-2 TS, fMP4
DRMCENC (jednotné pro všechna DRM)FairPlay, Widevine (odděleně)
Podpora iOSProstřednictvím přehrávačů třetích stranNativní (AVPlayer, Safari)
ProhlížečeChrome, Firefox, Edge (přes MSE)Safari (nativně), ostatní přes MSE

Klíčová výhoda DASH — nezávislost na kodecích. Zatímco HLS původně omezoval kodeky na ty podporované Apple (H.264, HEVC a od nedávna AV1), DASH může použít jakýkoli kodek podporovaný přehrávačem: VP9/VP8 (kritické pro YouTube a Chrome), AV1 (pro efektivitu), H.264/HEVC (pro kompatibilitu). To činí DASH preferovanou volbou pro multiplatformní služby, kde je vyžadován jednotný stream pro všechna zařízení.

Nevýhoda DASH na iOS — chybějící nativní podpora v Safari a AVPlayer. Vývojáři iOS aplikací musí používat přehrávače třetích stran kompatibilní s HLS nebo knihovny jako libdash s integrací přes VTDecoder. V praxi to znamená, že pro projekty zaměřené na iOS zůstává HLS de facto standardem, zatímco pro Android a webové platformy je DASH flexibilnějším a výkonnějším řešením.

Použití DASH ve vývoji mobilních aplikací

Integrace DASH do mobilních aplikací závisí na platformě. Na Androidu je DASH podporován přímo přes ExoPlayer s rozšiřujícím modulem. Na iOS je vyžadováno použití knihoven třetích stran, jako je libdash s integrací přes AVFoundation nebo MPEGDASHPlayer. Podívejme se na praktickou implementaci pro obě platformy.

DASH na Androidu přes ExoPlayer

ExoPlayer od Google poskytuje vestavěnou podporu DASH prostřednictvím modulu `exoplayer-dash`. Připojení streamu DASH se neliší od jiných formátů — stačí předat URI souboru MPD do MediaItem. ExoPlayer automaticky určí formát obsahu a spustí příslušný renderer, přičemž podporuje všechny standardní ABR algoritmy.

kotlin
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

DASH s DRM na obou platformách

Common Encryption (CENC) — jedna z klíčových schopností DASH, umožňující použití jednoho mediálního streamu s různými DRM systémy. Soubor MPD obsahuje XML elementy ContentProtection s identifikátory DRM systémů (Widevine, PlayReady, FairPlay). Klient vybere vhodný DRM systém na základě své platformy a požádá o licenci prostřednictvím licenčního serveru.

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

Optimalizace DASH pro mobilní zařízení

Mobilní aplikace vyžadují speciální nastavení DASH kvůli omezením šířky pásma a spotřeby energie. Hlavní doporučení zahrnují: nastavení minimálního bufferu na 2-3 segmenty pro odolnost vůči krátkodobým poklesům rychlosti, použití segmentů o délce 2-4 sekund pro rychlejší reakci na změny sítě a přednačítání následujícího segmentu při přepínání kvality.

Pro úsporu přenosu dat v mobilních sítích Bitmovin (2024) doporučuje použití Content Steering — mechanismu podobného analogické funkci HLS, který umožňuje dynamické směrování klienta na optimální uzel CDN. DASH Content Steering je popsán ve specifikaci ISO/IEC 23009-1:2022 a je podporován v dash.js 4.5+ a ExoPlayer 2.18+.

Často kladené otázky

Čím se liší DASH od HLS?

DASH — otevřený mezinárodní standard MPEG, nezávislý na dodavateli. Na rozdíl od HLS (proprietární protokol Apple) podporuje DASH libovolné kodeky, používá popis streamu XML (MPD) namísto M3U8 a poskytuje jednotný DRM systém prostřednictvím CENC. HLS má nativní podporu na iOS, DASH je flexibilnější pro multiplatformní řešení.

Které přehrávače podporují DASH na mobilních zařízeních?

Na Androidu je hlavním přehrávačem pro DASH ExoPlayer od Google s modulem exoplayer-dash. Na iOS se používají řešení třetích stran, jako je libdash s integrací přes AVFoundation nebo komerční přehrávače (THEOplayer, Bitmovin). Ve webových prohlížečích se DASH přehrává prostřednictvím dash.js s využitím MediaSource Extensions.

Co je MPD v kontextu DASH?

MPD (Media Presentation Description) — je XML soubor, který popisuje strukturu streamu DASH: dobu trvání obsahu, dostupné bitové rychlosti, rozlišení, kodeky, formáty segmentů a jejich umístění. MPD slouží jako vstupní bod pro přehrávač a nahrazuje hlavní playlist v HLS. Bez souboru MPD není přehrávání obsahu DASH možné.

Podporuje DASH živé přenosy?

Ano, DASH podporuje jak VOD, tak živé vysílání. Pro živé vysílání se používá dynamic typ MPD s automatickou aktualizací. Server periodicky aktualizuje MPD, přidává nové segmenty a odstraňuje zastaralé. Low-Latency DASH (LL-DASH) s chunked encoding umožňuje dosáhnout zpoždění 3-8 sekund, srovnatelného s LL-HLS.

Jak funguje DRM v DASH?

DASH používá Common Encryption (CENC, ISO/IEC 23001-7), který umožňuje zašifrovat mediální obsah jednou a dešifrovat jej libovolným DRM systémem. MPD obsahuje XML elementy ContentProtection s označením podporovaných DRM (Widevine, PlayReady, FairPlay). Přehrávač vybere vhodné DRM na základě platformy a požádá o licenci prostřednictvím zadané URL.

Shrnutí

  • MPEG-DASH — otevřený mezinárodní standard adaptivního HTTP streamování s popisem streamu ve formátu XML MPD.
  • Nezávislost na kodecích — DASH podporuje H.264, HEVC, AV1, VP9 a jakékoli další kodeky dostupné přehrávači.
  • CENC zajišťuje jednotné šifrování obsahu pro všechny DRM systémy, což zjednodušuje licencování.
  • ABR algoritmy (BOLA, Pensieve) minimalizují přepínání bitové rychlosti a zajišťují stabilní přehrávání.
  • Android — DASH je nativně podporován v ExoPlayer; iOS vyžaduje knihovny třetích stran.
  • LL-DASH snižuje zpoždění živého vysílání na 3-8 sekund.
  • Doporučuje se používat DASH pro multiplatformní projekty, kde je důležitá flexibilita kodeků a DRM.

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é