DASH — cosa è, protocollo e principio di funzionamento dello streaming dinamico

Autore: IT Sectr Pubblicato: 2026-05-23 Tempo di lettura: 9 min

Dynamic Adaptive Streaming over HTTP (DASH) è uno standard internazionale per lo streaming adattivo multimediale, sviluppato da MPEG (Moving Picture Experts Group). DASH fornisce video e audio tramite HTTP utilizzando una descrizione XML del flusso in formato Media Presentation Description (MPD) e suddivide il contenuto in segmenti con diversi bitrate. Secondo il Bitmovin Video Developer Report (2025), il 58% degli sviluppatori video utilizza DASH, rendendolo il secondo protocollo più popolare dopo HLS.

Punti chiave

  • DASH è uno standard internazionale aperto MPEG per lo streaming adattivo su HTTP.
  • File MPD (Media Presentation Description) gestisce il flusso attraverso una struttura XML con descrizione di periodi e set di adattamento.
  • Codec non sono limitati dalla specifica — DASH supporta H.264, HEVC, AV1, VP9, AAC e altri.
  • DRM è implementato tramite Common Encryption (CENC), che supporta Widevine, PlayReady e FairPlay in un unico flusso.
  • Multipiattaforma DASH è abilitato tramite ExoPlayer (Android), dash.js (browser) e libdash.

Cos'è DASH?

MPEG-DASH (Dynamic Adaptive Streaming over HTTP) è uno standard internazionale ISO/IEC 23009-1, pubblicato nel 2012 come risposta alla frammentazione delle soluzioni proprietarie di streaming adattivo. A differenza di HLS (protocollo proprietario di Apple) e Smooth Streaming (Microsoft), DASH è stato sviluppato fin dall'inizio come uno standard aperto e indipendente dal fornitore, garantendo così il suo ampio supporto nell'industria.

L'innovazione principale di DASH è la separazione della descrizione del flusso e del contenuto multimediale. La descrizione del flusso è memorizzata in un file XML chiamato MPD (Media Presentation Description), che contiene tutte le informazioni sulle opzioni disponibili: bitrate, risoluzioni, codec, sottotitoli, tracce audio. Il contenuto multimediale è memorizzato in segmenti separati (solitamente fMP4), che possono essere caricati indipendentemente tramite HTTP. Questa architettura consente all'infrastruttura del server di essere il più semplice possibile — qualsiasi server HTTP può servire contenuti DASH.

L'adattabilità in DASH è implementata attraverso il multiplexing delle varianti di contenuto. Il server prepara diverse Representations — copie del contenuto con diversi parametri di compressione. Il client analizza la larghezza di banda del canale e passa dinamicamente tra le rappresentazioni, scegliendo l'equilibrio ottimale tra qualità e stabilità di riproduzione. Secondo uno studio accademico (IEEE Access, 2024), DASH con l'algoritmo BOLA mostra il 22% in meno di cambi di bitrate rispetto a HLS in connessioni instabili.

Storia e standardizzazione di DASH

MPEG ha iniziato a lavorare su DASH nel 2010 dopo aver analizzato le soluzioni esistenti: Apple HLS, Microsoft Smooth Streaming e Adobe HDS. La prima versione dello standard (ISO/IEC 23009-1:2012) è stata rilasciata nel 2012. La seconda versione (2014) ha aggiunto il supporto per eventi, inserimento pubblicitario migliorato e adattamento controllato dal server. La terza versione (2019) ha aggiunto il supporto per HDR, 8K, video aptico e una migliore integrazione con MMT (MPEG Media Transport) per reti 5G.

Nel 2024, MPEG ha annunciato DASH Next Generation, che include il supporto per codec a rete neurale, rendering cloud e ottimizzazione per scenari di Realtà Estesa (XR). Un'innovazione chiave è la codifica video basata su reti neurali (NNVC), che utilizza modelli ML per la decodifica lato client, riducendo potenzialmente il bitrate del 30-50% mantenendo la qualità.

