DASH — ce este, protocolul și principiul de funcționare a streamingului dinamic

Autor: IT Sectr Publicat: 2026-05-23 Timp de citire: 9 min

Dynamic Adaptive Streaming over HTTP (DASH) este un standard internațional de transmisie multimedia adaptivă în flux, dezvoltat de MPEG (Moving Picture Experts Group). DASH asigură livrarea video și audio prin HTTP, utilizând o descriere a fluxului în format XML numită Media Presentation Description (MPD) și împărțind conținutul în segmente cu diferite rate de biți. Potrivit studiului Bitmovin Video Developer Report (2025), 58% dintre dezvoltatorii video folosesc DASH, ceea ce îl face al doilea cel mai popular protocol după HLS.

Principalele puncte

  • DASH — este un standard internațional deschis MPEG pentru streaming adaptiv prin HTTP.
  • Fișierul MPD (Media Presentation Description) gestionează fluxul printr-o structură XML cu descrierea perioadelor și seturilor de adaptare.
  • Codecurile nu sunt limitate de specificație — DASH suportă H.264, HEVC, AV1, VP9, AAC și altele.
  • DRM este implementat prin Common Encryption (CENC), care suportă Widevine, PlayReady și FairPlay într-un singur flux.
  • Multiplatforma DASH este asigurată prin ExoPlayer (Android), dash.js (browsere) și libdash.

Ce este DASH?

MPEG-DASH (Dynamic Adaptive Streaming over HTTP) — este un standard internațional ISO/IEC 23009-1, publicat în 2012 ca răspuns la fragmentarea soluțiilor proprietare de streaming adaptiv. Spre deosebire de HLS (protocolul proprietar Apple) și Smooth Streaming (Microsoft), DASH a fost conceput de la început ca un standard deschis, nelegat de un anumit furnizor, ceea ce i-a asigurat suportul larg în industrie.

Inovația principală a DASH — separarea descrierii fluxului și a conținutului media. Descrierea fluxului este stocată în fișierul XML MPD (Media Presentation Description), care conține toate informațiile despre variantele disponibile: rate de biți, rezoluții, codecuri, subtitrări, căi audio. Conținutul media este stocat sub formă de segmente separate (de obicei fMP4), care pot fi încărcate independent prin HTTP. O astfel de arhitectură permite ca infrastructura serverului să fie cât mai simplă — orice server HTTP poate distribui conținut DASH.

Adaptivitatea DASH este realizată prin multiplexarea variantelor aceluiași conținut. Serverul pregătește mai multe Reprezentări — copii ale conținutului cu diferiți parametri de compresie. Clientul analizează lățimea de bandă a canalului și comută dinamic între reprezentări, alegând raportul optim dintre calitate și stabilitatea redării. Potrivit cercetării academice (IEEE Access, 2024), DASH cu algoritmul BOLA prezintă cu 22% mai puține comutări ale ratei de biți în comparație cu HLS la o conexiune instabilă.

Istoria și standardizarea DASH

MPEG a început lucrul la DASH în 2010 după analiza soluțiilor existente: Apple HLS, Microsoft Smooth Streaming și Adobe HDS. Prima versiune a standardului (ISO/IEC 23009-1:2012) a fost publicată în 2012. A doua versiune (2014) a adăugat suport pentru evenimente, inserare publicitară îmbunătățită și adaptare controlată de server. A treia versiune (2019) — suport pentru HDR, 8K, video tactil și integrare îmbunătățită cu MMT (MPEG Media Transport) pentru rețelele 5G.

În 2024, MPEG a anunțat DASH Next Generation, care include suport pentru codecuri neuronale, randare în cloud și optimizare pentru scenarii Extended Reality (XR). Inovația cheie — Neural Network-Based Video Coding (NNVC), care utilizează modele ML pentru decodificare pe partea clientului, ceea ce poate reduce rata de biți cu 30-50% păstrând calitatea.

Cum funcționează DASH?

Procesul de redare a fluxului DASH constă din patru etape consecutive: obținerea MPD, parsarea descrierii fluxului, selectarea reprezentării inițiale și comutarea dinamică între reprezentări. Fiecare etapă are specificul său care influențează calitatea experienței utilizatorului.

Obținerea și parsarea MPD

Playerul încarcă fișierul MPD de la un URL cunoscut. MPD conține o structură XML cu descrierea întregului flux: durata conținutului, scala temporală, perioadele disponibile (Period), seturile de adaptare (AdaptationSet) și reprezentările (Representation) cu parametri concreți de codare. Playerul parsează MPD și creează un model intern al resurselor media disponibile.

Exemplu de fișier MPD de bază pentru conținut VOD cu două rezoluții:

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>

Încărcarea segmentelor și adaptarea

După selectarea reprezentării inițiale, playerul începe să încarce segmente. Fiecare segment conține câteva secunde de conținut (de obicei 2-10 secunde). Playerul menține un buffer pentru câteva segmente înainte, ceea ce asigură rezistența la căderi de scurtă durată ale vitezei rețelei. Algoritmul de selectare a reprezentării (ABR) monitorizează constant viteza de încărcare a segmentelor și ia decizia de comutare între ratele de biți disponibile.

