Prima di entrare nel merito dello streaming video, vediamo le caratteristiche dei video. I video sono delle sequenze di immagini visualizzate, in genere, a tasso costante come 24 o 30 immagini al secondo. Un'immagine non compressa e digitalmente codificata consiste in un array di pixel ognuno dei quali è codificato con un certo numero che identifica il colore che vuole rappresentare. I video possono essere compressi in modo tale da raggiungere un compromesso tra qualità e bit rate. Più è altro il bit rate, migliore è la qualità del video. Il bit rate è il tasso con la quale i bit vengono trasmessi in rete.
Esempio: un video con un bit rate di 2Mbps con una durata di 67 minuti consuma un gigabyte di spazio di archiviazione e di traffico. La misura più importante per lo streaming video è il throughput medio, il cui valore deve essere almeno pari al bit rate. La compressione può essere usata per creare diverse versione dello stesso video, con bit rate più o meno alto. Possono esistere video a 300kbps, a 1Mbps e a 3 Mbps. L'utente può scegliere quello più adatto per la sua larghezza di banda.
Nello streaming HTTP il file video è memorizzato su un server HTTP e viene scaricato come un qualsiasi altro file quando viene richiesto con una GET da un client. I frame del video vengono scaricati dal browser in un buffer (dell'applicazione con cui è effettuata la richiesta, il browser in questo caso). Quando la memorizzazione nel buffer ha raggiunto una certa soglia, l'applicazione decodifica i frame nel buffer e li mostra all'utente. Il limite di HTTP è che il file video ricevuto dagli utente ha un bit rate fisso. Non tutti i client hanno la stessa larghezza di banda. Quindi client con larghezza di banda bassa visualizzeranno numerosi blocchi se il video è compresso con un alto bit rate. Per superare questi limiti nasce DASH (dynamic adaptive streaming over http). Il punto è che ci sono diverse versioni dello stesso file video a bit rate diverso. Il browser salva nel buffer un blocco di frame prelevandoli dal video col bit rate adatto alla larghezza di banda dell'utente in quel preciso momento. La qualità del video si adatta alla larghezza di banda disponibile. I video sono salvati nel server con URL diverso, nel server è disponibile un file (manifest) in cui sono disponibili i link a tutte le versioni di un file video. Il client all'inizio richiede questo file per venire a conoscenza delle locazioni dei video, poi li richiede (con delle GET) come spiegato sopra.
Come fa una società come YouTube che fruisce costantemente milioni di video ad utenti di tutto il mondo? Una soluzione potrebbe essere di salvare tutti i file video in un unico data center, ma questa soluzione presenta tre problemi:
Esempio di funzionamento di una CDN: