Streaming adattativo e DASH
In questa pagina 8
Uno streaming video funziona se i dati arrivano al ritmo con cui vengono riprodotti. Ma la rete non garantisce un throughput costante, e il bit-rate di un video compresso è deciso prima, spesso quando nessuno sa a che velocità lo vedrà ciascun utente. Questa nota spiega il problema, perché le soluzioni "ingenue" falliscono, come lavora lo streaming adattativo (ABR, adaptive bitrate), come si modella il buffer del client, come si misura la QoE di uno streaming e che cosa è MPEG-DASH. Gli esercizi numerici sono in Esercizio - Buffer di riproduzione e streaming adattativo (domande ed esercizi del corso). Prerequisiti: Servizi multimediali e loro requisitiUn servizio multimediale trasporta uno o più media (testo, suono, immagini, video) come segnali digitali. Si classifica in streaming (si consuma mentre arriva, serve un playout buffer) e bulk transfer (si usa solo a file completo); poi in stored, live e real-time (ritardo sotto 150 ms) e in interattivo o no. I requisiti si esprimono con bit-rate, latenza, jitter, tasso d'errore, complessità e fedeltà: ogni servizio pesa questi parametri in modo diverso (il video in streaming vuole poco jitter e tollera errori, un file vuole zero errori e tollera latenza). Aumentare solo il bit-rate non basta.Servizi multimediali e loro requisiti →, Codifica video - stima del moto, MPEG e H.264Un video non compresso costa da centinaia di Mbit/s a decine di Gbit/s; la compressione toglie prima di tutto la ridondanza temporale (immagini consecutive molto simili) con la stima del movimento per block-matching, $\mathbf v^*=\arg\min_{\mathbf v},d(B_k^{(\mathbf p)},B_h^{(\mathbf p+\mathbf v)})+\lambda R(\mathbf v)$, e la compensazione del movimento; l'errore di predizione (sparso) si codifica come in JPEG. I fotogrammi sono di tipo I (intra), P (predetti da un riferimento) e B (da due riferimenti, passato e futuro), organizzati in GOP di $N$ immagini con ancore ogni $M$; le I sono 3-5 volte più grandi delle P e 10-20 volte delle B. Il codificatore ibrido contiene un Decoded Frame Buffer per ripetere la predizione del decodificatore. Standard: MPEG-2, H.264/AVC (2003), H.265/HEVC (2013), H.266/VVC (2021), VP9 e AV1: ciascuno dimezza circa il tasso del precedente. Il tasso medio di un GOP I+$N$P è $R_C=fB_I\frac{1+\alpha N}{1+N}$.Codifica video - stima del moto, MPEG e H.264 →, Protocolli per i servizi multimedialiLe applicazioni multimediali si appoggiano al livello di trasporto, che offre un canale per flussi di bit, end-to-end e tra processi (porte). TCP è affidabile, ordinato, con controllo di flusso e di congestione ma più oneroso (header 20-60 byte, handshake); UDP è senza connessione e best-effort (header 8 byte): per il real-time conviene UDP, lasciando all'applicazione le funzioni davvero necessarie. Famiglia RTP: RTP (numero di sequenza, timestamp, tipo di payload; su UDP; SRTP lo cifra), RTCP (feedback sulla qualità, sincronizzazione), RTSP (telecomando di rete per sessioni di streaming), RTMP (Adobe, su TCP); WebRTC (API JavaScript che integra RTP/SRTP, DTLS, ICE/STUN/TURN) e SIP (segnalazione). Videochiamata: codec + WebRTC o SIP + RTP/RTCP su UDP. Streaming live e on demand: HLS o MPEG-DASH su HTTP/TCP (o HTTP/3 su QUIC) con CDN, perché HTTP attraversa NAT e firewall e sfrutta le cache.Protocolli per i servizi multimediali →.
1. Il problema:
Come si sceglie il tasso di codifica di un video? La QoE cresce con (in tutti gli esperimenti MOS e metriche oggettive come PSNR, SSIM, VMAF aumentano con per un dato codec): converrebbe il valore più grande possibile. Il limite è il throughput a lungo termine a livello applicazione: Il tasso di codifica si può controllare con le tecniche di rate control, che regolano dinamicamente il passo di quantizzazione del codec per inseguire un tasso obiettivo. Il tasso è però raramente costante frame per frame (le I costano molto più delle P e B, Codifica video - stima del moto, MPEG e H.264Un video non compresso costa da centinaia di Mbit/s a decine di Gbit/s; la compressione toglie prima di tutto la ridondanza temporale (immagini consecutive molto simili) con la stima del movimento per block-matching, $\mathbf v^*=\arg\min_{\mathbf v},d(B_k^{(\mathbf p)},B_h^{(\mathbf p+\mathbf v)})+\lambda R(\mathbf v)$, e la compensazione del movimento; l'errore di predizione (sparso) si codifica come in JPEG. I fotogrammi sono di tipo I (intra), P (predetti da un riferimento) e B (da due riferimenti, passato e futuro), organizzati in GOP di $N$ immagini con ancore ogni $M$; le I sono 3-5 volte più grandi delle P e 10-20 volte delle B. Il codificatore ibrido contiene un Decoded Frame Buffer per ripetere la predizione del decodificatore. Standard: MPEG-2, H.264/AVC (2003), H.265/HEVC (2013), H.266/VVC (2021), VP9 e AV1: ciascuno dimezza circa il tasso del precedente. Il tasso medio di un GOP I+$N$P è $R_C=fB_I\frac{1+\alpha N}{1+N}$.Codifica video - stima del moto, MPEG e H.264 →); si può considerare circa costante a livello di GOP.
La cattiva notizia: non si controlla . Il throughput non è sotto il controllo dei fornitori; spesso non è noto quando si codifica (codifica e trasmissione in momenti diversi; eccezioni: live e real-time, dove si può stimare); cambia molto in fretta durante la trasmissione, in particolare per gli utenti mobili; nei servizi broadcast ogni utente ha un throughput diverso. Quindi è molto difficile garantire in tutte le situazioni.
1.1 Che cosa succede se
I pacchetti arrivano con velocità maggiore di quella con cui partono (): si accumulano nei buffer dei router, che si riempiono; a quel punto i pacchetti devono essere scartati e non arrivano più al client. Rischio di congestione e ulteriore incremento dei ritardi.
Approfondimento (modello di latenza; marcato "non in programma" nelle slide). Un modello a un solo hop calcola, per il frame acquisito al tempo : istante di inizio trasmissione (il frame è pronto dopo la codifica , ma parte solo quando il canale ha finito il frame precedente), istante di fine ricezione ( propagazione, decodifica), latenza . (In una delle due versioni delle slide il primo termine del massimo è scritto : è un refuso, la frase accanto dice .) Esempio: 25 fps ( ms), un frame I da 400 kbit seguito da P da 40 kbit, Mbit/s ( in media), . L'I dura s di trasmissione, ogni P s: la latenza dell'I è ms; la prima P è pronta a ms ma parte solo a ms ( ms); e così via con finché alla frame 9 la coda si svuota e ms. Con invece l'eccesso non si riassorbe e la coda cresce.
1.2 Rimedi che non funzionano
- Compressione estrema (tasso molto piccolo): semplice e senza modifiche alla rete, ma la qualità è bassa per tutti, anche per chi ha una buona rete (approccio "pessimistico").
- Packet drop nei router: il router scarta i pacchetti in eccesso. Il risultato sulla QoE è fuori controllo: il router non sa quali pacchetti contano (le frame di riferimento: perdere una I distrugge l'immagine per secondi); i video statici sono più robusti di quelli dinamici.
- Transcoding in rete: il router decodifica e ricodifica a un tasso inferiore. Efficace per la QoE ma troppo costoso (ogni router ispeziona il contenuto, decide, transcodifica) e incompatibile con la cifratura end-to-end (HTTPS, QUIC).
Conclusione: la rete è "stupida"; l'intelligenza per adattarsi deve stare ai margini, nel server o nel client.
1.3 Server più rete: codifica scalabile (SVC)
Il video è codificato dal server con la codifica scalabile: livello base decodificabile da solo (basso tasso, qualità ridotta) più livelli di enhancement che migliorano frame rate, risoluzione o qualità. In congestione un nodo intelligente può scartare gli enhancement senza corrompere il base: il client riceve comunque un flusso valido. Pro: degrado di qualità sotto controllo, QoE simile al transcoding, router senza operazioni complesse. Contro: a parità di qualità un codificatore scalabile richiede circa il 5-15% di bit-rate in più per ogni strato aggiuntivo; i router vanno comunque aggiornati. Oggi molto usata in WebRTC per le videoconferenze di gruppo, meno nello streaming VoD (che preferisce DASH).
2. Streaming adattativo (ABR)
Lo streaming video adattativo è oggi la soluzione più diffusa al problema "tasso di codifica contro throughput" per lo streaming stored e live. Si basa su modifiche a server e client, senza requisiti per la rete: facile da realizzare (solo il livello applicazione) e con ottima QoE. La chiave è la collaborazione: il server mette a disposizione molte versioni di ogni contenuto e il client sceglie dinamicamente quella che massimizza la QoE.
2.1 Modello di sistema
Il modello è tirato dal client (pull): l'intera sequenza è divisa in segmenti di durata (tipicamente da 1 a 10 secondi); ognuno degli segmenti è codificato in modo indipendente (quindi decodificabile in modo indipendente). Ogni segmento è codificato in versioni o livelli di qualità , ciascuno caratterizzato da tasso di codifica , risoluzione e frame rate, gli stessi per tutti i segmenti. Per ottenere tassi diversi (specie piccoli) non si agisce solo sulla quantizzazione: si può cambiare anche la risoluzione spaziale e il numero di immagini al secondo. Si assume che a un bit-rate maggiore corrisponda una qualità percepita maggiore.
| Segmento 1 | Segmento 2 | Segmento 3 | ... | |
|---|---|---|---|---|
| Livello 3 | url(1,3) | url(2,3) | url(3,3) | |
| Livello 2 | url(1,2) | url(2,2) | url(3,2) | |
| Livello 1 | url(1,1) | url(2,1) | url(3,1) |
Come fa il client a conoscere le informazioni? Con un file di descrizione, l'MPD (Media Presentation Description, MDF nelle slide), messo a disposizione dal server: contiene il numero di segmenti , la durata , il numero di livelli , i bit-rate , le risoluzioni e i frame rate, e l'URL di ogni segmento . Esempio dalle slide: , s (25 minuti), , bit-rate kbit/s, kbit/s, , , Mbit/s, risoluzioni da a , frame rate 25 o 50.
Una versione sintetica di un MPD in formato XML (esempio costruito sul modello della sintassi standard):
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" type="static"
mediaPresentationDuration="PT25M" minBufferTime="PT2S"
profiles="urn:mpeg:dash:profile:isoff-live:2011">
<Period>
<AdaptationSet mimeType="video/mp4" segmentAlignment="true">
<SegmentTemplate duration="1" timescale="1" startNumber="1"
initialization="init_$RepresentationID$.mp4"
media="seg_$RepresentationID$_$Number$.m4s"/>
<Representation id="1" bandwidth="200000" width="480" height="270" frameRate="25"/>
<Representation id="2" bandwidth="500000" width="960" height="540" frameRate="25"/>
<Representation id="3" bandwidth="1000000" width="960" height="540" frameRate="50"/>
<Representation id="4" bandwidth="2000000" width="1920" height="1080" frameRate="50"/>
<Representation id="5" bandwidth="5000000" width="3840" height="2160" frameRate="50"/>
</AdaptationSet>
</Period>
</MPD>2.2 Il ciclo del client
- Il client scarica l'MPD e conosce le opzioni.
- Per ogni segmento sceglie il livello e lo richiede con HTTP (
GETsu ): la richiesta HTTP passa nella maggior parte dei firewall. - La richiesta del segmento parte appena il segmento è stato scaricato completamente: così un singolo client non forma code nei router.
- Riproduce i segmenti nell'ordine di arrivo (FIFO) dal playout buffer.
Obiettivi della scelta: scaricare alla qualità più alta possibile, evitare lo stallo (rebuffering), stabilizzare la qualità (i cambi continui infastidiscono). Problema di ricerca: qual è la strategia migliore per decidere il livello del segmento successivo? È un campo di ricerca aperto; il client deve stimare lo stato del sistema (throughput stimato dai download precedenti, e stato del buffer ).
Perché HTTP e non RTSP/RTMP. Vedi Protocolli per i servizi multimedialiLe applicazioni multimediali si appoggiano al livello di trasporto, che offre un canale per flussi di bit, end-to-end e tra processi (porte). TCP è affidabile, ordinato, con controllo di flusso e di congestione ma più oneroso (header 20-60 byte, handshake); UDP è senza connessione e best-effort (header 8 byte): per il real-time conviene UDP, lasciando all'applicazione le funzioni davvero necessarie. Famiglia RTP: RTP (numero di sequenza, timestamp, tipo di payload; su UDP; SRTP lo cifra), RTCP (feedback sulla qualità, sincronizzazione), RTSP (telecomando di rete per sessioni di streaming), RTMP (Adobe, su TCP); WebRTC (API JavaScript che integra RTP/SRTP, DTLS, ICE/STUN/TURN) e SIP (segnalazione). Videochiamata: codec + WebRTC o SIP + RTP/RTCP su UDP. Streaming live e on demand: HLS o MPEG-DASH su HTTP/TCP (o HTTP/3 su QUIC) con CDN, perché HTTP attraversa NAT e firewall e sfrutta le cache.Protocolli per i servizi multimediali →: HTTP è stateless (modello pull: il server risponde a GET isolate e lo stato sta nel client), attraversa NAT e firewall su porte standard, tratta i segmenti come file normali, quindi cache e CDN danno scalabilità a basso costo (Livello applicazione - HTTPIl livello applicazione è il più alto della pila: offre servizi all'utente con una connessione logica tra le due applicazioni e riceve servizi solo dal trasporto (DNS, HTTP, e-mail, FTP). Il Web (WWW, nato al CERN nel 1989) è un servizio client-server distribuito di pagine collegate da ipertesti; ogni pagina ha un URL protocollo://host:porta/percorso. HTTP: il client manda una richiesta, il server una risposta, su TCP (server sulla porta 80, client su una porta temporanea); senza stato. Messaggi di testo (riga di richiesta o di stato, intestazioni, riga vuota, corpo), metodi GET, POST, HEAD, PUT, DELETE, codici di stato 2xx-5xx. Una pagina con N oggetti incorporati richiede 2(N+1) RTT con connessioni non persistenti e (N+2) RTT con connessione persistente (trascurando la trasmissione). I cookie danno memoria al protocollo: Set-Cookie nella risposta, Cookie nelle richieste, file nel browser e base di dati nel sito. Un proxy (web cache) tiene le copie delle risposte recenti: meno carico sul server, meno traffico, meno ritardo.Livello applicazione - HTTP →, Caching, autenticazione, tipi MIME e URI in HTTPLa cache HTTP riusa le risposte senza contattare il server finche' sono fresche (Cache-Control: max-age, Expires; in mancanza una durata euristica pari a circa il 10% del tempo trascorso da Last-Modified) e, quando sono scadute, le rivalida con una richiesta condizionale (If-None-Match con ETag, If-Modified-Since con Last-Modified) alla quale il server risponde 304 senza corpo; no-store vieta di memorizzare, no-cache obbliga a rivalidare, private esclude le cache condivise. L'autenticazione usa 401 con WWW-Authenticate e la risposta Authorization: Basic (base64 di utente:password, solo sopra TLS) o Digest (hash con nonce); 407 vale per i proxy. Content-Type porta il tipo MIME (tipo/sottotipo; parametri come charset e boundary), Accept e gli altri header Accept-* guidano la negoziazione. Un URI (RFC 3986) e' scheme://userinfo@host:porta/percorso?query#frammento, con percent-encoding %HH per i byte non ammessi e regole per risolvere i riferimenti relativi.Caching, autenticazione, tipi MIME e URI in HTTP →). Il trasporto oggi tende a essere HTTP/3 su QUIC, senza head-of-line blocking e con 0-RTT (WebSocket, QUIC e HTTP-3HTTP e' richiesta e risposta, quindi poco adatto a notifiche e dati in tempo reale (polling, long polling, SSE); WebSocket (RFC 6455) apre con un handshake HTTP/1.1 Upgrade (Sec-WebSocket-Key a 16 byte casuali in Base64, risposta 101 con Sec-WebSocket-Accept = Base64 di SHA-1 di chiave piu' GUID fisso) un canale bidirezionale persistente sulla stessa connessione TCP, con frame di 2-14 byte di intestazione (FIN, opcode, MASK, lunghezza su 7, 16 o 64 bit, chiave di mascheramento obbligatoria dal client al server) e messaggi di testo, binari, close, ping e pong. QUIC (RFC 9000) e' un protocollo di trasporto sopra UDP con TLS 1.3 integrato, flussi indipendenti (niente head-of-line blocking fra flussi), connection ID che permettono di cambiare rete, handshake in 1 RTT e ripresa in 0 RTT; HTTP/3 (RFC 9114) mappa HTTP su QUIC con un flusso per richiesta e QPACK per gli header, ed e' annunciato con Alt-Svc.WebSocket, QUIC e HTTP-3 →).
2.3 Tempo di download
Il segmento al livello pesa bit. Se durante il download il throughput è (costante), il tempo di download è Se il segmento si scarica più in fretta di quanto dura: il buffer cresce; se occorre più tempo della durata del segmento: il buffer cala.
3. Il playout buffer
Definizione. è il numero di secondi di video ricevuti ma non ancora riprodotti all'istante . Si misura in secondi di video, non in bit o byte. È l'autonomia del player: se la rete "muore" all'istante , il video continua per esattamente secondi. Quando la riproduzione si ferma: freezing, stallo o rebuffering.
Si chiama rebuffering perché la riproduzione riprende solo quando i successivi segmenti sono stati completamente scaricati. All'inizio il buffer è vuoto, quindi tecnicamente lo streaming parte sempre con un rebuffering, ma gli utenti tollerano molto di più un'attesa prima dell'avvio: perciò nel primo rebuffering si scaricano segmenti.
Parametri del modello: (durata di un segmento), (throughput durante il download del segmento ), (livello richiesto), , (segmenti scaricati prima di cominciare la riproduzione, quindi tempo di buffering iniziale; è l'istante di inizio riproduzione), (nuovi segmenti da scaricare prima di riprendere dopo uno stallo).
3.1 Andamento di
Si usa un modello semplificato a tempo continuo (più semplice da trattare del tempo discreto dei singoli pacchetti), con costante durante il download di un segmento. Allora è lineare a tratti. Due stati:
- Stallo / buffering (non si riproduce): si ricevono bit/s; in un intervallo si ricevono bit, che valgono secondi di video (si divide per i bit al secondo del video). Nulla viene consumato, quindi e
- Riproduzione (playout): si ricevono bit e se ne consumano (si riproducono secondi di video, che costano bit): , quindi
Il rapporto incrementale non dipende da (per questo il modello è lineare a tratti). In riproduzione il buffer si riempie se , si svuota se , resta costante se . È la stessa condizione "" del problema iniziale.
Come si usa. Per ogni intervallo di costante si calcola il valore di all'inizio e la pendenza; si segue l'evoluzione fino al prossimo cambio. Se in riproduzione arriva a 0, inizia lo stallo e si passa a finché (cioè segmenti pieni): allora si riprende.
Esempio con numeri (video con Mbit/s). (a) Mbit/s: : il buffer si riempie di s per ogni secondo di riproduzione. (b) Mbit/s con un buffer iniziale di s: ; il buffer si svuota quando , cioè s. (c) Mbit/s, buffer iniziale nullo e riproduzione immediata: per i primi 10 s Mbit/s e , quindi s; poi Mbit/s, , si svuota dopo s: stallo a s, in un video che dura 50 s: c'è re-buffering.
3.2 Esempio con più segmenti (dalle slide)
Si considera , , ; il client sceglie sempre lo stesso livello ( costante); i tempi di download dei 6 segmenti (l'ingresso del sistema) dipendono dalla rete. La riproduzione inizia a , quando sono stati scaricati segmenti. L'andamento di :
- fino a il buffer si riempie (buffering iniziale) con pendenza ; la pendenza aumenta quando il secondo segmento si scarica più in fretta;
- dopo comincia la riproduzione; finché () il buffer continua a crescere, lentamente;
- il throughput cala bruscamente: del segmento 4 è molto grande; in questo intervallo e il buffer si svuota;
- quando la riproduzione è bloccata: stallo; il buffer ricomincia a riempirsi (lentamente, poi più in fretta quando il throughput risale); la riproduzione riparte quando un nuovo segmento () è stato scaricato completamente;
- i segmenti successivi sono scaricati con e il buffer cresce; quando l'ultimo segmento è stato ricevuto, il buffer si svuota con (si riproduce senza più ricevere).
Con il buffering iniziale è più corto: all'istante il buffer è più piccolo e, quando cala, si svuota prima e ci mette di più a riempirsi di nuovo: stalli più probabili e più lunghi. Un buffering iniziale lungo peggiora la QoE meno di uno stallo.
3.3 Esempio svolto: due strategie a confronto
Sistema con s, tre livelli , , Mbit/s, , , e throughput Mbit/s per , Mbit/s per , Mbit/s per (secondi). Soluzione completa in Esercizio - Buffer di riproduzione e streaming adattativo (domande ed esercizi del corso); qui l'essenziale.
Strategia A: sempre il livello 3 ( Mbit/s, ogni segmento pesa 2 Mbit). Per partire servono segmenti, cioè 4 Mbit: nei primi 2 s se ne scaricano , nel secondo successivo , restano Mbit che a Mbit/s richiedono s: la riproduzione parte a s con s. Poi : , il buffer si svuota in s ( s). Lo stallo dura il tempo di scaricare un segmento (): s; si riprende con s, che a s/s dura 10 s: stallo ogni s, ciascuno di s.
Strategia B: livello 3 tranne i segmenti con (livello 2). Il segmento 3 al livello 2 si scarica in s con : il buffer sale a s; i quattro segmenti successivi al livello 3 durano s con : il buffer scende a s e il ciclo ripete (periodo di 5 s, 5 segmenti). Nessuno stallo: oscilla tra 2 e s.
Grafico interattivo: Strategia A (sempre livello 3): il buffer cresce fino a 2 s all'avvio (t = 3,5 s), poi cala di 0,1 s per secondo e a t = 23,5 s si svuota; ogni stallo (pendenza +0,9) dura 1,11 s e poi il ciclo si ripete ogni 11,11 s
Grafico interattivo: Strategia B (livello 2 per un segmento su cinque): dopo l'avvio il buffer oscilla tra 2 s e 2,44 s e non tocca mai zero: nessuno stallo, a prezzo di un livello di qualità più basso ogni cinque segmenti
Confronto di QoE. B non ha stalli; ha segmenti a livello 3 e a livello 2, con due cambi di livello ogni cinque segmenti: e , quindi (trascurando che è uguale per le due strategie) . La strategia C "sempre livello 2" non ha stalli né cambi: . se e solo se : la scelta migliore dipende dai pesi, fissati con esperimenti soggettivi.
4. Misurare la QoE di uno streaming
La QoE globale è influenzata da quattro fattori:
- qualità video per segmento: con funzione crescente. Poiché è molto difficile modellare la relazione tra MOS e bit-rate (dipende dal contenuto: alcune immagini sembrano perfette a 0,5 bpp, altre mostrano artefatti a 1 bpp; il PSNR è solo un proxy), si adottano modelli semplici: o anche ;
- numero e durata dei rebuffering: indicando con la durata del rebuffering durante il segmento (zero se non c'è); poiché dopo uno stallo si scarica almeno un segmento intero, non può esserci più di un rebuffering per segmento. Il rebuffering è molto dannoso indipendentemente dalla durata: la penalità è con ma relativamente grande, poi crescente lentamente: per , con piccolo e grande;
- numero e ampiezza delle variazioni di qualità: qualsiasi variazione, in su o in giù, è di per sé fastidiosa: meglio una qualità costante, anche un po' bassa, che cambiare spesso;
- durata del buffering iniziale: gli utenti lo accettano se riduce i rimbalzi successivi, ma se troppo lungo riduce la QoE.
La QoE sul segmento è che cresce con il livello, cala con i cambi di livello e crolla se c'è uno stallo. A livello di sequenza: dove è il tempo per scaricare segmenti al livello scelto dalla strategia. I pesi e sono difficili da fissare: è relativamente piccolo (buona tolleranza al ritardo iniziale), ha una discontinuità in zero (anche il più piccolo stallo è fastidioso). (Un'altra scrittura nelle slide: , con tipicamente altissimo.) Il client ABR cerca di massimizzare .
5. Algoritmi di adattamento (ABR)
L'ABR di norma non è standardizzato perché è implementato solo nel client (lo è il protocollo di comunicazione con il server): ogni client può usare un algoritmo diverso, più "aggressivo" (livello alto con più rischio di stallo) o più "cauto" (qualità ridotta per diminuire la probabilità di stallo). Famiglie:
- basati sul throughput: stimano il throughput e scelgono il livello in modo che il tempo di download sia inferiore al tempo di riproduzione del segmento (esempi: PANDA, FESTIVE, SQUAD);
- basati sul buffer: scelgono in base al riempimento del buffer: buffer alto/basso significa che il video arriva più veloce/più lento di quanto è consumato, quindi la qualità può essere aumentata/ridotta (esempi: BBA, BOLA);
- ibridi: usano throughput e buffer (esempi: ELASTIC, MPC, ABMA+, DYNAMIC).
5.1 Un algoritmo di esempio (dalle slide)
Il client sceglie il livello per massimizzare conoscendo il livello precedente , il buffer (secondi non ancora riprodotti) e una stima del throughput . Per ogni livello candidato :
- ; è la pendenza del buffer; durante il download .
- Se il buffer non si svuota: .
- Se il buffer diventa vuoto a con : . Secondo le slide: se non c'è stallo (); altrimenti ci sono ancora secondi del segmento da scaricare e lo stallo dura il tempo di scaricare il resto più nuovi segmenti, .
- Si valuta e si tiene il livello con massimo.
Due avvertenze di lettura. (a) Una delle due versioni delle slide inizializza e sceglie se : così sceglierebbe il livello peggiore; la versione corretta usa e sceglie se (obiettivo: massimizzare). (b) Nel modello a fluido il confronto naturale per decidere se c'è stallo è tra l'istante in cui si svuota il buffer e la durata del download del segmento (non la sua durata di riproduzione ): lo stallo c'è se . L'algoritmo delle slide è comunque una semplificazione didattica.
Limiti dichiarati dell'algoritmo: throughput costante durante il download e anche durante lo stallo; costante durante la riproduzione (mentre le I richiedono più bit); nessun margine di sicurezza su (se non si svuota durante il segmento corrente, non si fa nulla per prevenire lo stallo successivo).
6. MPEG-DASH
Limiti delle implementazioni di streaming adattativo: rischio di freezing o bassa qualità se il RTT è grande (e diventa più difficile stimare il throughput); le decisioni dipendono solo dal client, che ha una visione parziale delle condizioni del canale; con più client DASH o strategie aggressive l'adattamento può essere subottimo; file size e bit-rate non sono gli unici aspetti che influiscono sulla qualità.
MPEG-DASH (Dynamic Adaptive Streaming over HTTP) è lo standard per consentire lo streaming dinamico su HTTP. È una tecnologia abilitante: fornisce i formati (MPD, segmenti) per rendere possibile uno streaming efficiente e di alta qualità. Non è un sistema, un protocollo, un codec né una specifica del client. È una possibile soluzione: aperta e standardizzata, ma esistono soluzioni proprietarie (come HLS di Apple, simile nel principio).
Principi: riutilizza tecnologie esistenti (container, codec); sfrutta le CDN HTTP, perché HTTP tipicamente non è filtrato dai nodi intermedi; punta a una QoE elevata (avvio rapido, niente rebuffering); sceglie la qualità in base a condizioni di rete, capacità del dispositivo e preferenze dell'utente; permette di passare da un server a un altro senza interruzioni; sposta l'intelligenza dalla rete al client, il che favorisce la concorrenza tra le implementazioni.
Architettura. Lato server DASH: un server HTTP standard con la Media Presentation Description e i segmenti video a più qualità (alta, media, bassa nel tempo). Lato client DASH: client HTTP, adaptation engine (sceglie la qualità dei segmenti massimizzando la QoE) e media engine (decodifica e riproduce).
7. Riepilogo
Lo streaming adattativo trasforma il vincolo da obbligo statico (impossibile da garantire) a adattamento dinamico: video diviso in segmenti a più livelli (MPD), client che sceglie in base a throughput e buffer, su HTTP (CDN, firewall, QUIC), con QoE modellata da qualità, stalli, variazioni e buffering iniziale.
Domande d'esame
1. Nello streaming video adattativo un video è diviso in segmenti di uguale lunghezza e qualità diverse (vero o falso)? Chi decide la qualità? Traccia: vero: segmenti da secondi, ciascuno in versioni a tassi diversi; il client decide il livello segmento per segmento (modello pull su HTTP), usando l'MPD per conoscere URL e tassi.
2. Un video ha Mbit/s e 25 fps con frame di 40 kbit; il throughput è 0,8 Mbit/s e il buffer iniziale è di 5 s. Dopo quanto tempo dall'inizio della riproduzione si svuota il buffer? Traccia: kbit Mbit/s; s/s; s.
3. Perché per lo streaming si usa HTTP e non RTSP o RTMP? Quali vantaggi ha QUIC rispetto a TCP? Traccia: HTTP è stateless e passa NAT e firewall, i segmenti sono file normali e si cachano su CDN; RTSP e RTMP sono stateful, push, su porte non standard o UDP spesso bloccato. QUIC elimina l'head-of-line blocking (stream indipendenti), offre 0-RTT e connection migration.
Versione ripasso
Problema. QoE cresce con ; vincolo (throughput a lungo termine a livello applicazione). si controlla (rate control: passo di quantizzazione; circa costante a livello di GOP), no (non noto alla codifica, varia in fretta, diverso per ogni utente). Se : i pacchetti si accumulano nei buffer dei router, perdite, congestione, latenza crescente. (Modello a coda, non in programma: , , ; esempio I da 400 kbit su 2 Mbit/s: latenza 200 ms che scende di 20 ms a frame fino a 20 ms alla frame 9.)
Rimedi. Compressione estrema: bassa qualità per tutti. Packet drop nei router: QoE fuori controllo (si perdono frame di riferimento). Transcoding in rete: costoso, incompatibile con la cifratura end-to-end. La rete è "stupida": l'intelligenza ai margini. SVC: livello base + enhancement, i nodi scartano gli enhancement; costo 5-15% per strato, router da aggiornare; usata in WebRTC, poco nel VoD.
ABR. Modello pull del client: segmenti da (1-10 s), indipendenti; livelli per segmento con , risoluzione, fps uguali per tutti i segmenti; l'MPD elenca , , , , risoluzioni, fps, (esempio , s, : 200 kbit/s, 500 kbit/s, 1, 2, 5 Mbit/s). Il client scarica l'MPD, richiede ogni segmento con HTTP GET appena finito il precedente, sceglie massimizzando la QoE: qualità alta, niente stalli, qualità stabile. Tempo di download , . Perché HTTP: stateless/pull, NAT e firewall, cache e CDN, HTTP/3 su QUIC (stream indipendenti, 0-RTT, connection migration).
Buffer. = secondi di video ricevuti e non riprodotti (non bit); = stallo (freeze, rebuffering). Parametri: , , , (segmenti prima dell'avvio, = istante di avvio), (segmenti prima di riprendere dopo lo stallo; ).
- Stallo: . Riproduzione: (riempie se , svuota se , costante se ). Lineare a tratti con costante per segmento; dopo uno stallo si riprende quando .
- Esempi ( Mbit/s): ; , s , vuoto a s. Mbit/s, Mbit/s per 10 s (, ) poi (): stallo a 20 s.
- piccolo: stalli più probabili e lunghi; buffering iniziale lungo disturba meno di uno stallo.
QoE. Fattori: qualità per segmento ( o ), rebuffering (, , grande), variazioni di qualità, buffering iniziale. ; . Il client massimizza .
Algoritmi ABR. Non standardizzati (client). Throughput-based (PANDA, FESTIVE, SQUAD: tempo di download minore del tempo di riproduzione); buffer-based (BBA, BOLA); ibridi (ELASTIC, MPC, ABMA+, DYNAMIC). Esempio: per ogni livello : ; ; ; stallo se minore del tempo di download (); ; si sceglie il livello con massimo (una versione delle slide ha il segno invertito). Limiti: throughput costante, costante, nessun margine di sicurezza su . Aggressivo contro cauto.
DASH. Standard (MPEG) per lo streaming dinamico su HTTP: formati (MPD, segmenti), non sistema, né protocollo, né codec, né client. Principi: riuso di container e codec, CDN HTTP, QoE alta, selezione in base a rete, dispositivo e preferenze, cambio di server senza interruzioni, intelligenza al client. Server: HTTP + MPD + segmenti. Client: client HTTP, adaptation engine, media engine. Limiti dell'ABR: RTT elevato, visione parziale del client, più client aggressivi. HLS: soluzione proprietaria simile.
Esempio svolto (sistema con s, livelli 0,5/1/2 Mbit/s, , ; Mbit/s per , per , poi). Sempre livello 3: 4 Mbit servono per partire s; poi , s: vuoto dopo 20 s; ogni stallo dura s, poi 10 s di riproduzione: periodo s. Con il livello 2 ogni quinto segmento (): il buffer oscilla tra 2 e s, nessuno stallo; .
Errori tipici: misurare in bit; usare anche in riproduzione (manca il ); dimenticare che dopo lo stallo riparte da ; confondere ed ; dire che il client DASH è standardizzato; dire che la qualità la sceglie il server; massimizzare con il segno sbagliato.
Collegamenti: Protocolli per i servizi multimedialiLe applicazioni multimediali si appoggiano al livello di trasporto, che offre un canale per flussi di bit, end-to-end e tra processi (porte). TCP è affidabile, ordinato, con controllo di flusso e di congestione ma più oneroso (header 20-60 byte, handshake); UDP è senza connessione e best-effort (header 8 byte): per il real-time conviene UDP, lasciando all'applicazione le funzioni davvero necessarie. Famiglia RTP: RTP (numero di sequenza, timestamp, tipo di payload; su UDP; SRTP lo cifra), RTCP (feedback sulla qualità, sincronizzazione), RTSP (telecomando di rete per sessioni di streaming), RTMP (Adobe, su TCP); WebRTC (API JavaScript che integra RTP/SRTP, DTLS, ICE/STUN/TURN) e SIP (segnalazione). Videochiamata: codec + WebRTC o SIP + RTP/RTCP su UDP. Streaming live e on demand: HLS o MPEG-DASH su HTTP/TCP (o HTTP/3 su QUIC) con CDN, perché HTTP attraversa NAT e firewall e sfrutta le cache.Protocolli per i servizi multimediali →, Qualità del servizio (QoS) e qualità dell'esperienza (QoE)La QoS (ITU-T E.800) è l'insieme delle caratteristiche di un servizio di telecomunicazioni che ne determinano la capacità di soddisfare l'utente: si misura con throughput, ritardo, jitter, perdite, disponibilità e affidabilità. La QoE è la qualità percepita dall'utente ("grado di gradimento o fastidio"): dipende da applicazione (A), risorse (R), contesto (C), utente (U) e richiede una QoS adeguata. Si misura con metriche soggettive (test con osservatori: MOS medio da 1 a 5 secondo ACR, DCR, confronto a coppie; si stimano media, deviazione standard, errore standard $SE=\frac s{\sqrt N}$ e intervallo di confidenza $\pm1{,}96,SE$) e oggettive (full/reduced/no reference): MSE, PSNR (anche YCbCr con pesi $\frac34,\frac18,\frac18$), metriche di Bjontegaard (BD-PSNR, BD-rate) per confrontare codec, SSIM (similarità strutturale), VMAF (machine learning, Netflix). Nessuna cattura gli stalli e le variazioni di qualità dello streaming.Qualità del servizio (QoS) e qualità dell'esperienza (QoE) →, Esercizio - Buffer di riproduzione e streaming adattativo (domande ed esercizi del corso).
Come ragiona il client (ciclo). (1) Scarica l'MPD. (2) Stima (dai download precedenti) e legge . (3) Sceglie : livello più alto per cui senza svuotare (strategia a throughput), o in base al livello di (a buffer), o entrambi (ibrida). (4) Richiede con HTTP GET appena finito il segmento precedente. (5) Ripete fino alla fine; se stalla e riprende dopo segmenti.
Effetto dei parametri. grande: avvio lento ma meno stalli; piccolo: avvio rapido ma stalli più probabili e lunghi. grande: stalli più lunghi ma meno frequenti. grande: meno richieste HTTP, adattamento più lento. grande: adattamento più fine ma più spazio sul server.
Numeri tipici dalle slide. Tolleranze: VoD 1-3 s di avvio, live sotto 10 s, real-time sotto 150 ms, cloud gaming sotto 50 ms. Segmenti da 1 a 10 s. MPD d'esempio: , s, (200 kbit/s, 500 kbit/s, 1, 2, 5 Mbit/s). SVC: 5-15% di bit-rate in più per strato.
Domande tipiche.
- Buffer in secondi o in bit? In secondi di video; (stallo) e (riproduzione).
- Chi sceglie la qualità? Il client, segmento per segmento (pull su HTTP): il server tiene solo l'MPD e i segmenti.
- Perché HTTP: stateless, NAT e firewall, cache e CDN; con QUIC niente head-of-line blocking, 0-RTT, migrazione di connessione.
- Esempio rapido: Mbit/s, Mbit/s, s , vuoto a s.