HLS: audio e video su HTTP per Web e device

5 agosto 2014

HTTP Live Streaming è un protocollo di comunicazione concepito da Apple che si appoggia a HTTP per lo streaming di contenuti in rete.

Il principio di funzionamento è abbastanza semplice: l’intero flusso del contenuto da scambiare (un filmato, ad esempio) viene scomposto in parti più piccole, dette “chunks“, scaricabili separatamente alla stregua di un tradizionale download di file via HTTP.

Ciascuno dei chunk che compongono il contenuto, in realtà, viene generato in più versioni, con diverse risoluzioni, bitrate e frequenza di fotogrammi chiave (keyframe), affinché durante la riproduzione l’utente possa selezionare “al volo” un livello differente di qualità del flusso, passando al download del segmento nella versione specifica, o consentendo al player di scegliere il formato più adatto alla velocità della rete in modo del tutto automatico.

Per conoscere i segmenti del flusso disponibili per il download, all’avvio della riproduzione il player di turno scarica una playlist in formato M3U (precisamente “m3u8”, sottoposto come bozza a IEFT, l’organismo che promuove standard Internet in collaborazione con il W3C); tale playlist è detta “Master” e contiene i metadati del flusso, ossia i dettagli delle singole porzioni disponibili del flusso complessivo o, nella maggior parte dei casi, i riferimenti ad altre playlist che raggruppano i segmenti dei video per una determinata versione del flusso.

La playlist Master funge anche da “entry point”: il suo indirizzo (URL) è quello da specificare per riprodurre il contenuto all’interno del browser o di un software compatibile.

Ciascun segmento del filmato vero e proprio è invece un file con estensione “.ts”, e altro non è che un “container” audio/video nel formato MPEG-2 Transport Stream (da non confondere con la “compressione MPEG-2”).

HLS si basa sul protocollo standard HTTP, che è lo stesso utilizzato per la navigazione dei siti Web ed è pertanto ben tollerato dai firewall e dai proxy che regolano il normale traffico sulla porta standard HTTP, senza bisogno di intervenire sugli apparati di rete con impostazioni specifiche, a differenza di quanto avviene di solito con altri protocolli, come il generico UDP e il più specifico RTP che – utilizzando porte dedicate – corrono maggiormente il rischio di essere “bloccati”.

La trasmissione di contenuti multimediali si riduce in soldoni a un banale download di più file via HTTP, quindi è possibile pubblicare liberamente queste risorse su server differenti modificando (anche dinamicamente) la playlist M3U principale in modo da bilanciare a piacimento l’accesso alle CDN per la fruizione in base allo stato della rete, alla banda disponibile, ai contratti instaurati con i gestori dei servizi e così via, in modo flessibile ed estremamente semplice. Tant’è che alcuni provider che offrono supporto specifico per questo protocollo gestiscono già queste problematiche in modo del tutto trasparente.

Per altri servizi di distribuzione (come l’AppStore di Apple) HLS è addirittura obbligatorio per file che superano una certa dimensione, ed è proprio il supporto incorporato nei dispositivi equipaggiati con sistemi Apple (come iOS e AppleTV) che lo sta rendendo uno standard de facto, supportato anche da Google su Android a partire dalla versione 3.0.

La semplicità del protocollo non preclude l’accesso a funzionalità più avanzate: HLS prevede estensioni per funzioni di encrypting e supporto DRM, sfruttando gli elementi tipici del protocollo HTTP (ad esempio, i cookie), ormai famigliari a qualsiasi professionista del Web.

Preparare contenuti per lo streaming

Per sfruttare HLS non è indispensabile disporre di un’architettura dedicata, di un server proprietario, né appoggiarsi necessariamente a un provider specifico: il fatto che le fondamenta del protocollo siano basate sullo standard HTTP permette di utilizzare potenzialmente qualsiasi Web Server per la pubblicazione, sebbene avvalersi di un content provider possa essere una soluzione più opportuna in caso di contenuti voluminosi, di particolari esigenze di banda o di un bacino di utenti vasto da servire.

Il primo passo da compiere è quello di codificare il file originale suddividendolo in più segmenti (chunk), generalmente lunghi dai 5 ai 10 secondi ciascuno, memorizzati in file differenti; ciascun segmento deve essere prodotto in più versioni utilizzando le diverse caratteristiche del flusso che si intende supportare, ed esistono a questo proposito linee guida fornite da Apple in merito alle specifiche tecniche e ai tool suggeriti (prevalentemente Mac) per la produzione dei file.

La pubblicazione del contenuto può avvenire caricando tutti i file via FTP su un comune server HTTP (Apache, IIS o altro), assieme ai file con estensione “.m3u8” che fungono da indici (manifest), uno per ogni livello di qualità disponibile, e che referenziano in ultima istanza i singoli file dei segmenti effettivi che compongono il filmato.