Algoritmii moderni ABR pentru DASH, cum ar fi BOLA (Buffer Occupancy based Lyapunov Algorithm) și Pensieve (bazat pe Reinforcement Learning), iau în considerare nu doar lățimea de bandă curentă, ci și dimensiunea bufferului, tipul conținutului (sport, știri, film) și chiar consumul de energie al dispozitivului. BOLA, care face parte din dash.js și ExoPlayer, minimizează numărul de comutări ale ratei de biți păstrând un buffer stabil, ceea ce a fost confirmat de cercetările ACM (Spiteri et al., 2020).

Structura DASH: MPD, Period, Adaptation Set

Structura ierarhică a fluxului DASH este organizată pe patru niveluri: MPD → Period → AdaptationSet → Representation. Fiecare nivel adaugă un grad de detaliere, permițând descrierea unor scenarii complexe — de la VOD simplu la transmisiuni live cu inserții publicitare și video multi-unghi.

MPD (Media Presentation Description)

MPD — elementul rădăcină, care descrie întreaga prezentare media. Atributele MPD determină tipul fluxului (static pentru VOD, dynamic pentru live), durata totală, scala temporală, profilul și informațiile despre DRM. MPD poate conține una sau mai multe perioade Period, fiecare reprezentând un interval temporal independent de conținut.

Period, AdaptationSet și Representation

Period — segmentul temporal al prezentării. Pentru VOD se utilizează un singur Period pentru întreg conținutul. Pentru live cu inserții publicitare, Period se poate schimba dinamic — playerul încarcă MPD-ul actualizat și detectează un nou Period corespunzător blocului publicitar. Fiecare Period conține unul sau mai multe AdaptationSet.

AdaptationSet — grup de reprezentări interschimbabile de același tip media: video, audio, subtitrări. În cadrul AdaptationSet, toate reprezentările diferă doar prin rata de biți și/sau rezoluție, dar codează același conținut. Proprietate importantă: playerul poate comuta între reprezentări în cadrul aceluiași AdaptationSet la granița segmentelor fără întreruperea redării.

Representation — o variantă concretă de codare cu o rată de biți, rezoluție și codec definite. Pentru fiecare Reprezentare în MPD este specificat un șablon URL pentru încărcarea segmentelor. DASH utilizează un sistem flexibil de adresare a segmentelor — prin șabloane URL cu substituirea numărului segmentului și timpului ($Number$, $Time$), ceea ce permite serverului să genereze dinamic nume de fișiere fără a fi nevoie să enumere fiecare segment în MPD.

Segmentarea și ambalarea

Segmentele DASH pot fi de două tipuri: tip Segment (conțin doar date media) și tip Subsegment (parte a unui segment pentru acces mai granular). Pentru codarea conținutului DASH se utilizează instrumente precum FFmpeg sau codificatoare de pachete. Exemplu de creare a unui flux DASH dintr-un fișier de intrare:

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: compararea protocoalelor

Alegerea între DASH și HLS este una dintre deciziile cheie la proiectarea unui sistem de streaming video. Ambele protocoale rezolvă aceeași sarcină (livrarea adaptivă a video prin HTTP), dar au diferențe fundamentale în arhitectură, suportul codecurilor și ecosistem. Să le analizăm după parametrii cheie.

ParametruDASHHLS
StandardInternațional (ISO/IEC 23009-1)Proprietar (RFC 8216, Apple)
Descrierea fluxuluiXML (MPD)Playlist M3U8
CodecuriOrice (H.264, HEVC, AV1, VP9)Limitat (H.264, HEVC, AV1 din 2023)
Format segmentefMP4 (principal), MPEG-2 TSMPEG-2 TS, fMP4
DRMCENC (unificat pentru toate DRM)FairPlay, Widevine (separat)
Suport iOSPrin playere terțeNativ (AVPlayer, Safari)
BrowsereChrome, Firefox, Edge (prin MSE)Safari (nativ), restul prin MSE

Avantajul cheie al DASH — independența de codecuri. Dacă HLS limita inițial codecurile la cele suportate de Apple (H.264, HEVC și recent AV1), DASH poate utiliza orice codec suportat de player: VP9/VP8 (critic pentru YouTube și Chrome), AV1 (pentru eficiență), H.264/HEVC (pentru compatibilitate). Aceasta face din DASH alegerea preferată pentru serviciile multi-platformă unde este necesar un flux unic pentru toate dispozitivele.

Dezavantajul DASH pe iOS — lipsa suportului nativ în Safari și AVPlayer. Dezvoltatorii de aplicații iOS trebuie să utilizeze playere terțe compatibile HLS sau biblioteci precum libdash cu integrare prin VTDecoder. În practică, aceasta înseamnă că pentru proiectele orientate pe iOS, HLS rămâne standardul de facto, în timp ce pentru Android și platformele web, DASH este o soluție mai flexibilă și mai puternică.

Aplicarea DASH în dezvoltarea aplicațiilor mobile

