DASH — vad är det, protokoll och funktionsprincip för dynamisk strömning

Författare: IT Sectr Publicerad: 2026-05-23 Lästid: 9 min

Dynamic Adaptive Streaming over HTTP (DASH) är en internationell standard för adaptiv multimedieströmningsöverföring utvecklad av MPEG (Moving Picture Experts Group). DASH levererar video och ljud via HTTP med hjälp av en XML-strömbeschrivning i formatet Media Presentation Description (MPD) och delar upp innehållet i segment med olika bithastigheter. Enligt Bitmovin Video Developer Report (2025) använder 58% av videoutvecklarna DASH, vilket gör det till det näst populäraste protokollet efter HLS.

Huvudpunkter

  • DASH — är en öppen internationell MPEG-standard för adaptiv strömning via HTTP.
  • MPD-fil (Media Presentation Description) hanterar strömmen via en XML-struktur med beskrivning av perioder och anpassningsuppsättningar.
  • Kodekar begränsas inte av specifikationen — DASH stöder H.264, HEVC, AV1, VP9, AAC och andra.
  • DRM implementeras via Common Encryption (CENC), som stöder Widevine, PlayReady och FairPlay i en enda ström.
  • Plattformsoberoende DASH tillhandahålls via ExoPlayer (Android), dash.js (webbläsare) och libdash.

Vad är DASH?

MPEG-DASH (Dynamic Adaptive Streaming over HTTP) — är en internationell standard ISO/IEC 23009-1, publicerad 2012 som svar på fragmenteringen av proprietära lösningar för adaptiv strömning. Till skillnad från HLS (Apples proprietära protokoll) och Smooth Streaming (Microsoft), utvecklades DASH från början som en öppen, inte bunden till en specifik leverantör, standard, vilket säkerställde dess breda stöd i branschen.

Den främsta innovationen med DASH — separationen av strömbeschrivningen och mediainnehållet. Strömbeschrivningen lagras i XML-filen MPD (Media Presentation Description), som innehåller all information om tillgängliga varianter: bithastigheter, upplösningar, kodekar, undertexter, ljudspår. Mediainnehållet lagras som separata segment (vanligtvis fMP4), som kan laddas oberoende via HTTP. En sådan arkitektur gör serverinfrastrukturen maximalt enkel — vilken HTTP-server som helst kan distribuera DASH-innehåll.

Anpassningsförmågan hos DASH realiseras genom multiplexering av varianter av samma innehåll. Servern förbereder flera representationer — kopior av innehållet med olika komprimeringsparametrar. Klienten analyserar kanalens bandbredd och växlar dynamiskt mellan representationer och väljer det optimala förhållandet mellan kvalitet och stabilitet vid uppspelning. Enligt akademisk forskning (IEEE Access, 2024) uppvisar DASH med BOLA-algoritmen 22% färre bithastighetsväxlingar jämfört med HLS vid instabil anslutning.

Historia och standardisering av DASH

MPEG började arbeta med DASH 2010 efter analys av befintliga lösningar: Apple HLS, Microsoft Smooth Streaming och Adobe HDS. Den första versionen av standarden (ISO/IEC 23009-1:2012) släpptes 2012. Den andra versionen (2014) lade till stöd för händelser, förbättrad reklaminsättning och serverkontrollerad anpassning. Den tredje versionen (2019) — stöd för HDR, 8K, taktil video och förbättrad integration med MMT (MPEG Media Transport) för 5G-nätverk.

2024 tillkännagav MPEG DASH Next Generation, som inkluderar stöd för neurala nätverkskodekar, molnrendering och optimering för scenarier med Extended Reality (XR). Den viktigaste innovationen — Neural Network-Based Video Coding (NNVC), som använder ML-modeller för avkodning på klientsidan, vilket kan minska bithastigheten med 30-50% samtidigt som kvaliteten bibehålls.

Hur fungerar DASH?

Processen för uppspelning av DASH-ström består av fyra på varandra följande steg: hämta MPD, tolka strömbeschrivningen, välja initial representation och dynamiskt växla mellan representationer. Varje steg har sina egna särdrag som påverkar kvaliteten på användarupplevelsen.

Hämta och tolka MPD

Spelaren laddar MPD-filen från en känd URL. MPD innehåller en XML-struktur med beskrivning av hela strömmen: innehållets längd, tidsskala, tillgängliga perioder (Period), anpassningsuppsättningar (AdaptationSet) och representationer (Representation) med specifika kodningsparametrar. Spelaren tolkar MPD och skapar en intern modell av tillgängliga mediaresurser.

Exempel på en grundläggande MPD-fil för VOD-innehåll med två upplösningar:

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>

Ladda segment och anpassning

Efter att ha valt den initiala representationen börjar spelaren ladda segment. Varje segment innehåller några sekunders innehåll (vanligtvis 2-10 sekunder). Spelaren upprätthåller en buffert för flera segment framåt, vilket säkerställer motståndskraft mot kortvariga hastighetsfall i nätverket. Algoritmen för val av representation (ABR) övervakar kontinuerligt segmentens laddningshastighet och fattar beslut om växling mellan tillgängliga bithastigheter.

