DASH — wat is het, protocol en werkingsprincipe van dynamische streaming

Auteur: IT Sectr Gepubliceerd: 2026-05-23 Leestijd: 9 min

Dynamic Adaptive Streaming over HTTP (DASH) is een internationale standaard voor adaptieve multimedias streaming, ontwikkeld door MPEG (Moving Picture Experts Group). DASH zorgt voor de levering van video en audio via HTTP, met behulp van een XML-stroombeschrijving in Media Presentation Description (MPD)-formaat en door inhoud op te delen in segmenten met verschillende bitsnelheden. Volgens het Bitmovin Video Developer Report (2025) gebruikt 58% van de video-ontwikkelaars DASH, waarmee het het tweede populairste protocol is na HLS.

Belangrijkste punten

  • DASH — is een open internationale MPEG-standaard voor adaptieve streaming via HTTP.
  • MPD-bestand (Media Presentation Description) beheert de stroom via een XML-structuur met beschrijving van perioden en adaptatiesets.
  • Codecs worden niet beperkt door de specificatie — DASH ondersteunt H.264, HEVC, AV1, VP9, AAC en andere.
  • DRM wordt geïmplementeerd via Common Encryption (CENC), dat Widevine, PlayReady en FairPlay in één stroom ondersteunt.
  • Cross-platform DASH wordt verzorgd via ExoPlayer (Android), dash.js (browsers) en libdash.

Wat is DASH?

