Dynamic Adaptive Streaming over HTTP (DASH) ist ein internationaler Standard für adaptives Multimedia-Streaming, entwickelt von MPEG (Moving Picture Experts Group). DASH liefert Video und Audio über HTTP unter Verwendung einer XML-Beschreibung des Streams im Format Media Presentation Description (MPD) und teilt den Inhalt in Segmente mit unterschiedlichen Bitraten. Laut dem Bitmovin Video Developer Report (2025) verwenden 58% der Videoentwickler DASH, was es zum zweitbeliebtesten Protokoll nach HLS macht.
Wichtigste Erkenntnisse
MPEG-DASH (Dynamic Adaptive Streaming over HTTP) ist ein internationaler Standard ISO/IEC 23009-1, der 2012 als Reaktion auf die Fragmentierung proprietärer adaptiver Streaming-Lösungen veröffentlicht wurde. Im Gegensatz zu HLS (Apples proprietäres Protokoll) und Smooth Streaming (Microsoft) wurde DASH von Anfang an als offener, anbieterunabhängiger Standard entwickelt, was seine breite Unterstützung in der Industrie sicherstellte.
Die Hauptinnovation von DASH ist die Trennung von Stream-Beschreibung und Medieninhalt. Die Stream-Beschreibung wird in einer XML-Datei namens MPD (Media Presentation Description) gespeichert, die alle Informationen über verfügbare Optionen enthält: Bitraten, Auflösungen, Codecs, Untertitel, Audiospuren. Medieninhalte werden in separaten Segmenten (normalerweise fMP4) gespeichert, die unabhängig über HTTP geladen werden können. Diese Architektur ermöglicht eine möglichst einfache Serverinfrastruktur — jeder HTTP-Server kann DASH-Inhalte ausliefern.
Die Adaptivität in DASH wird durch Multiplexing von Inhaltsvarianten implementiert. Der Server bereitet mehrere Representations vor — Kopien des Inhalts mit unterschiedlichen Komprimierungsparametern. Der Client analysiert die Kanalbandbreite und wechselt dynamisch zwischen den Repräsentationen, um das optimale Gleichgewicht zwischen Qualität und Wiedergabestabilität zu wählen. Laut einer akademischen Studie (IEEE Access, 2024) zeigt DASH mit dem BOLA-Algorithmus 22% weniger Bitratenwechsel im Vergleich zu HLS bei instabilen Verbindungen.
MPEG begann 2010 mit der Arbeit an DASH, nachdem bestehende Lösungen analysiert wurden: Apple HLS, Microsoft Smooth Streaming und Adobe HDS. Die erste Version des Standards (ISO/IEC 23009-1:2012) wurde 2012 veröffentlicht. Die zweite Version (2014) fügte Unterstützung für Ereignisse, verbesserte Werbeeinblendung und servergesteuerte Adaption hinzu. Die dritte Version (2019) fügte Unterstützung für HDR, 8K, haptisches Video und eine verbesserte Integration mit MMT (MPEG Media Transport) für 5G-Netze hinzu.
Im Jahr 2024 kündigte MPEG DASH Next Generation an, das Unterstützung für neuronale Netzwerk-Codecs, Cloud-Rendering und Optimierung für Extended Reality (XR)-Szenarien umfasst. Eine wichtige Neuerung ist die neuronale netzwerkbasierte Videocodierung (NNVC), die ML-Modelle für die clientseitige Dekodierung verwendet und die Bitrate bei gleichbleibender Qualität potenziell um 30-50% reduzieren kann.
Der DASH-Stream-Wiedergabeprozess besteht aus vier aufeinanderfolgenden Phasen: Abrufen des MPD, Parsen der Stream-Beschreibung, Auswahl der anfänglichen Repräsentation und dynamisches Umschalten zwischen Repräsentationen. Jede Phase hat ihre eigenen Besonderheiten, die die Qualität der Benutzererfahrung beeinflussen.
Der Player lädt die MPD-Datei von einer bekannten URL. Die MPD enthält eine XML-Struktur, die den gesamten Stream beschreibt: Inhaltsdauer, Zeitachse, verfügbare Perioden (Period), Adaptionssätze (AdaptationSet) und Repräsentationen (Representation) mit spezifischen Codierungsparametern. Der Player parst die MPD und erstellt ein internes Modell der verfügbaren Medienressourcen.
Beispiel einer einfachen MPD-Datei für VOD-Inhalte mit zwei Auflösungen:
<?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>
Nach Auswahl der anfänglichen Repräsentation beginnt der Player mit dem Laden von Segmenten. Jedes Segment enthält mehrere Sekunden Inhalt (normalerweise 2-10 Sekunden). Der Player hält einen Puffer von mehreren Segmenten vor, was Widerstandsfähigkeit gegen kurzzeitige Netzwerkgeschwindigkeitseinbrüche gewährleistet. Der ABR-Algorithmus (Adaptive Bitrate) überwacht ständig die Segment-Download-Geschwindigkeit und entscheidet über das Umschalten zwischen verfügbaren Bitraten.
Moderne ABR-Algorithmen für DASH, wie BOLA (Buffer Occupancy based Lyapunov Algorithm) und Pensieve (basiert auf Reinforcement Learning), berücksichtigen nicht nur die aktuelle Bandbreite, sondern auch die Puffergröße, den Inhaltstyp (Sport, Nachrichten, Filme) und sogar den Stromverbrauch des Geräts. BOLA, das Teil von dash.js und ExoPlayer ist, minimiert die Anzahl der Bitratenwechsel bei gleichzeitiger Aufrechterhaltung eines stabilen Puffers, wie durch ACM-Forschung (Spiteri et al., 2020) bestätigt wurde.
Die hierarchische Struktur eines DASH-Streams ist in vier Ebenen organisiert: MPD → Period → AdaptationSet → Representation. Jede Ebene fügt eine Detailstufe hinzu, die die Beschreibung komplexer Szenarien ermöglicht — von einfachem VOD bis zu Live-Übertragungen mit Werbeeinblendungen und Multi-Winkel-Video.
MPD ist das Wurzelelement, das die gesamte Medienpräsentation beschreibt. MPD-Attribute definieren den Stream-Typ (static für VOD, dynamic für Live), die Gesamtdauer, die Zeitachse, das Profil und DRM-Informationen. Die MPD kann eine oder mehrere Perioden enthalten, die jeweils ein unabhängiges Zeitsegment des Inhalts darstellen.
Period ist ein Zeitsegment der Präsentation. Für VOD wird eine einzelne Period für den gesamten Inhalt verwendet. Für Live mit Werbeunterbrechungen kann die Period dynamisch wechseln — der Player lädt die aktualisierte MPD und erkennt eine neue Period, die dem Werbeblock entspricht. Jede Period enthält einen oder mehrere AdaptationSets.
AdaptationSet ist eine Gruppe austauschbarer Repräsentationen eines Medientyps: Video, Audio, Untertitel. Innerhalb eines AdaptationSets unterscheiden sich alle Repräsentationen nur in Bitrate und/oder Auflösung, codieren aber denselben Inhalt. Eine wichtige Eigenschaft: Der Player kann zwischen Repräsentationen innerhalb desselben AdaptationSets an Segmentgrenzen ohne Wiedergabeunterbrechung umschalten.
Representation ist eine spezifische Codierungsvariante mit einer definierten Bitrate, Auflösung und Codec. Für jede Representation gibt die MPD eine URL-Vorlage zum Laden von Segmenten an. DASH verwendet ein flexibles Segmentadressierungssystem — über URL-Vorlagen mit Segmentnummer- und Zeitersetzung ($Number$, $Time$), die es dem Server ermöglichen, Dateinamen dynamisch zu generieren, ohne jedes Segment in der MPD aufzulisten.
Segmente in DASH können von zwei Typen sein: Segment-Typ (enthält nur Mediendaten) und Subsegment-Typ (Teil eines Segments für feineren Zugriff). Zum Codieren von DASH-Inhalten werden Werkzeuge wie FFmpeg oder Batch-Encoder verwendet. Beispiel für die Erstellung eines DASH-Streams aus einer Eingabedatei:
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"
])
Die Wahl zwischen DASH und HLS ist eine der Schlüsselentscheidungen beim Entwurf eines Video-Streaming-Systems. Beide Protokolle lösen dasselbe Problem (adaptive HTTP-Videoauslieferung), haben aber grundlegende Unterschiede in Architektur, Codec-Unterstützung und Ökosystem. Betrachten wir sie anhand der wichtigsten Parameter.
| Parameter | DASH | HLS |
|---|---|---|
| Standard | International (ISO/IEC 23009-1) | Proprietär (RFC 8216, Apple) |
| Stream-Beschreibung | XML (MPD) | M3U8-Playlist |
| Codecs | Beliebig (H.264, HEVC, AV1, VP9) | Eingeschränkt (H.264, HEVC, AV1 seit 2023) |
| Segmentformat | fMP4 (primär), MPEG-2 TS | MPEG-2 TS, fMP4 |
| DRM | CENC (einheitlich für alle DRMs) | FairPlay, Widevine (getrennt) |
| iOS-Unterstützung | Über Drittanbieter-Player | Nativ (AVPlayer, Safari) |
| Browser | Chrome, Firefox, Edge (über MSE) | Safari (nativ), andere über MSE |
Hauptvorteil von DASH — Codec-Unabhängigkeit. Während HLS die Codecs ursprünglich auf die von Apple unterstützten (H.264, HEVC und seit kurzem AV1) beschränkte, kann DASH jeden vom Player unterstützten Codec verwenden: VP9/VP8 (entscheidend für YouTube und Chrome), AV1 (für Effizienz), H.264/HEVC (für Kompatibilität). Dies macht DASH zur bevorzugten Wahl für plattformübergreifende Dienste, die einen einheitlichen Stream für alle Geräte benötigen.
Nachteil von DASH auf iOS — fehlende native Unterstützung in Safari und AVPlayer. iOS-Entwickler müssen Drittanbieter-HLS-kompatible Player oder Bibliotheken wie libdash mit Integration über VTDecoder verwenden. In der Praxis bedeutet dies, dass HLS für iOS-first-Projekte der De-facto-Standard bleibt, während DASH für Android und Web-Plattformen eine flexiblere und leistungsfähigere Lösung darstellt.
Die Integration von DASH in mobile Anwendungen hängt von der Plattform ab. Auf Android wird DASH direkt über ExoPlayer mit dem Erweiterungsmodul unterstützt. Auf iOS sind Drittanbieter-Bibliotheken wie libdash mit Integration über AVFoundation oder MPEGDASHPlayer erforderlich. Sehen wir uns die praktische Implementierung für beide Plattformen an.
ExoPlayer von Google bietet integrierte DASH-Unterstützung über das Modul `exoplayer-dash`. Das Verbinden eines DASH-Streams unterscheidet sich nicht von anderen Formaten — übergeben Sie einfach die URI der MPD-Datei in einem MediaItem. ExoPlayer erkennt automatisch das Inhaltsformat und startet den entsprechenden Renderer, wobei alle standardmäßigen ABR-Algorithmen unterstützt werden.
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) ist eine der Schlüsselfunktionen von DASH, die die Verwendung eines einzelnen Medienstreams mit verschiedenen DRM-Systemen ermöglicht. Die MPD-Datei enthält ContentProtection-XML-Elemente mit DRM-Systemkennungen (Widevine, PlayReady, FairPlay). Der Client wählt das geeignete DRM-System basierend auf seiner Plattform aus und fordert eine Lizenz vom Lizenzserver an.
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()
Mobile Anwendungen erfordern aufgrund von Einschränkungen bei Bandbreite und Stromverbrauch eine spezielle DASH-Konfiguration. Zu den wichtigsten Empfehlungen gehören: ein Mindestpuffer von 2-3 Segmenten für Widerstandsfähigkeit gegen kurzzeitige Geschwindigkeitseinbrüche, Verwendung von 2-4 Sekunden langen Segmenten für schnellere Reaktion auf Netzwerkänderungen und Vorabladen des nächsten Segments beim Qualitätswechsel.
Um Datenverkehr in mobilen Netzwerken zu sparen, empfiehlt Bitmovin (2024) die Verwendung von Content Steering — ein Mechanismus ähnlich der entsprechenden Funktion von HLS, der eine dynamische Lenkung des Clients zum optimalen CDN-Knoten ermöglicht. DASH Content Steering wird in der Spezifikation ISO/IEC 23009-1:2022 beschrieben und in dash.js 4.5+ und ExoPlayer 2.18+ unterstützt.
Häufig gestellte Fragen
DASH ist ein offener internationaler MPEG-Standard, der nicht an einen Anbieter gebunden ist. Im Gegensatz zu HLS (Apples proprietäres Protokoll) unterstützt DASH beliebige Codecs, verwendet eine XML-Stream-Beschreibung (MPD) anstelle von M3U8 und bietet ein einheitliches DRM-System über CENC. HLS hat native Unterstützung auf iOS, während DASH für plattformübergreifende Lösungen flexibler ist.
Auf Android ist der primäre DASH-Player der ExoPlayer von Google mit dem Modul exoplayer-dash. Auf iOS werden Drittanbieterlösungen wie libdash mit Integration über AVFoundation oder kommerzielle Player (THEOplayer, Bitmovin) verwendet. In Webbrowsern wird DASH über dash.js mit MediaSource Extensions abgespielt.
MPD (Media Presentation Description) ist eine XML-Datei, die die DASH-Stream-Struktur beschreibt: Inhaltsdauer, verfügbare Bitraten, Auflösungen, Codecs, Segmentformate und deren Speicherorte. Die MPD dient als Einstiegspunkt für den Player und ersetzt die Master-Playlist in HLS. Ohne eine MPD-Datei ist die Wiedergabe von DASH-Inhalten nicht möglich.
Ja, DASH unterstützt sowohl VOD als auch Live-Übertragungen. Für Live wird der dynamic MPD-Typ mit automatischer Aktualisierung verwendet. Der Server aktualisiert regelmäßig die MPD, fügt neue Segmente hinzu und entfernt veraltete. Low-Latency DASH (LL-DASH) mit Chunked-Codierung erreicht eine Latenz von 3-8 Sekunden, vergleichbar mit LL-HLS.
DASH verwendet Common Encryption (CENC, ISO/IEC 23001-7), das es ermöglicht, Medieninhalte einmal zu verschlüsseln und mit jedem DRM-System zu entschlüsseln. Die MPD enthält ContentProtection-XML-Elemente mit Angabe der unterstützten DRMs (Widevine, PlayReady, FairPlay). Der Player wählt das passende DRM basierend auf der Plattform aus und fordert eine Lizenz über die angegebene URL an.
Zusammenfassung
Wir entwickeln eine mobile Applikation schlüsselfertig
IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.
Lesen Sie auch