Introduzione
L’obiettivo di questo documento è individuare un metodo standard per inserire un filmato in una pagina web attraverso il tag <video> di HTML5. Per completezza di informazioni verranno analizzati diversi player gratuiti.
Attenzione: il video utilizzato per l’esempio pesa 20 Mega. Anche in base alla vostra connessione sarà necessario del tempo prima che parta.
Esempio finale [1]
Attraverso HTML5 il W3C ha finalmente introdotto le specifiche necessarie per includere i file multimediali; i browser che già supportano questo linguaggio hanno un player incorporato con tutti i comandi necessari: play, stop, volume etc etc. Tra poco tempo, quindi, con il solo tag <video> si potrà dire addio a plugin, lettori in Flash e tecnologie proprietarie.
Immagine dei controlli nativi sui più diffusi browser in circolazione:
In aggiunta a questo importante risultato c’è da considerare l’esistenza di API in Javascript utili ad estendere enormemente le caratteristiche del player basilare. Si pensi, ad esempio, alla personalizzazione grafica o all’aggiunta di funzionalità come playlist etc etc.
Questo scenario è destinato a realizzarsi completamente tra qualche anno, quando tutti i maggiori browser in circolazione supporteranno appieno HTML5. In questo momento, invece, siamo in una fase transitoria in cui software come Explorer 6,7 e 8 o Firefox 3.0 sono ancora in grado di generare grandi numeri. Ricordiamo, inoltre, che il Gruppo di Lavoro del W3C non ha ancora ufficializzato come standard il nuovo HTML5 (che è ancora in versione “draft” e quindi passibile di cambiamenti).
In alcuni scenari – pensiamo a siti della Pubblica Amministrazione – non è ancora possibile effettuare una migrazione definitiva al nuovo linguaggio, pena l’esclusione di molti utenti da servizi di utilità collettiva. In questo caso l’accessibilità dei contenuti, utilizzando tecnologie obsolete o proprietarie ma de facto divenute uno standard (Flash), prevale senza dubbio sulla sperimentazione.
Un sito come YouTube.com, che già da tempo ha iniziato una conversione dei propri archivi in HTML5, rappresenta un caso isolato che richiede un grosso dispendio di tempo e risorse economiche. Inoltre, in questa fase di transizione, ogni video convertito continua ad avere il suo corrispettivo in versione Flash.
Le caratteristiche di un player HTML5, secondo chi scrive, dovrebbero essere le seguenti:
- grafica personalizzabile attraverso Javascript e CSS
- interfaccia leggera da caricare
- facile installazione
- fallback in Flash per i browser più datati
- gestione dei comandi da tastiera
Attualmente esistono diversi player HTML5 che, utilizzando singole funzioni Javascript o avvalendosi di framework come JQuery e MooTools, permettono l’implementazione di lettori con diverse caratteristiche: fallback in Flash, skin personalizzabili, gestione dei sottotitoli etc etc.
Browser che supportano HTML5
Una tabella riassuntiva aiuterà a focalizzare meglio la situazione attuale:
| Fx 3.0 | Fx 3.5 | IE6 | IE7 | IE8 | IE9 | Safari 3 | Safari 4 | Chrome 3+ | Opera 10.5 |
|---|---|---|---|---|---|---|---|---|---|
| NO | OK | NO | NO | NO | OK | OK | OK | OK | OK |
Il tag Video
Prima di passare all’analisi di 10 player HTML5 – diversi tra loro per caratteristiche e funzionalità – è bene fare conoscenza, a grandi linee, con il tag <video>.
Esempio basilare di tag video:
<video src="test.ogg" controls="controls">
il tuo browser non supporta HTML5
</video>
Queste 3 righe di codice permettono la visualizzazione di un video in formato OGG su browser come Firefox 3.5 o sup., Chrome 3.x o sup., Opera 10.5 o sup. su piattaforme sia Windows che Linux. Ma il navigatore di casa Microsoft come si comporta? Dipende… dalla versione ovviamente.
Explorer 6, 7 e 8 visualizza il messaggio che avverte l’utente di aggiornare il proprio software. Explorer 9 mostra il video se, e solo se, è installato il plugin QuickTime sul client. Il perchè di questa dipendenza ci viene data dall’estensione del file proposto: OGG (Theora nella versione video e Vorbis nella versione audio). OGG, infatti, è un formato opensource supportato nativamente da alcuni browser ma che IE visualizza solo con l’ausilio di QuickTime.
Per avere la piena compatibilità con Microsoft ed Apple dovremmo convertire il video nel formato MP4 e riscrivere il codice in questa maniera:
<video src="test.mp4" controls="controls">
il tuo browser non supporta HTML5
</video>
A questo punto, però, si verificherebbe la situazione opposta: Firefox ed Opera non riuscerebbero a leggere il file (Chrome sì poichè è l’unico browser a supportare entrambi i formati).
La situazione è facilmente risolvibile “moltiplicando” a cascata il parametro “src” del tag video. In questo maniera ad ogni browser verrebbe proposto il formato più adatto:
<video controls="controls">
<source src="video/test.mp4" type="video/mp4" />
<source src="video/test.webm" type="video/webm" />
<source src="video/test.ogg" type="video/ogg" />
il tuo browser non supporta HTML5
</video>
Questo semplice snippet di codice assicura la compatibilità sulla maggior parte dei dispositivi che supportano HTML5, compresi i device mobili come gli SmartPhone (iPhone su tutti).
La prima incogruenza che salta all’occhio è il numero di formati diversi necessari per mostrare il video su tutte le piattaforme più diffuse.
Da una parte, con l’introduzione del tag <video>, si è fatto molto per creare uno standard che non includesse più tecnologie proprietarie come Flash mentre dall’altra, a causa di guerre più o meno ideologiche, si è ancora lontani dall’adozione di un formato video unico. Eppure qualcosa inizia a muoversi.
I tipi di codec
Un approfondimento sui vari codec ci aiuterà a capire meglio lo stato dell’arte.
Attualmente sono 5 i formati video più diffusi con cui è possibile presentare un video sul web:
-
AVI
E’ un vecchio formato inventato da Microsoft ai tempi in cui trovare contenuti video sul web era molto raro. Ad oggi non viene più ufficialmente supportato dai player più diffusi sebbene la maggior parte di essi sia in grado di leggere filmati .avi.
-
MPEG4
E’ un formato video basato sul vecchio QuickTime di Apple e, per questo, ampiamente supportato dai dispositivi della Mela oltre che da Explorer su Windows.
-
FLV
E’ il formato predefinito utilizzato da Flash ed è quindi fondamentale avere il relativo plugin installato sul client. A partire dalla versione 9 il Flash Player supporta, oltre a questo formato, anche i video .mp4. Sebbene gli equilibri inizino a cambiare con l’avvento di HTML 5, il formato .flv è ancora il più diffuso per i filmati sul web.
-
OGG (Theora e Vorbis)
E’ un formato opensource supportato nativamente da browser come Firefox, Chrome e Opera. Nella versione video è conosciuto come Theora mentre nella versione audio come Vorbis. È supportato da tutte le maggiori distribuzioni Linux mentre su Mac e Windows può essere letto installando il plugin per QuickTime. E’ destinato ad essere soppiantato dal formato WebM.
-
WEBM
E’ il nuovo formato video opensource sponsorizzato da Google che si prefigge l’arduo obiettivo di diventare uno standard capace di mettere d’accordo tutti. Chrome e Opera già supportano nativamente questo formato; Firefox lo farà a partire dalla versione 4; Adobe ha annunciato che, in un prossimo futuro, il Flash Player sarà in grado di leggere i filmati WebM.
Apple e Microsoft, invece, non hanno ancora chiarito del tutto le loro posizioni: la casa di Cupertino sembra non voler appoggiare i video WebM perchè in netto contrasto com Mpeg4 (come già accaduto per Theora e Vorbis) mentre l’azienda di Bill Gates sembra fornirà un supporto a partire da IE9 ma senza aver specificato se sarà nativo o avrà bisogno di un plugin.
A questo punto è facile intuire che, anche dal punto di vista dei formati video, si è lontanti da uno standard unico. La piena compatibilità con tutte le piattaforme si raggiunge proponendo un singolo video in 3 formati diversi: mp4, ogg e webm. Per la verità, allo stato attuale, basterebbero i primi due dato che webM si sta ancora ritagliando un proprio spazio.
L’ordine dei formati all’interno del tag <video> non risulta casuale e serve per assicurare la migliore compatibilità con tutti i dispositivi:
<source src="video/test.mp4" type="video/mp4" />
<source src="video/test.webm" type="video/webm" />
<source src="video/test.ogg" type="video/ogg" />
Il primo formato è necessariamente mp4 per il funzionamento su iPad. Apple infatti richiede che il formato mp4 sia il primo della lista. Leggeranno questo file dispositivi come Explorer 9, Safari, Chrome, iPhone, il già citato iPad e device su cui gira Android.
Subito dopo c’è il nuovo webM che verrà letto dall’ultima versione di Opera (Chrome sarebbe in grado ma si ferma al primo video mp4).
Infine c’è il formato ogg valido per Firefox (anche qui Chrome sarebbe in grado ma si ferma al primo video mp4).
Codec supportati dai vari browser
Una tabella riassuntiva sui codec supportati dai vari browser fornirà una panoramica completa:
| Fx 3.0 | Fx 3.5 | Fx 4.0 | Opera 10.5 | Opera 10.6 | Chrome 6.0 | Safari | IE 6 | IE 7 | IE 8 | IE 9 | iPhone | Android | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| MP4 | NO | NO | NO | NO | NO | OK**** | OK | OK | OK | OK | OK | OK | OK |
| OGG | OK | OK | OK | OK | OK | OK | NO | NO | NO | NO | NO | NO | NO |
| WebM | NO | NO | OK | NO | OK | OK | NO* | NO | NO | NO | OK** | NO | OK*** |
- * Safari può leggere qualsiasi video compatibile con i plugin di QuickTime. Installando il componente adatto, quindi, è possibile vedere qualsiasi formato
- ** Microsoft non ha ancora specificato se il supporto a WebM sarà nativo o tramite un componente da installare separatamente
- *** Google ha annunciato che le versioni future di Andraoid supporteranno il formato WebM
- **** Google ha annunciato che, a partire da Marzo 2011, le versioni di Chrome non supporteranno più il codec H.264
Panoramica su 10 lettori HTML5
Questo documento prende in esame 10 diversi player HTML5. Alla fine della carrellata sarà semplice scegliere la soluzione più adatta alle proprie esigenze.
Il voto finale, oltre che soggettivo ovviamente, include i seguenti parametri di giudizio:
- facilità di installazione
- facilità di personalizzazione
- compatibilità generale
- usabilità dell’interfaccia
I dieci video presi in esame:
-
Video for Everybody
Player che fa uso solamente del codice standard di HTML5 con un tag object al suo interno per il fallback in Flash. I comandi mostrati sono quelli nativi dei diversi browser.
Voto finale: 8,5
DEMO Video for Everybody [3] -
VideoJS
Utilizza un file Javascript ed un CSS per l’interfaccia grafica. Non richiede framework esterni. Semplice da installare e personalizzare. Fallback in Flash.
Voto finale: 9
DEMO VideoJS [4] -
Sublime Video
Per adesso è disponibile solamente come javascript esterno da richiamare dal sito del produttore. Semplice da installare ma impossibile da personalizzare graficamente.
Voto finale: 7
DEMO Sublime Video [5] -
Projekktor
Molte le opzioni disponibili, soprattutto per l’integrazione con strumenti di advertising. Disponibili le API in Javascript per integrare funzionalità aggiuntive. Utilizza Jaris Player come player Flash ma ci sono difficoltà nel cambiarlo.
Voto finale: 6,5
DEMO Projekktor [6] -
LeanBack Player
Uno dei pochi Player che supporta sia i comandi da tastiera che i sottotitoli. Ottimo per l’accessibilità ma c’è da sottolineare che il codice utilizzato per caricare i sottotitoli non è standard e non viene validato dal W3C. L’interfaccia è un po’ lenta nel caricamento mentre il flash player da utilizzare può essere scelto a piacere.
Voto finale: 7,5
DEMO LeanBack Player [7] -
Kaltura HTML5
Player di difficile implementazione. Per questo motivo è raccomandato includere il file .js esterno offerto dal sito del produttore. In base alle caratteristiche del proprio client offre un fallback in Flash o Java. Diverse le skin disponibili sul sito. Le opzioni a disposizione sono molte anche se l’interfaccia, per forza di cose, è un po’ lenta nel caricamento.
Voto finale: 7
DEMO Kaltura HTML5 [8] -
HTML5 Media
Nessun framework richiesto se non un file javascript. Semplice da implementare. Utilizza FlowPlayer come player Flash per il fallback ma incredibilmente viene utilizzato js per il suo funzionamento. E’ evidente quindi che i browser che non supportano HTML5 e con Javascript disabilitato non vedranno nulla.
Voto finale: 5,5
DEMO HTML5 Media [9] -
Flare Video
Richiede JQuery per funzionare e l’implementazione non risulta così immediata. Per la visualizzazione del player Flash (proprietario) del fallback viene utilizzato javascript. E’ evidente quindi che i browser che non supportano HTML5 e con Javascript disabilitato non vedranno nulla. Riscontrati problemi con Explorer 6,7,8.
Voto finale: 5
DEMO Flare Video [10] -
SRT Video
Richiede JQuery per funzionare e l’implementazione è semplice. Il player utilizzato nel fallback è Cortado, in Java ma viene utilizzato Javascript per visualizzarlo. E’ evidente quindi che i browser che non supportano HTML5 e con Javascript disabilitato non vedranno nulla. La particolarità di questo player è il plugin che permette di inserire sottotitoli ai video.
Voto finale: 7
DEMO SRT Video [11]
Note sull’accessibilità
Prima di arrivare ad una scelta è necessaria qualche nota sull’accessibilità.
HTML5 è giovane e, come precedentemente accennato, è ancora in versione draft. Ad oggi non è ancora disponibile un attributo standard che permetta di inserire didascalie al video anche se un obiettivo dichiarato è ufficializzare un parametro “track” che permetta di associare testi in più lingue ad un filmato (traguardo già raggiungibile con un player in Flash).
Allo stato attuale esistono diversi metodi, più o meno consoni, per implementare ugualmente dei sottotitoli. Un esempio è LeanBack Player [7] che, con l’ausilio di Javascript, visualizza una trascrizione completa del filmato.
Il difetto più grande di questa soluzione è l’utilizzo del parametro “itext”, di fatto inesistente e quindi non standard (impossibile da utilizzare in ambito Pubblica Amministrazione per esempio).
Un’altra soluzione, questa volta pienamente W3C compliant, viene presentata da SRT Video [11]. Si appoggia a javascript con JQuery come framework ma la compilazione del testo trascritto richiede un gran lavoro.
La soluzione migliore (per chi scrive)
La soluzione migliore, per chi scrive, è quella di affidarsi a VideoJS: semplice, personalizzabile e funzionale. L’unico neo è dato dal fatto che non supporta i comandi da tastiera.
Tralasciando il javascript da richiamare nella pagina, il codice base di VideoJS è il seguente:
<video id="example_video_1" class="video-js" width="640" height="264" title="Titolo di prova" poster="img/screenshot.png" controls="controls" preload="auto">
<!-- MP4 must be first for iPad! -->
<source src="video/test.mp4" type="video/mp4" />
<source src="video/test.webm" type="video/webm" />
<source src="video/test.ogg" type="video/ogg" />
<object id="myvideo" class="vjs-flash-fallback" width="620" height="280" type="application/x-shockwave-flash" data="video/player.swf">
<param name="movie" value="video/player.swf" />
<param name="flashvars" value="image=./img/screenshot.png&file=test.mp4" />
<img src="img/screenshot.png" width="640" height="360" alt="No video capabilities" title="No video capabilities" />
</object>
</video>
<p class="vjs-no-video">
<strong>Download Video:</strong>
<a href="video/test.mp4">MP4</a>,
<a href="video/test.webm">WebM</a>,
<a href="video/test.ogg">Ogg</a><br>
</p>
L’analisi del codice è tutto sommato semplice:
- Il tag video è il primo ad essere proposto per tutti quei browser che supportano HTML5
- I browser più obsoleti, invece, leggono il tag object all’interno del tag video
- In caso di Javascript disabilitato l’interfaccia dei comandi lascia spazio ai link per scaricare i filmati
Un codice di questo tipo è funzionale alla maggior parte dei siti ma se ci trovassimo in ambito Pubblica Amministrazione non basterebbe perchè il tag object unico, come visto nel precedente articolo “Inserire un video con codice validato senza Javascript [12]“, non è sufficiente per raggiungere la piena compatibilità con gli Explorer più vecchi.
La soluzione finale richiede sicuramente del markup aggiuntivo ma permette di raggiungere un risultato compatibile con la maggior parte dei devices attualmente in circolazione:
<video id="example_video_1" class="video-js" width="640" height="264" title="Titolo di prova" poster="img/screenshot.png" controls="controls" preload="auto">
<!-- MP4 must be first for iPad! -->
<source src="video/test.mp4" type="video/mp4" />
<source src="video/test.webm" type="video/webm" />
<source src="video/test.ogg" type="video/ogg" />
<object id="myvideo" class="vjs-flash-fallback" width="620" height="280" type="application/x-shockwave-flash" data="video/player.swf">
<param name="movie" value="video/player.swf" />
<param name="flashvars" value="image=./img/screenshot.png&file=test.mp4" />
<img src="img/screenshot.png" width="640" height="360" alt="No video capabilities" title="No video capabilities" />
<br /><a href="#">Scarica il plugin Flash</a> oppure scarica i video nel formato che preferisci:
<a href="video/test.mp4">MP4</a>,
<a href="video/test.webm">WebM</a>,
<a href="video/test.ogg">Ogg</a>
</object>
</video>
Come si può notare si è preferito spostare il download dei file all’interno del tag object. In questa maniera si potranno scaricare i video solamente se queste due condizioni sono vere:
- l’utente ha un browser che non supporta HTML5
- l’utente non ha il plugin Flash installato
Il vantaggio principale di questo codice è che non dipende in nessun caso da javascript. Infatti se l’utente ha un browser con supporto HTML5 ma con javascript disabilitato, potrà comunque usufruire del player con i comandi nativi. Se invece è presente un software di vecchia generazione entrerà in gioco il player Flash che poco ha a che fare con la presenza o meno di Javascript (sempre che non si usino librerie come SWFObject).
Il difetto maggiore è che, con browser datati come IE 6 o 7, in caso di mancanza del plugin Flash non verrà proposto il download automatico del componente.
Questo perchè, per attivare l’ActiveX che si occupa di questa procedura, sarebbe necessario il parametro “classid” all’interno del tag object. Tale parametro, però è deprecato in HTML5 e quindi non più utilizzabile.
Note sui codec
Quando si aggiunge un video con il parametro “src” è obbligatorio specificare il type del video con uno dei seguenti formati:
- type=”video/mp4″
- type=”video/webm”
- type=”video/ogg”
Oltre a ciò, anche se nella maggior parte dei casi non sarà necessario, è possibile aggiungere il codec specifico da utilizzare:
- type=”video/mp4; codecs=’avc1.42E01E, mp4a.40.2′”
- type=”video/webm; codecs=’vorbis,vp8′”
- type=”video/ogg; codecs=’theora, vorbis'”
Link utili
- HTML5 video sul W3C [13] (inglese)
- Tutti i video HTML5 in una pagina [14] (inglese)
- Panoramica sul video in HTML5 [15] (inglese)