MPEG-DASH (Dynamic Adaptive Streaming over HTTP) — is een internationale standaard ISO/IEC 23009-1, gepubliceerd in 2012 als antwoord op de fragmentatie van propriëtaire oplossingen voor adaptieve streaming. In tegenstelling tot HLS (Apple's propriëtaire protocol) en Smooth Streaming (Microsoft), werd DASH vanaf het begin ontwikkeld als een open, niet aan een specifieke leverancier gebonden standaard, wat zorgde voor brede ondersteuning in de industrie.

De belangrijkste innovatie van DASH — het scheiden van de stroombeschrijving en de mediacontent. De stroombeschrijving wordt opgeslagen in het XML-bestand MPD (Media Presentation Description), dat alle informatie bevat over de beschikbare varianten: bitsnelheden, resoluties, codecs, ondertiteling, audiosporen. Mediacontent wordt opgeslagen als afzonderlijke segmenten (meestal fMP4), die onafhankelijk via HTTP kunnen worden geladen. Een dergelijke architectuur maakt de serverinfrastructuur maximaal eenvoudig — elke HTTP-server kan DASH-content distribueren.

De adaptiviteit van DASH wordt gerealiseerd door multiplexing van varianten van dezelfde inhoud. De server bereidt verschillende representaties voor — kopieën van de inhoud met verschillende compressieparameters. De client analyseert de bandbreedte van het kanaal en schakelt dynamisch tussen representaties, waarbij de optimale verhouding tussen kwaliteit en stabiliteit van de afweging wordt gekozen. Volgens academisch onderzoek (IEEE Access, 2024) vertoont DASH met het BOLA-algoritme 22% minder schakelingen van bitsnelheid in vergelijking met HLS bij een instabiele verbinding.

Geschiedenis en standaardisatie van DASH

MPEG begon in 2010 met de ontwikkeling van DASH na analyse van bestaande oplossingen: Apple HLS, Microsoft Smooth Streaming en Adobe HDS. De eerste versie van de standaard (ISO/IEC 23009-1:2012) werd uitgebracht in 2012. De tweede versie (2014) voegde ondersteuning voor gebeurtenissen, verbeterde reclame-invoeging en door server gecontroleerde adaptatie toe. De derde versie (2019) — ondersteuning voor HDR, 8K, tactiele video en verbeterde integratie met MMT (MPEG Media Transport) voor 5G-netwerken.

In 2024 kondigde MPEG DASH Next Generation aan, dat ondersteuning voor neurale netwerkcodecs, cloudrendering en optimalisatie voor Extended Reality (XR)-scenario's omvat. De belangrijkste innovatie — Neural Network-Based Video Coding (NNVC), dat ML-modellen gebruikt voor decodering aan de clientzijde, wat de bitsnelheid met 30-50% kan verminderen met behoud van kwaliteit.

Hoe werkt DASH?

Het afspelen van een DASH-stroom bestaat uit vier opeenvolgende fasen: het ophalen van MPD, het parsen van de stroombeschrijving, het selecteren van de initiële representatie en het dynamisch schakelen tussen representaties. Elke fase heeft zijn eigen kenmerken die de kwaliteit van de gebruikerservaring beïnvloeden.

MPD ophalen en parsen

De speler laadt het MPD-bestand van een bekende URL. MPD bevat een XML-structuur met een beschrijving van de volledige stroom: duur van de inhoud, tijdschaal, beschikbare perioden (Period), adaptatiesets (AdaptationSet) en representaties (Representation) met specifieke coderingsparameters. De speler parseert MPD en maakt een intern model van de beschikbare mediaresources.

Voorbeeld van een basis MPD-bestand voor VOD-content met twee resoluties:

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>

Segmenten laden en adaptatie

Na het selecteren van de initiële representatie begint de speler met het laden van segmenten. Elk segment bevat enkele seconden inhoud (meestal 2-10 seconden). De speler houdt een buffer bij voor enkele segmenten vooruit, wat zorgt voor weerstand tegen kortdurende dalingen van de netwerksnelheid. Het algoritme voor representatieselectie (ABR) bewaakt continu de laadsnelheid van segmenten en beslist over het schakelen tussen beschikbare bitsnelheden.

Moderne ABR-algoritmen voor DASH, zoals BOLA (Buffer Occupancy based Lyapunov Algorithm) en Pensieve (gebaseerd op Reinforcement Learning), houden niet alleen rekening met de huidige bandbreedte, maar ook met de buffergrootte, het type inhoud (sport, nieuws, film) en zelfs het energieverbruik van het apparaat. BOLA, dat onderdeel is van dash.js en ExoPlayer, minimaliseert het aantal bitsnelheidsschakelingen met behoud van een stabiele buffer, zoals bevestigd door ACM-onderzoek (Spiteri et al., 2020).

Structuur van DASH: MPD, Period, Adaptation Set

De hiërarchische structuur van een DASH-stroom is georganiseerd op vier niveaus: MPD → Period → AdaptationSet → Representation. Elk niveau voegt een detailniveau toe, waardoor complexe scenario's kunnen worden beschreven — van eenvoudige VOD tot live-uitzendingen met reclame-invoegingen en multi-camera video.

MPD (Media Presentation Description)

MPD — het root-element dat de gehele mediapresentatie beschrijft. MPD-attributen bepalen het type stroom (static voor VOD, dynamic voor live), de totale duur, de tijdschaal, het profiel en informatie over DRM. MPD kan een of meerdere Perioden bevatten, die elk een onafhankelijk tijdsinterval van inhoud vertegenwoordigen.

Period, AdaptationSet en Representation

Period — het tijdssegment van de presentatie. Voor VOD wordt één Period gebruikt voor de gehele inhoud. Voor live met reclame-invoegingen kan Period dynamisch veranderen — de speler laadt de bijgewerkte MPD en detecteert een nieuwe Period die overeenkomt met het reclameblok. Elke Period bevat een of meer AdaptationSets.

AdaptationSet — een groep onderling vervangbare representaties van hetzelfde mediatype: video, audio, ondertiteling. Binnen een AdaptationSet verschillen alle representaties alleen in bitsnelheid en/of resolutie, maar coderen ze dezelfde inhoud. Belangrijke eigenschap: de speler kan schakelen tussen representaties binnen dezelfde AdaptationSet op de grens van segmenten zonder onderbreking van de weergave.

Representation — een specifieke codeervariant met een bepaalde bitsnelheid, resolutie en codec. Voor elke Representatie wordt in MPD een URL-sjabloon voor het laden van segmenten opgegeven. DASH gebruikt een flexibel adresseringssysteem voor segmenten — via URL-sjablonen met substitutie van het segmentnummer en de tijd ($Number$, $Time$), waardoor de server dynamisch bestandsnamen kan genereren zonder elk segment in MPD te hoeven opsommen.

Segmentatie en verpakking

Segmenten van DASH kunnen twee typen zijn: type Segment (bevatten alleen mediadata) en type Subsegment (een deel van een segment voor fijnmazigere toegang). Voor het coderen van DASH-content worden tools zoals FFmpeg of pakketcodeerders gebruikt. Voorbeeld van het maken van een DASH-stroom uit een invoerbestand:

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: vergelijking van protocollen

De keuze tussen DASH en HLS is een van de belangrijkste beslissingen bij het ontwerpen van een videostreamingsysteem. Beide protocollen lossen dezelfde taak op (adaptieve HTTP-videolevering), maar hebben fundamentele verschillen in architectuur, codec-ondersteuning en ecosysteem. Laten we ze bekijken op basis van de belangrijkste parameters.

ParameterDASHHLS
StandaardInternationaal (ISO/IEC 23009-1)Propriëtair (RFC 8216, Apple)
StroombeschrijvingXML (MPD)M3U8-afspeellijst
CodecsElke (H.264, HEVC, AV1, VP9)Beperkt (H.264, HEVC, AV1 vanaf 2023)
SegmentformaatfMP4 (primair), MPEG-2 TSMPEG-2 TS, fMP4
DRMCENC (uniform voor alle DRM)FairPlay, Widevine (afzonderlijk)
iOS-ondersteuningVia spelers van derdenNative (AVPlayer, Safari)
BrowsersChrome, Firefox, Edge (via MSE)Safari (native), overige via MSE

Belangrijkste voordeel van DASH — onafhankelijkheid van codecs. Terwijl HLS oorspronkelijk codecs beperkte tot die welke door Apple worden ondersteund (H.264, HEVC en sinds kort AV1), kan DASH elke codec gebruiken die door de speler wordt ondersteund: VP9/VP8 (cruciaal voor YouTube en Chrome), AV1 (voor efficiëntie), H.264/HEVC (voor compatibiliteit). Dit maakt DASH de voorkeurskeuze voor cross-platform diensten waar één uniforme stroom voor alle apparaten vereist is.

Nadeel van DASH op iOS — het ontbreken van native ondersteuning in Safari en AVPlayer. Ontwikkelaars van iOS-applicaties moeten gebruikmaken van HLS-compatibele spelers van derden of bibliotheken zoals libdash met integratie via VTDecoder. In de praktijk betekent dit dat voor iOS-gerichte projecten HLS de de facto standaard blijft, terwijl voor Android en webplatforms DASH een flexibelere en krachtigere oplossing is.

Toepassing van DASH in mobiele ontwikkeling

Integratie van DASH in mobiele applicaties hangt af van het platform. Op Android wordt DASH direct ondersteund via ExoPlayer met een extensiemodule. Op iOS is het gebruik van bibliotheken van derden, zoals libdash met integratie via AVFoundation of MPEGDASHPlayer, vereist. Laten we de praktische implementatie voor beide platforms bekijken.

DASH op Android via ExoPlayer

ExoPlayer van Google biedt ingebouwde ondersteuning voor DASH via de module `exoplayer-dash`. Het aansluiten van een DASH-stroom verschilt niet van andere formaten — het volstaat om de URI van het MPD-bestand door te geven aan MediaItem. ExoPlayer bepaalt automatisch het formaat van de inhoud en start de juiste renderer, waarbij alle standaard ABR-algoritmen worden ondersteund.

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 met DRM op beide platforms

Common Encryption (CENC) — een van de belangrijkste mogelijkheden van DASH, waarmee één mediastroom met verschillende DRM-systemen kan worden gebruikt. Het MPD-bestand bevat XML-elementen ContentProtection met identificaties van DRM-systemen (Widevine, PlayReady, FairPlay). De client selecteert het juiste DRM-systeem op basis van zijn platform en vraagt een licentie aan via de licentieserver.

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

Optimalisatie van DASH voor mobiele apparaten

Mobiele applicaties vereisen speciale afstemming van DASH vanwege beperkingen in bandbreedte en energieverbruik. De belangrijkste aanbevelingen omvatten: het instellen van een minimale buffer van 2-3 segmenten voor weerstand tegen kortdurende snelheidsdalingen, het gebruik van segmenten met een duur van 2-4 seconden voor snellere reactie op netwerkveranderingen, en het vooraf laden van het volgende segment bij het schakelen van kwaliteit.

Voor verkeersbesparing op mobiele netwerken adviseert Bitmovin (2024) het gebruik van Content Steering — een mechanisme vergelijkbaar met de analoge functie van HLS, waarmee de client dynamisch naar de optimale CDN-knooppunt kan worden geleid. DASH Content Steering wordt beschreven in de specificatie ISO/IEC 23009-1:2022 en wordt ondersteund in dash.js 4.5+ en ExoPlayer 2.18+.

Veelgestelde vragen

Waarin verschilt DASH van HLS?

DASH — een open internationale MPEG-standaard, niet gebonden aan een leverancier. In tegenstelling tot HLS (Apple's propriëtaire protocol) ondersteunt DASH elke codec, gebruikt het een XML-stroombeschrijving (MPD) in plaats van M3U8 en biedt het een uniform DRM-systeem via CENC. HLS heeft native ondersteuning op iOS, DASH is flexibeler voor cross-platform oplossingen.

Welke spelers ondersteunen DASH op mobiele apparaten?

Op Android is de belangrijkste speler voor DASH ExoPlayer van Google met de module exoplayer-dash. Op iOS worden oplossingen van derden gebruikt, zoals libdash met integratie via AVFoundation of commerciële spelers (THEOplayer, Bitmovin). In webbrowsers wordt DASH afgespeeld via dash.js met behulp van MediaSource Extensions.

Wat is MPD in de context van DASH?

MPD (Media Presentation Description) — is een XML-bestand dat de structuur van een DASH-stroom beschrijft: duur van de inhoud, beschikbare bitsnelheden, resoluties, codecs, segmentformaten en hun locatie. MPD dient als toegangspunt voor de speler en vervangt de master-afspeellijst in HLS. Zonder MPD-bestand is afspelen van DASH-content onmogelijk.

Ondersteunt DASH live-uitzendingen?

Ja, DASH ondersteunt zowel VOD als live-uitzendingen. Voor live-uitzendingen wordt het dynamic type MPD met automatische update gebruikt. De server werkt periodiek MPD bij, voegt nieuwe segmenten toe en verwijdert verouderde. Low-Latency DASH (LL-DASH) met chunked encoding maakt een vertraging van 3-8 seconden mogelijk, vergelijkbaar met LL-HLS.

Hoe werkt DRM in DASH?

DASH gebruikt Common Encryption (CENC, ISO/IEC 23001-7), dat mediacontent eenmalig versleutelt en door elk DRM-systeem kan worden ontsleuteld. MPD bevat XML-elementen ContentProtection met aanduiding van ondersteunde DRM's (Widevine, PlayReady, FairPlay). De speler selecteert de juiste DRM op basis van het platform en vraagt een licentie aan via de opgegeven URL.

Samenvatting

  • MPEG-DASH — open internationale standaard voor adaptieve HTTP-streaming met XML-stroombeschrijving in MPD-formaat.
  • Codec-onafhankelijkheid — DASH ondersteunt H.264, HEVC, AV1, VP9 en alle andere codecs die beschikbaar zijn voor de speler.
  • CENC zorgt voor uniforme contentversleuteling voor alle DRM-systemen, waardoor licentiëring wordt vereenvoudigd.
  • ABR-algoritmen (BOLA, Pensieve) minimaliseren bitsnelheidsschakelingen en zorgen voor stabiel afspelen.
  • Android — DASH wordt native ondersteund in ExoPlayer; iOS vereist bibliotheken van derden.
  • LL-DASH vermindert de vertraging van live-uitzendingen tot 3-8 seconden.
  • Aanbevolen om DASH te gebruiken voor cross-platform projecten waar flexibiliteit van codecs en DRM belangrijk is.

We ontwikkelen een mobiele applicatie turnkey

IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.

Bespreek het project

Lees ook