Come funziona DASH?

Il processo di riproduzione di un flusso DASH consiste in quattro fasi sequenziali: recupero del MPD, analisi della descrizione del flusso, selezione della rappresentazione iniziale e commutazione dinamica tra rappresentazioni. Ogni fase ha le sue specificità che influenzano la qualità dell'esperienza utente.

Recupero e analisi del MPD

Il lettore carica il file MPD da un URL noto. Il MPD contiene una struttura XML che descrive l'intero flusso: durata del contenuto, linea temporale, periodi disponibili (Period), set di adattamento (AdaptationSet) e rappresentazioni (Representation) con parametri di codifica specifici. Il lettore analizza il MPD e crea un modello interno delle risorse multimediali disponibili.

Esempio di un file MPD di base per contenuti VOD con due risoluzioni:

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>

Caricamento dei segmenti e adattamento

Dopo aver selezionato la rappresentazione iniziale, il lettore inizia a caricare i segmenti. Ogni segmento contiene diversi secondi di contenuto (solitamente 2-10 secondi). Il lettore mantiene un buffer di diversi segmenti in anticipo, garantendo resistenza a cali di breve durata della velocità di rete. L'algoritmo ABR (Adaptive Bitrate) monitora costantemente la velocità di download dei segmenti e decide di passare da un bitrate all'altro tra quelli disponibili.

Gli algoritmi ABR moderni per DASH, come BOLA (Buffer Occupancy based Lyapunov Algorithm) e Pensieve (basato su Reinforcement Learning), considerano non solo la larghezza di banda attuale ma anche la dimensione del buffer, il tipo di contenuto (sport, notizie, film) e persino il consumo energetico del dispositivo. BOLA, che fa parte di dash.js e ExoPlayer, minimizza il numero di cambi di bitrate mantenendo un buffer stabile, come confermato dalla ricerca ACM (Spiteri et al., 2020).

Struttura di DASH: MPD, Period, Adaptation Set

La struttura gerarchica di un flusso DASH è organizzata in quattro livelli: MPD → Period → AdaptationSet → Representation. Ogni livello aggiunge un livello di dettaglio, consentendo di descrivere scenari complessi — dal semplice VOD alle trasmissioni live con inserimenti pubblicitari e video multi-angolo.

MPD (Media Presentation Description)

MPD è l'elemento radice che descrive l'intera presentazione multimediale. Gli attributi MPD definiscono il tipo di flusso (static per VOD, dynamic per live), la durata totale, la linea temporale, il profilo e le informazioni DRM. Il MPD può contenere uno o più Period, ciascuno rappresentante un segmento temporale indipendente del contenuto.

Period, AdaptationSet e Representation

Period è un segmento temporale della presentazione. Per VOD, viene utilizzato un singolo Period per l'intero contenuto. Per il live con pause pubblicitarie, il Period può cambiare dinamicamente — il lettore carica il MPD aggiornato e rileva un nuovo Period corrispondente al blocco pubblicitario. Ogni Period contiene uno o più AdaptationSet.

AdaptationSet è un gruppo di rappresentazioni intercambiabili di un tipo di media: video, audio, sottotitoli. All'interno di un AdaptationSet, tutte le rappresentazioni differiscono solo per bitrate e/o risoluzione ma codificano lo stesso contenuto. Una proprietà importante: il lettore può passare da una rappresentazione all'altra all'interno dello stesso AdaptationSet ai confini dei segmenti senza interruzione della riproduzione.

Representation è una variante di codifica specifica con un bitrate, risoluzione e codec definiti. Per ogni Representation, il MPD specifica un modello URL per caricare i segmenti. DASH utilizza un sistema flessibile di indirizzamento dei segmenti — attraverso modelli URL con sostituzione del numero di segmento e del tempo ($Number$, $Time$), consentendo al server di generare dinamicamente nomi di file senza dover elencare ogni segmento nel MPD.