Moderna ABR-algoritmer för DASH, som BOLA (Buffer Occupancy based Lyapunov Algorithm) och Pensieve (baserad på Reinforcement Learning), tar inte bara hänsyn till aktuell bandbredd, utan även buffertstorlek, innehållstyp (sport, nyheter, film) och till och med enhetens energiförbrukning. BOLA, som ingår i dash.js och ExoPlayer, minimerar antalet bithastighetsväxlingar samtidigt som en stabil buffert bibehålls, vilket har bekräftats av ACM-forskning (Spiteri et al., 2020).

DASH-struktur: MPD, Period, Adaptation Set

Den hierarkiska strukturen för DASH-strömmen är organiserad på fyra nivåer: MPD → Period → AdaptationSet → Representation. Varje nivå lägger till en detaljnivå och möjliggör beskrivning av komplexa scenarier — från enkel VOD till live-sändningar med reklaminsättningar och flervinkelvideo.

MPD (Media Presentation Description)

MPD — rotelementet som beskriver hela mediapresentationen. MPD-attribut bestämmer strömtyp (static för VOD, dynamic för live), total längd, tidsskala, profil och information om DRM. MPD kan innehålla en eller flera Perioder, som var och en representerar ett oberoende tidsintervall av innehåll.

Period, AdaptationSet och Representation

Period — tidssegmentet för presentationen. För VOD används en Period för hela innehållet. För live med reklaminsättningar kan Period ändras dynamiskt — spelaren laddar den uppdaterade MPD och upptäcker en ny Period som motsvarar reklamblocket. Varje Period innehåller en eller flera AdaptationSets.

AdaptationSet — en grupp utbytbara representationer av samma mediatyp: video, ljud, undertexter. Inom en AdaptationSet skiljer sig alla representationer endast i bithastighet och/eller upplösning, men kodar samma innehåll. Viktig egenskap: spelaren kan växla mellan representationer inom samma AdaptationSet vid segmentsgränsen utan avbrott i uppspelningen.

Representation — en specifik kodningsvariant med en bestämd bithastighet, upplösning och kodek. För varje Representation anges i MPD en URL-mall för laddning av segment. DASH använder ett flexibelt segmentadresseringssystem — via URL-mallar med ersättning av segmentnummer och tid ($Number$, $Time$), vilket gör att servern dynamiskt kan generera filnamn utan att behöva räkna upp varje segment i MPD.

Segmentering och paketering

Segment av DASH kan vara av två typer: typ Segment (innehåller endast mediadata) och typ Subsegment (en del av ett segment för mer granulär åtkomst). För kodning av DASH-innehåll används verktyg som FFmpeg eller paketkodare. Exempel på hur man skapar en DASH-ström från en indatafil:

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: jämförelse av protokoll

Valet mellan DASH och HLS är ett av de viktigaste besluten vid utformningen av ett videoströmningssystem. Båda protokollen löser samma uppgift (adaptiv videoleverans via HTTP), men har grundläggande skillnader i arkitektur, kodekstöd och ekosystem. Låt oss titta på dem enligt nyckelparametrar.

ParameterDASHHLS
StandardInternationell (ISO/IEC 23009-1)Proprietär (RFC 8216, Apple)
StrömbeschrivningXML (MPD)M3U8-spellista
KodekarVilka som helst (H.264, HEVC, AV1, VP9)Begränsade (H.264, HEVC, AV1 från 2023)
SegmentformatfMP4 (huvudsakligt), MPEG-2 TSMPEG-2 TS, fMP4
DRMCENC (enhetligt för alla DRM)FairPlay, Widevine (separat)
iOS-stödVia tredjepartsspelareInbyggt (AVPlayer, Safari)
WebbläsareChrome, Firefox, Edge (via MSE)Safari (inbyggt), övriga via MSE

Främsta fördelen med DASH — oberoende av kodekar. Medan HLS ursprungligen begränsade kodekar till de som stöds av Apple (H.264, HEVC och nyligen AV1), kan DASH använda vilken kodek som helst som stöds av spelaren: VP9/VP8 (kritiskt för YouTube och Chrome), AV1 (för effektivitet), H.264/HEVC (för kompatibilitet). Detta gör DASH till det föredragna valet för plattformsoberoende tjänster där en enhetlig ström krävs för alla enheter.

Nackdel med DASH på iOS — avsaknad av inbyggt stöd i Safari och AVPlayer. Utvecklare av iOS-applikationer måste använda tredjepartsspelare kompatibla med HLS eller bibliotek som libdash med integration via VTDecoder. I praktiken innebär detta att för iOS-orienterade projekt förblir HLS de facto-standard, medan för Android och webbplattformar är DASH en mer flexibel och kraftfull lösning.

Tillämpning av DASH i mobilutveckling