Integrarea DASH în aplicațiile mobile depinde de platformă. Pe Android, DASH este suportat direct prin ExoPlayer cu modul de extensie. Pe iOS este necesară utilizarea bibliotecilor terțe, cum ar fi libdash cu integrare prin AVFoundation sau MPEGDASHPlayer. Să examinăm implementarea practică pentru ambele platforme.

DASH pe Android prin ExoPlayer

ExoPlayer de la Google oferă suport încorporat pentru DASH prin modulul `exoplayer-dash`. Conectarea fluxului DASH nu diferă de alte formate — este suficient să transmiteți URI-ul fișierului MPD către MediaItem. ExoPlayer determină automat formatul conținutului și lansează rendererul corespunzător, suportând toate algoritmii standard ABR.

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 cu DRM pe ambele platforme

Common Encryption (CENC) — una dintre capacitățile cheie ale DASH, permițând utilizarea unui singur flux media cu diferite sisteme DRM. Fișierul MPD conține elemente XML ContentProtection cu identificatorii sistemelor DRM (Widevine, PlayReady, FairPlay). Clientul selectează sistemul DRM potrivit în funcție de platforma sa și solicită licența prin serverul de licențiere.

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

Optimizarea DASH pentru dispozitive mobile

Aplicațiile mobile necesită o reglare specială a DASH din cauza limitărilor de lățime de bandă și consum de energie. Recomandările principale includ: setarea unui buffer minim de 2-3 segmente pentru rezistența la căderi de scurtă durată ale vitezei, utilizarea segmentelor cu durata de 2-4 secunde pentru o reacție mai rapidă la schimbările rețelei și încărcarea prealabilă a următorului segment la comutarea calității.

Pentru economisirea traficului în rețelele mobile, Bitmovin (2024) recomandă utilizarea Content Steering — un mecanism similar cu funcția analogă HLS, permițând direcționarea dinamică a clientului către nodul CDN optim. DASH Content Steering este descris în specificația ISO/IEC 23009-1:2022 și este suportat în dash.js 4.5+ și ExoPlayer 2.18+.

Întrebări frecvente

Cu ce se deosebește DASH de HLS?

DASH — un standard internațional deschis MPEG, nelegat de un furnizor. Spre deosebire de HLS (protocolul proprietar Apple), DASH suportă orice codecuri, utilizează descrierea fluxului XML (MPD) în loc de M3U8 și asigură un sistem DRM unificat prin CENC. HLS are suport nativ pe iOS, DASH este mai flexibil pentru soluții multi-platformă.

Care playere suportă DASH pe dispozitive mobile?

Pe Android playerul principal pentru DASH este ExoPlayer de la Google cu modulul exoplayer-dash. Pe iOS se utilizează soluții terțe, cum ar fi libdash cu integrare prin AVFoundation sau playere comerciale (THEOplayer, Bitmovin). În browserele web, DASH este redat prin dash.js utilizând MediaSource Extensions.

Ce este MPD în contextul DASH?

MPD (Media Presentation Description) — este un fișier XML care descrie structura fluxului DASH: durata conținutului, ratele de biți disponibile, rezoluțiile, codecurile, formatele segmentelor și localizarea acestora. MPD servește ca punct de intrare pentru player, înlocuind playlistul principal în HLS. Fără fișierul MPD, redarea conținutului DASH este imposibilă.

Suportă DASH transmisiunile live?

Da, DASH suportă atât VOD, cât și transmisiunile live. Pentru live se utilizează tipul dynamic de MPD cu actualizare automată. Serverul actualizează periodic MPD, adăugând segmente noi și eliminându-le pe cele învechite. Low-Latency DASH (LL-DASH) cu codare în bucăți permite atingerea unei întârzieri de 3-8 secunde, comparabilă cu LL-HLS.

Cum funcționează DRM în DASH?

DASH utilizează Common Encryption (CENC, ISO/IEC 23001-7), care permite criptarea conținutului media o singură dată și decriptarea de către orice sistem DRM. MPD conține elemente XML ContentProtection cu indicarea DRM-urilor suportate (Widevine, PlayReady, FairPlay). Playerul selectează DRM-ul potrivit în funcție de platformă și solicită licența prin URL-ul specificat.

Rezumat

  • MPEG-DASH — standard internațional deschis pentru streaming adaptiv HTTP cu descrierea fluxului în format XML MPD.
  • Independența de codecuri — DASH suportă H.264, HEVC, AV1, VP9 și orice alte codecuri disponibile playerului.
  • CENC asigură criptarea unificată a conținutului pentru toate sistemele DRM, simplificând licențierea.
  • Algoritmii ABR (BOLA, Pensieve) minimizează comutările ratei de biți și asigură o redare stabilă.
  • Android — DASH este suportat nativ în ExoPlayer; iOS necesită biblioteci terțe.
  • LL-DASH reduce întârzierea transmisiunilor live la 3-8 secunde.
  • Se recomandă utilizarea DASH pentru proiecte multi-platformă unde flexibilitatea codecurilor și DRM este importantă.

Vom dezvolta o aplicație mobilă la cheie

IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.

Discutați proiectul

Citiți și