Segmentazione e packaging

I segmenti in DASH possono essere di due tipi: tipo Segment (contengono solo dati multimediali) e tipo Subsegment (parte di un segmento per un accesso più granulare). Per codificare contenuti DASH, vengono utilizzati strumenti come FFmpeg o codificatori batch. Esempio di creazione di un flusso DASH da un file di input:

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: confronto dei protocolli

La scelta tra DASH e HLS è una delle decisioni chiave nella progettazione di un sistema di streaming video. Entrambi i protocolli risolvono lo stesso problema (consegna adattiva di video su HTTP) ma hanno differenze fondamentali in architettura, supporto dei codec ed ecosistema. Esaminiamoli per parametri chiave.

ParametroDASHHLS
StandardInternazionale (ISO/IEC 23009-1)Proprietario (RFC 8216, Apple)
Descrizione del flussoXML (MPD)Playlist M3U8
CodecQualsiasi (H.264, HEVC, AV1, VP9)Limitato (H.264, HEVC, AV1 dal 2023)
Formato segmentifMP4 (principale), MPEG-2 TSMPEG-2 TS, fMP4
DRMCENC (unificato per tutti i DRM)FairPlay, Widevine (separati)
Supporto iOSTramite lettori di terze partiNativo (AVPlayer, Safari)
BrowserChrome, Firefox, Edge (tramite MSE)Safari (nativo), altri tramite MSE

Vantaggio chiave di DASH — indipendenza dai codec. Mentre HLS originariamente limitava i codec a quelli supportati da Apple (H.264, HEVC e recentemente AV1), DASH può utilizzare qualsiasi codec supportato dal lettore: VP9/VP8 (critico per YouTube e Chrome), AV1 (per efficienza), H.264/HEVC (per compatibilità). Questo rende DASH la scelta preferita per servizi multipiattaforma che richiedono un flusso unificato per tutti i dispositivi.

Svantaggio di DASH su iOS — mancanza di supporto nativo in Safari e AVPlayer. Gli sviluppatori iOS devono utilizzare lettori compatibili HLS di terze parti o librerie come libdash con integrazione tramite VTDecoder. In pratica, ciò significa che per i progetti incentrati su iOS, HLS rimane lo standard de facto, mentre per Android e piattaforme web, DASH è una soluzione più flessibile e potente.

Utilizzo di DASH nello sviluppo mobile

L'integrazione di DASH nelle applicazioni mobili dipende dalla piattaforma. Su Android, DASH è supportato direttamente tramite ExoPlayer con il modulo di estensione. Su iOS, sono necessarie librerie di terze parti come libdash con integrazione tramite AVFoundation o MPEGDASHPlayer. Vediamo l'implementazione pratica per entrambe le piattaforme.

DASH su Android tramite ExoPlayer

ExoPlayer di Google fornisce supporto integrato per DASH attraverso il modulo `exoplayer-dash`. Connettere un flusso DASH non è diverso da altri formati — basta passare l'URI del file MPD in un MediaItem. ExoPlayer rileva automaticamente il formato del contenuto e avvia il renderer appropriato, supportando tutti gli algoritmi ABR standard.

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 con DRM su entrambe le piattaforme

Common Encryption (CENC) è una delle caratteristiche chiave di DASH, che consente di utilizzare un singolo flusso multimediale con diversi sistemi DRM. Il file MPD contiene elementi XML ContentProtection con identificatori di sistemi DRM (Widevine, PlayReady, FairPlay). Il client seleziona il sistema DRM appropriato in base alla propria piattaforma e richiede una licenza al server di licenze.

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

Ottimizzazione di DASH per dispositivi mobili