Integration av DASH i mobila applikationer beror på plattformen. På Android stöds DASH direkt via ExoPlayer med en tilläggsmodul. På iOS krävs användning av tredjepartsbibliotek, som libdash med integration via AVFoundation eller MPEGDASHPlayer. Låt oss titta på den praktiska implementeringen för båda plattformarna.

DASH på Android via ExoPlayer

ExoPlayer från Google ger inbyggt stöd för DASH via modulen `exoplayer-dash`. Att ansluta en DASH-ström skiljer sig inte från andra format — det räcker att skicka MPD-filens URI till MediaItem. ExoPlayer bestämmer automatiskt innehållets format och startar lämplig renderare, med stöd för alla standard ABR-algoritmer.

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 med DRM på båda plattformarna

Common Encryption (CENC) — en av DASH:s nyckelfunktioner, som möjliggör användning av en enda mediaström med olika DRM-system. MPD-filen innehåller XML-element ContentProtection med identifierare för DRM-system (Widevine, PlayReady, FairPlay). Klienten väljer lämpligt DRM-system baserat på sin plattform och begär licens via licensservern.

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

Optimering av DASH för mobila enheter

Mobila applikationer kräver särskild justering av DASH på grund av begränsningar i bandbredd och energiförbrukning. De viktigaste rekommendationerna inkluderar: ställa in en minimibuffert på 2-3 segment för motståndskraft mot kortvariga hastighetsfall, använda segment med en längd på 2-4 sekunder för snabbare reaktion på nätverksförändringar och förladda nästa segment vid kvalitetsväxling.

För att spara trafik i mobila nätverk rekommenderar Bitmovin (2024) användning av Content Steering — en mekanism liknande den analoga funktionen i HLS, som möjliggör dynamisk dirigering av klienten till en optimal CDN-nod. DASH Content Steering beskrivs i specifikationen ISO/IEC 23009-1:2022 och stöds i dash.js 4.5+ och ExoPlayer 2.18+.

Vanliga frågor

Vad skiljer DASH från HLS?

DASH — en öppen internationell MPEG-standard, inte bunden till leverantör. Till skillnad från HLS (Apples proprietära protokoll) stöder DASH vilka kodekar som helst, använder XML-strömbeschrivning (MPD) istället för M3U8 och tillhandahåller ett enhetligt DRM-system via CENC. HLS har inbyggt stöd på iOS, DASH är mer flexibelt för plattformsoberoende lösningar.

Vilka spelare stöder DASH på mobila enheter?

Android är den främsta spelaren för DASH ExoPlayer från Google med modulen exoplayer-dash. På iOS används tredjepartslösningar som libdash med integration via AVFoundation eller kommersiella spelare (THEOplayer, Bitmovin). I webbläsare spelas DASH upp via dash.js med hjälp av MediaSource Extensions.

Vad är MPD i sammanhanget DASH?

MPD (Media Presentation Description) — är en XML-fil som beskriver strukturen för en DASH-ström: innehållets längd, tillgängliga bithastigheter, upplösningar, kodekar, segmentformat och deras placering. MPD fungerar som en ingångspunkt för spelaren och ersätter master-spellistan i HLS. Utan MPD-fil är uppspelning av DASH-innehåll omöjlig.

Stöder DASH live-sändningar?

Ja, DASH stöder både VOD och live-sändningar. För live-sändningar används dynamic typ av MPD med automatisk uppdatering. Servern uppdaterar periodvis MPD, lägger till nya segment och tar bort föråldrade. Low-Latency DASH (LL-DASH) med chunked encoding möjliggör en fördröjning på 3-8 sekunder, jämförbar med LL-HLS.

Hur fungerar DRM i DASH?

DASH använder Common Encryption (CENC, ISO/IEC 23001-7), som gör det möjligt att kryptera mediainnehåll en gång och dekryptera det med vilket DRM-system som helst. MPD innehåller XML-element ContentProtection med angivelse av vilka DRM som stöds (Widevine, PlayReady, FairPlay). Spelaren väljer lämpligt DRM baserat på plattform och begär licens via den angivna URL:en.

Sammanfattning

  • MPEG-DASH — öppen internationell standard för adaptiv HTTP-strömning med XML-strömbeschrivning i MPD-format.
  • Kodekoberoende — DASH stöder H.264, HEVC, AV1, VP9 och alla andra kodekar som är tillgängliga för spelaren.
  • CENC ger enhetlig innehållskryptering för alla DRM-system, vilket förenklar licensiering.
  • ABR-algoritmer (BOLA, Pensieve) minimerar bithastighetsväxlingar och säkerställer stabil uppspelning.
  • Android — DASH stöds inbyggt i ExoPlayer; iOS kräver tredjepartsbibliotek.
  • LL-DASH minskar fördröjningen för live-sändningar till 3-8 sekunder.
  • Rekommenderas att använda DASH för plattformsoberoende projekt där flexibilitet i kodekar och DRM är viktig.

Vi utvecklar en mobil applikation nyckelfärdigt

IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.

Diskutera projektet

Läs också