È responsabilità del player tenere sotto controllo la variazione delle condizioni durante la riproduzione in streaming (es. la banda disponibile e la fluidità del download) e “reagire” di conseguenza, facendo riferimento alle playlist scaricate, per selezionare il segmento corretto da riprodurre in quel momento e passando a quello successivo quando termina, in modo del tutto trasparente per lo spettatore.

Il formato HLS è supportato inoltre da molti content provider, come Windows Azure Media Services: in questi casi, è sufficiente inviare o caricare il filmato originale così com’è, utilizzando l’apposito pannello di amministrazione dei servizi (dashboard), e sarà cura del provider convertirlo (preventivamente o al volo) e renderlo accessibile al Web nelle modalità selezionate dall’utente, tra cui è senz’altro disponibile la scelta di HLS.

Filmati HLS nelle pagine Web

La maggior parte dei browser moderni gode del supporto completo all’HTML5 Video, che permette la riproduzione di contenuti multimediali all’interno delle pagine Web attraverso un player integrato nel browser stesso, senza la necessità di installare plugin aggiuntivi di terze parti, come Adobe Flash.

La sintassi per inserire il player nella pagina Web specificando l’URL del filmato è molto semplice:

<video controls width="480" height="270" src="http://cdn.mydomain.com/master.m3u8">

In alternativa, è possibile utilizzare uno dei tanti player di terze parti disponibili. Ad esempio, JWPlayer è un framework che offre un lettore multimediale compatibile con la maggior parte delle piattaforme e in grado di selezionare il “mezzo” più appropriato per la visualizzazione dell’interfaccia utente nella pagina, sfruttando HTML5 Video laddove presente o sostituendolo con un applet Flash, garantendo comunque un aspetto uniforme e lineare su tutti i browser.

Nonostante questa vasta gamma di opportunità nella scelta dei player, solo una piccola parte dei browser è in grado di mostrare nativamente flussi nel formato HLS: il protocollo è attualmente supportato da tutti i dispositivi Apple, equipaggiati con iOS, sui device Android recenti e nel browser Safari in tutte le sue “incarnazioni”. Sul desktop, oltre a Safari, è possibile vedere filmati HLS in streaming con VLC Media Player. Per verificare le capacità del browser in uso nella riproduzione di contenuti HLS, è possibile sfruttare questa pagina di test.

Per tutti gli altri browser che non supportano nativamente il protocollo, è possibile utilizzare lettori basati su Adobe Flash (come flowplayer o il già citato JWPlayer), poiché integrano la logica in grado di gestire contenuti distribuiti in quel formato.

Conversione in tempo reale di flussi HLS

In alternativa all’uso di plugin esterni, nei browser che sono restii a riprodurre contenuti HLS è possibile avvalersi di altre soluzioni tecnicamente molto interessanti.

La libreria mpegts, ad esempio, avvia un thread separato del browser in cui effettua la conversione in tempo reale di flussi HLS nel formato MPEG4, che è “digeribile” dalla totalità dei browser in circolazione, e riproduce il flusso di output nel thread principale, all’interno di un Canvas HTML5.

Il codice sorgente in linguaggio JavaScript può essere scaricato dal repository dedicato su GitHub.

Per testare l’efficacia della libreria mpegts, è sufficiente navigare alla pagina demo usando un browser HTML5 non compatibile con HLS, ad esempio Firefox, e notare come il video venga mostrato correttamente, al contrario di quanto accadeva nella pagina dei test menzionata in precedenza, senza ausilio di alcun plugin di terze parti.

L’attività di conversione vera e proprio è un lavoro intenso per il browser e il passaggio da un segmento all’altro non è sempre ottimale; tuttavia, il progetto è ancora in evoluzione ed è molto promettente.

Conclusioni

HTTP Live Streaming ha tutte le carte in regola per costituire un mezzo estremamente valido per la pubblicazione e la fruizione di contenuti multimediali in rete, diventando addirittura imprescindibile quando si tratta di supportare nello specifico device come l’iPad di Apple, società che lo ha ideato e ne spinge fortemente l’adozione come standard.

HLS è reso ancora più appetibile dal suo fondarsi sul protocollo HTTP, il componente più robusto e collaudato dell’architettura Internet: non è necessario aprire porte sul firewall o configurare nulla di particolare affinché i pacchetti del flusso giungano al client per essere mostrati all’utente, pur mantenendo tutti i vantaggi tipici dello streaming in diretta.

Se vuoi aggiornamenti su HLS: audio e video su HTTP per Web e device inserisci la tua e-mail nel box qui sotto:
 
X
Se vuoi aggiornamenti su HLS: audio e video su HTTP per Web e device

inserisci la tua e-mail nel box qui sotto:

Ho letto e acconsento l'informativa sulla privacy

Acconsento al trattamento di cui al punto 3 dell'informativa sulla privacy