Le applicazioni mobili richiedono una configurazione speciale di DASH a causa delle limitazioni di larghezza di banda e consumo energetico. Le raccomandazioni principali includono: impostare un buffer minimo di 2-3 segmenti per resistere a cali di velocità di breve durata, utilizzare segmenti di 2-4 secondi per una risposta più rapida ai cambiamenti di rete e precaricare il segmento successivo durante il cambio di qualità.

Per risparmiare traffico sulle reti mobili, Bitmovin (2024) raccomanda di utilizzare Content Steering — un meccanismo simile alla funzione analoga di HLS, che consente di indirizzare dinamicamente il client al nodo CDN ottimale. DASH Content Steering è descritto nella specifica ISO/IEC 23009-1:2022 ed è supportato in dash.js 4.5+ e ExoPlayer 2.18+.

Domande frequenti

In cosa DASH si differenzia da HLS?

DASH è uno standard internazionale aperto MPEG, non legato a nessun fornitore. A differenza di HLS (protocollo proprietario di Apple), DASH supporta qualsiasi codec, utilizza la descrizione del flusso XML (MPD) invece di M3U8 e fornisce un sistema DRM unificato tramite CENC. HLS ha supporto nativo su iOS, mentre DASH è più flessibile per soluzioni multipiattaforma.

Quali lettori supportano DASH sui dispositivi mobili?

Su Android, il lettore principale per DASH è ExoPlayer di Google con il modulo exoplayer-dash. Su iOS, vengono utilizzate soluzioni di terze parti come libdash con integrazione tramite AVFoundation o lettori commerciali (THEOplayer, Bitmovin). Nei browser web, DASH viene riprodotto tramite dash.js utilizzando MediaSource Extensions.

Cos'è MPD nel contesto di DASH?

MPD (Media Presentation Description) è un file XML che descrive la struttura del flusso DASH: durata del contenuto, bitrate disponibili, risoluzioni, codec, formati dei segmenti e loro posizione. MPD funge da punto di ingresso per il lettore, sostituendo la playlist master in HLS. Senza un file MPD, la riproduzione di contenuti DASH è impossibile.

DASH supporta le trasmissioni live?

Sì, DASH supporta sia VOD che trasmissioni live. Per il live, viene utilizzato il tipo MPD dynamic con aggiornamento automatico. Il server aggiorna periodicamente il MPD, aggiungendo nuovi segmenti e rimuovendo quelli obsoleti. Low-Latency DASH (LL-DASH) con codifica chunked consente di raggiungere una latenza di 3-8 secondi, paragonabile a LL-HLS.

Come funziona il DRM in DASH?

DASH utilizza Common Encryption (CENC, ISO/IEC 23001-7), che consente di crittografare il contenuto multimediale una volta e decrittografarlo con qualsiasi sistema DRM. Il MPD contiene elementi XML ContentProtection che indicano i DRM supportati (Widevine, PlayReady, FairPlay). Il lettore seleziona il DRM appropriato in base alla piattaforma e richiede una licenza tramite l'URL specificato.

Riepilogo

  • MPEG-DASH è uno standard internazionale aperto per lo streaming adattivo su HTTP con descrizione del flusso XML in formato MPD.
  • Indipendenza dai codec — DASH supporta H.264, HEVC, AV1, VP9 e qualsiasi altro codec disponibile sul lettore.
  • CENC fornisce crittografia unificata del contenuto per tutti i sistemi DRM, semplificando le licenze.
  • Algoritmi ABR (BOLA, Pensieve) minimizzano i cambi di bitrate e garantiscono una riproduzione stabile.
  • Android — DASH è supportato nativamente in ExoPlayer; iOS richiede librerie di terze parti.
  • LL-DASH riduce la latenza delle trasmissioni live a 3-8 secondi.
  • Raccomandato utilizzare DASH per progetti multipiattaforma dove la flessibilità di codec e DRM è importante.

Svilupperemo un'applicazione mobile chiavi in mano

IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.

Discuti il progetto

Leggi anche