HTML5 Video De stand van zaken
Versie 1.1 8 februari 2011 Herman van Dompseler / Bas Zoetekouw SURFnet/Kennisnet Innovatieprogramma
Het SURFnet/ Kennisnet Innovatieprogramma wordt financieel mogelijk gemaakt door het Ministerie van Onderwijs, Cultuur en Wetenschap.
Voor deze publicatie geldt de Creative Commons Licentie “Attribution 3.0 Unported”. Meer informatie over deze licentie is te vinden op http://creativecommons.org/licenses/by/3.0/
Inhoudsopgave SAMENVATTING ............................................................................................................ 4 1 INLEIDING ............................................................................................................... 5 1.1 Demonstratiewebsite ................................................................................................... 6 1.2 Meer informatie ............................................................................................................ 6
2 ACHTERGROND ....................................................................................................... 7 2.1 Huidige stand van zaken van video in webbrowsers ................................................... 7 2.2 Codecs en formaten voor embedded video ................................................................. 7 2.3 New kid on the block (Waarom HTML5/WebM/VP8?) ............................................... 10 2.4 Features van HTML5 en de
-tag ................................................................... 11 2.5 Bronnen ..................................................................................................................... 12
3 ONDERSTEUNING VAN HTML5 VIDEO .................................................................... 13 3.1 -tag in webbrowsers ...................................................................................... 13 3.2 Webbrowser en video matrix ..................................................................................... 15 3.3 Mobiele toegang tot video .......................................................................................... 16 3.4 Mobiel en video matrix ............................................................................................... 17 3.5 Wat als HTML5 niet ondersteund wordt? ................................................................... 18 3.6 Bronnen ..................................................................................................................... 19
4 GEAVANCEERDE MOGELIJKHEDEN HTML5 VIDEO .................................................. 20 4.1 Ondertitel en annotaties ............................................................................................. 20 4.2 Websockets ............................................................................................................... 21 4.3 Digital Rights Management ........................................................................................ 22 4.4 HTML5 Canvas .......................................................................................................... 23 4.5 Fullscreen .................................................................................................................. 24 4.6 Opnames en randapparatuur ..................................................................................... 24 4.7 Overzicht van de ondersteuning ................................................................................ 25 4.8 Bronnen ..................................................................................................................... 25
5 ONDERSTEUNING AAN DE SERVERKANT ................................................................. 26 5.1 Distributie van video op het web ................................................................................ 26 5.2 Distributie van on–demand video ............................................................................... 26 5.3 Backend–ondersteuning voor HTML5–compatible formaten ..................................... 30 5.4 Overigen .................................................................................................................... 33 5.5 Bronnen ..................................................................................................................... 35
6 CONCLUSIE........................................................................................................... 36 6.1 Uitkomsten ................................................................................................................. 37 6.2 Aanbevelingen ........................................................................................................... 38
3
Samenvatting De nieuwe standaard voor het maken van webpagina’s is HTML5. Deze nieuwe versie van HTML biedt voor het eerst de mogelijkheid om video direct in de browser af te spelen zonder gebruik te maken van plug–ins zoals de Flashplayer. In deze technologieverkenning worden de mogelijkheden en onmogelijkheden van HTML5 op videogebied onderzocht en worden aanbevelingen gedaan aan de SURFnet/Kennisnet-gemeenschap om HTML5 voor webvideo te ondersteunen. Het direct opnemen van de video in de webpagina, zoals dat al lange tijd voor plaatjes mogelijk is, heeft een aantal voordelen, waarvan de voornaamste is dat het maken en gebruiken van video’s op het web eenvoudiger wordt. Om gebruik te maken van deze nieuwe techniek, moet de video beschikbaar zijn in een formaat dat door de browser van de gebruiker wordt ondersteund. Helaas is er momenteel niet één formaat dat door alle browsers wordt ondersteund. Om HTML5 video op alle platforms te ondersteunen is het daarom nodig om elke video zowel in H.264–formaat als in WebM–formaat aan te bieden. Daarbij moeten we wel opmerken dat dit pas geldt voor de volgende generatie browsers (met name Internet Explorer 9 en Firefox 4), die naar verwachting in 2011 beschikbaar zullen komen. Hoewel het afspelen van video’s in een HTML5–pagina al goed werkt in nieuwe browsers, zijn er nog een aantal geavanceerde mogelijkheden die niet, of slechts in enkele browsers, worden ondersteund. Het gaat dan om zaken als full–screen afspelen van video en de technische afscherming van auteursrechtelijk beschermde video’s. De ontwikkelingen hier gaan echter snel en het ligt in de lijn der verwachting dat deze zaken op termijn allemaal geïmplementeerd gaan worden in de meeste browsers. Aan de serverkant zijn voor de ondersteuning van HTML-video weinig veranderingen nodig: in het algemeen kunnen videobestanden op dezelfde manier worden aangeboden als bij andere technieken het geval is. Alleen in het geval van streaming van live video zijn aanpassingen nodig. HTML5 video heeft veel aandacht in de ontwikkelgemeenschap en lijkt op termijn de nieuwe standaard te gaan worden voor video op het web, al moeten er nog wel enige hordes genomen worden, met name op het gebied van de ondersteuning in de browsers. De belangrijkste aanbeveling van dit rapport is om op dit moment al met HTML5 rekening te houden in de ontwikkeling van videotoepassingen. Het belangrijkste punt daarbij is dat video’s in het H.264–formaat en het WebM–formaat beschikbaar moeten worden gemaakt. Tevens is het nu al mogelijk om HTML5-video te ondersteunen voor video door browsers die geen HTML5 ondersteunen te laten terugvallen op de Flashplayer, die ook het H.264–formaat kan afspelen.
4
1
Inleiding
Video en video–gerelateerde toepassingen spelen een steeds grotere rol in het onderwijs. In de afgelopen jaren zijn er dan ook veel infrastructurele faciliteiten beschikbaar gekomen die dit ondersteunen, zoals de videoportals van Kennisnet en SURFnet (waaronder Teleblik en SURFmedia). Daarnaast zijn er ook veel losse initiatieven binnen onderwijsinstellingen, of worden bestaande clouddiensten zoals YouTube gebruikt. Al deze platformen hebben gemeen dat ze het world wide web gebruiken voor de presentatie van video aan de gebruiker. Van oudsher is distributie van video op het web echter problematisch. Er bestaan veel verschillende, onderling onuitwisselbare videoformaten: niet elk formaat kan op elk platform en in elke browser worden afgespeeld. Bovendien zijn voor het afspelen van de video browser–plug–ins (bijvoorbeeld Adobe Flashplayer) nodig, die in de praktijk allerlei beperkingen en beveiligingsproblemen met zich meebrengen. Op dit moment zijn er op dit gebied echter nieuwe ontwikkelingen gaande. De W3C, die waakt over de standaarden van het www, werkt aan een nieuwe versie van HTML, versie 5. Hierin wordt onder andere een nieuwe standaard gedefinieerd om video in webpagina’s op te nemen en direct in de browser, zonder gebruik te maken van plug–ins, af te spelen. Bovendien heeft Google in het begin van 2010 een nieuw videoformaat, WebM, vrijgegeven, waarvan de specificatie helemaal open is (in de zin dat niet alleen de specificatie public beschikbaar is, zoals bij H.264, maar ook het gebruik helemaal vrij en gratis is). Hierdoor is het nu mogelijk om hoge kwaliteit video via het web te verspreiden zonder licenties te hoeven aanschaffen voor de technologie. Google beoogt met dit WebM-formaat het gebruik van video op het web een nieuwe impuls te geven. Deze ontwikkelingen hebben potentieel belangrijke consequenties voor de videoplatformen zoals die op dit moment in het Nederlandse onderwijs- en onderzoeksinstellingen in gebruik zijn. In opdracht van het SURFnet/Kennisnet–innovatieprogramma heeft SURFnet daarom een technologieverkenning uitgevoerd naar de nieuwe mogelijkheden voor het gebruik van video op het web die HTML5 en WebM bieden. Dit rapport is het eindverslag van deze technologieverkenning. Het doel van de technologieverkenning was om te bepalen – – – –
of het gebruik van op HTML5 gebaseerde video nuttig is voor de videodiensten van SURFnet, van Kennisnet en van de Nederlandse onderwijsinstellingen; of SURFnet, Kennisnet, en hun directe doelgroepen het open WebM videoformaat zouden moeten ondersteunen; of WebM en HTML5 video op termijn propriëtaire videocodecs en –oplossingen kunnen vervangen; of het op dit moment al zinnig is om te investeren in HTML5–compatibiliteit van videodiensten, of dat het daarvoor nog te vroeg is.
Dit rapport is voornamelijk gericht op lezers die al enigszins kennis hebben van webpagina’s en video. Er wordt dus niet uitgebreid ingegaan op de usecases van video op het web, of de technische basis van webpagina’s, digitale video, en webstreaming. In Hoofdstuk 2 wordt echter wel kort de achtergrond van de besproken technologie weergegeven, en een overzicht van de huidige stand van zaken van video op het web. In Hoofdstuk 3 wordt dan dieper ingegaan op de ondersteuning van HTML5 video door de belangrijkste webbrowsers en op de verschillende videoformaten die daarbij gebruikt kunnen worden. In Hoofdstuk 4 komen diverse geavanceerde mogelijkheden van video op het web aan de orde, en wordt besproken hoe deze worden ondersteund in HTML5. Hoofdstuk 5 richt zich op de server, en bespreekt wat er aan de webserver moet worden veranderd om HTML5
5
video te ondersteunen, en welke softwarepakketten voor HTML5 geschikte videoformaten kunnen leveren. Hoofdstuk 6 tenslotte, bevat de conclusie van de technologieverkenning en besluit met een aantal aanbevelingen hoe om te gaan met video op het web in het kader van HTML5.
1.1
Demonstratiewebsite
Samen met dit rapport is een eenvoudige demonstratiewebsite ontwikkeld. Op deze website is een filmpje een aantal keer beschikbaar gemaakt in verschillende formaten, zodat gebruikers zelf kunnen uitproberen hoe HTML5 video in de praktijk werkt, en welke videoformaten wel en niet door de gebruikte browser worden ondersteund. De website is te vinden op http://demo.mediamosa.surfnet.nl/html5/.
1.2
Meer informatie
F. Alons, Educatieve videotoepassingen in het voortgezet onderwijs, 2008, http://web.kennisnet2.nl/portal/onderzoek/onderzoeken/overig/educatievevideotoepassingen N. Verbeij, De magie van video en leren, 2009, http://www.vka.nl/artikelen/publicaties/de_magie_van_video_en_leren W3C HTML Working Group, http://www.w3.org/html/wg/ The WebM project, http://www.webmproject.org/
6
2
Achtergrond
Dit hoofdstuk geeft inzicht in het gebruik van video in webbrowsers. Hier wordt beschreven hoe video in webbrowsers kan worden afgespeeld. Ook wordt een overzicht gegeven van de verschillende videoformaten die in browsers gebruikt kunnen worden. Het afspelen van video in een webbrowser is de opmaat voor de beschrijving van de -tag in HTML5.
2.1
Huidige stand van zaken van video in webbrowsers
Om een video af te spelen in een HTML-pagina moet de video in een HTML-pagina ingesloten worden, dit heet ‘embedden’. De pre-HTML5-manier om video in een HTMLpagina in te sluiten is door een -tag op te nemen in een HTML-pagina. Bij video’s op YouTube een video (bijvoorbeeld http://www.youtube.com/watch?v=qiD93UxvHRw over de SURFnet-lichtpaden) staat onder de video een knopje ‘insluiten’. Dit knopje opent een schermpje met daarin de code die nodig is om deze video in een HTML-pagina in te sluiten. De code behorende bij dit filmpje is: <param name="movie" value="http://www.youtube.com/v/qiD93UxvHRw?fs=1&hl=nl_NL"> <param name="allowFullScreen" value="true"> <param name="allowscriptaccess" value="always"> <embed src="http://www.youtube.com/v/qiD93UxvHRw?fs=1&hl=nl_NL" type="application/x– shockwave–Flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385">
In deze code staat allerlei informatie die de webbrowser gebruikt om het object in de HTMLpagina op te nemen. Zaken als de grootte van het object (640x385 pixels) zijn daar bijvoorbeeld vastgelegd. YouTube definieert een kaal object, waarin de URL http://www.youtube.com/v/qiD93UxvHRw?fs=1&hl=nl_NL wordt geopend via het ‘http’ protocol. Deze URL levert naast de video ook een Adobe Flash videospeler, waarin de video wordt afgespeeld. De <embed> code, die wordt gebruikt door browsers die de code niet herkennen, bevat een herhaling van de informatie; hier wordt wel expliciet vermeld dat het om een Flash applicatie gaat.
2.2
Codecs en formaten voor embedded video
Flash is een van de formaten die in een ingesloten kunnen worden. Er zijn allerlei andere videoformaten die in een HTML-pagina afgespeeld kunnen worden. De term ‘formaat’ wordt gebruikt om een videotechnologie te benoemen. Onderdelen van een videotechnologie zijn codecs, containers, maar ook servers, players, protcollen en afspeelapparaten. Zo gebruikte Microsoft voorheen de naam Windows Media voor deze verzameling. Het formaat komt ook vaak overeen met de naam van de container die in een specifieke videotechnologie wordt gebruikt. Een container is een soort envelop waarin afzonderlijk videobestanden, audiobestanden, ondertitels, menu’s en andere elementen van een volledig videobestand gegroepeerd zijn. Een container is dus een file met daarin verwijzingen naar andere files. Het QuickTime–formaat van Apple en het Ogg– formaat zijn hier voorbeelden van.
7
De bekendste formaten anno 2010 zijn: – – – – –
Flash; Microsoft Windows Media / Silverlight; Quicktime; H.264 (MPEG 4); Ogg.
In SURFmedia, de videodienst van SURFnet, worden meerdere van deze formaten ondersteund. Dit is een voorbeeld van een Microsoft object zoals het wordt gebruikt in SURFmedia: <param name='filename' value='mms://wmvstream.kennisnet.nl/vpx/5/vjXbWRYofFSTSLa9Lozd01J1' /> <param name='autostart' value='true' /> <embed type='application/x–mplayer2' src='mms://wmvstream.kennisnet.nl/vpx/5/vjXbWRYofFSTSLa9Lozd01J1' autostart='1' name='IIVBTLdR8NDSie0GGt5lQzvm' width='1024' height='640'/>
Dit object bevat dezelfde type informatie als in het voorbeeld op de vorige pagina, bijvoorbeeld de grootte van de video: 1024x640 pixels. De ‘filename’ parameter geeft aan waar de video vandaan komt. In dit geval wordt deze geleverd door een windows media server (‘wmvstream.kennisnet.nl’) met het ‘mms’ protocol. De term ‘protocol’ beschrijft hoe het dataverkeer tussen computers verloopt. De twee belangrijkste protocollen die gebruikt worden bij het afspelen van video zijn: http: Het Hyper Text Transfer Protocol is het standaardprotocol in de applicatielaag voor het uitwisselen van informatie op het internet. Met http is het ook mogelijk een video te downloaden en alvast het deel dat binnen is gekomen af te spelen alvorens het hele bestand is binnen gehaald. Dit heet dan progressive download. RTSP: Het Real Time Streaming Protocol is ontwikkeld door RealNetworks, Netscape en Columbia University en beter geschikt voor streaming dan http. Het grote verschil met http is dat in RTSP uitgebreidere communicatie tussen player en server is gedefinieerd. Met RTSP kunnen daardoor commando’s aan een streaming server gegeven worden waarmee videofiles bestuurd kunnen worden, zoals het dynamisch aanpassen van bandbreedte als deze niet voldoende is. Het MMS protocol van Microsoft is een variant op dit RTSP protocol. Daarnaast gebruikt Adobe voor Flash een vergelijkbaar, maar incompatibel formaat voor streaming, RTMP. Meer over servers en protocollen is te lezen in Hoofdstuk 5.
Belangrijk om te onthouden is dat ieder formaat zijn eigen manier van insluiten in een HTMLpagina heeft via de -tag. Voor elk formaat wordt een andere videospeler geopend en
8
de manier waarop het formaat van de server naar de speler wordt gestuurd, het protocol, is ook telkens anders. Een -tag werkt daardoor niet zomaar in elke browser en op elk platform. Sommige browsers en platformen hebben geen ondersteuning voor een bepaald protocol of formaat. Zo werkt een Windows Media stream niet zonder meer op Apple platformen. Naast het formaat zelf is er nog een belangrijk verschil in de verschillende formaten en dat is de gebruikte compressie techniek, de codec. De manier waarop audio- of videodata is gecomprimeerd, wordt een “codec” genoemd. Het woord codec is een samentrekking van coder en decoder. Een encoder is software waarmee grote videobestanden kunnen worden gecomprimeerd in kleinere bestanden zodat ze te streamen zijn over internet. Om deze stream af te spelen is een decoder nodig, die vaak is ingebouwd in de videospeler. Compressie heeft als doel het bestand kleiner te maken. Door compressie wordt de beeldkwaliteit dan ook vaak minder dan het origineel, tenzij voor speciale lossless compressieprotocollen gekozen wordt. Lossless compressietechnieken kunnen echter niet zover comprimeren als compressietechnieken die data weggooien en daardoor kwaliteitsverlies opleveren (lossy technieken).
De URL die verwijst in de -tag naar het videobestand, verwijst eigenlijk naar een container van het videobestand. In deze container staan verwijzingen naar afzonderlijke delen voor de video en de audio. De codec comprimeert deze afzonderlijke audio– en videodelen. In de volgende tabel staan de verschillen tussen de belangrijkste formaten van het moment op een rijtje: Formaat
Flash
Windows Media / Silverlight
Quicktime
MP4
Ogg
Container
Flv/f4v
asf
Mov
MPEG4
ogg
Videospeler
Flash/swf applicatie
Windows Media / Silverlight
QuickTime player
Flash app / Silverlight / QuickTime
Cortado (java), of via Windows Media of QT
Protocol
rtmp
http / rtsp / mms
http / rtsp
http / rtmp / rtsp
http
Audio codec
MP3 / AAC
Wma / AAC
Aifc / AAC
AAC
Vorbis / flac
Video codec
VP6 / H.264
Wmv / VC– 1 / H.264
Sorensen / H.264
H.264
theora
Propriëtair / open
prop
prop
prop
prop
open
Licentiekosten voor encoden
X
X
–
X
–
Licentiekosten voor afspelen
–
–
–
X
–
Samengevat zijn er in de huidige browsers drie belangrijke -tags die (1) een Adobe Flash–player openen, (2) een Microsoft Windows Media–player openen, of (3) een Apple
9
QuickTime–player openen. Elk van deze drie formaten heeft propriëtaire codecs en heeft zijn eigen methode van video afspelen. Er is één open videoformaat dat al deze players daarnaast ook af kunnen spelen en dat is MP4/H.264. Ondanks het feit dat de specificatie van H.264 vrij beschikbaar is, zijn aan het gebruik van H.264 als enige codec licentiekosten verbonden. Daarnaast is er de Ogg suite; deze heeft een volledige eigen set van tools, die voor iedereen toegankelijk en bruikbaar zijn. MP4/H.264 is een belangrijk formaat, met name omdat veel grote spelers het gebruiken en daardoor vrijwel alle gebruikers het kunnen afspelen. Met dit formaat is een hoge compressie mogelijk zonder (al te veel) kwaliteitsverlies: Een videobestand kan relatief klein gemaakt worden, terwijl de beeldkwaliteit relatief hoog blijft.
2.3
New kid on the block (Waarom HTML5/WebM/VP8?)
In mei van 2010 heeft Google een nieuw videoformaat gelanceerd, genaamd WebM. Google heeft WebM expliciet gepositioneerd als open en gratis videoformaat voor het internet, Het levert hoge kwaliteit audio en video en is voor iedereen bruikbaar toegankelijk. Qua filosofie lijkt WebM het meest op het Ogg formaat. In de volgende tabel worden de bovenstaande formaten en WebM met elkaar vergeleken: Formaat
Flash
Windows Media / Silverlight
Quicktime
H.264
Ogg
WebM
container
Flv/f4v
asf
Mov
MPEG4
ogg
WebM
Videospeler
Flash/swf applicatie
Windows Media / Silverlight
QuickTime player
Flash app / Silverlight / QuickTime
Cortado (java)
Diverse
Protocol
rtmp
http / rtsp / mms
http / rtsp
http / rtmp / rtsp
http
http
Audio codec
MP3 / AAC
Wma / AAC
Aifc / AAC
AAC
Vorbis / flac
Vorbis
Video codec
VP6 / H.264
Wmv / VC– 1 / H.264
Sorensen / H.264
H.264
Theora
VP8
Propriëtair / open
prop
prop
prop
prop
open
open
Licentiekosten X voor encoden
X
–
X
–
–
–
–
–
X
–
–
Licentiekosten voor afspelen
De belangrijkste eigenschappen van WebM zijn dat het open is, en vrij en gratis in gebruik. Dit in tegenstelling tot de andere formaten die ofwel gesloten zijn, ofwel waarvoor een licentieovereenkomst vereist is. Daarnaast is WebM ontwikkeld om direct in de browser af te spelen, gebruik makend van nieuwe HTML5 technologie en de daarbij behorende tag. Dit betekent dat er geen plug–in (Flash, Silverlight of QuickTime) meer nodig is om de video af te spelen.
10
Om WebM video in HTML5 af te spelen is het noodzakelijk dat de browser HTML5 en het WebM formaat ondersteunt. In het volgende hoofdstuk wordt dieper ingegaan op de ondersteuning van HTML5 in diverse browsers. In de volgende paragraaf worden eerst de belangrijkste eigenschappen van HTML5 onder de loep genomen.
2.4
Features van HTML5 en de -tag
HTML5 is een verzameling standaarden van de W3C met nieuwe features voor dynamische webpagina’s. Eén van deze nieuwe features is de -tag. Een van de andere features is de mogelijkheid tot tekenen met de -tag. HTML5 biedt daarnaast ook meer detail in formulieren, zoals een search box en een email box. Een andere belangrijke aanvulling van HTML5 is lokale opslag in de browser voor het offline bewaren van statusdata. Ook geolocatie–bepaling is onderdeel van HTML5. Meer informatie over HTML5 is te vinden in deze presentatie: http://slides.html5rocks.com/. Meer informatie over HTML5 in een bredere context dan in dit rapport is te vinden op http://diveintohtml5.org/. In deze verkenning ligt de focus op de videomogelijkheden in HTML5. De -tag wordt gebruikt om video in een webpagina in te sluiten. In tegenstelling tot de voorbeelden eerder in dit hoofdstuk, is er dus geen -tag meer nodig. Er zijn in de standaard geen beperkingen in het gebruik van een container of een audio– of video codec opgelegd. In theorie zijn dus alle formaten en codecs binnen de –tag toegestaan. De browser bepaalt welk videoformaat wordt ondersteund, en het zijn dus de ontwikkelaars van de browsers die uiteindelijk zullen bepalen welke formaten worden ondersteund. Er is op dit moment niet één formaat die door de HTML5 specificatie wordt voorgeschreven. In het volgende hoofdstuk wordt uitgebreid ingegaan op de mogelijke combinaties van browsers en videoformaten. De video tag heeft de volgende attributen waarmee de presentatie kan worden aangepast. Attribuut
Waarde
Beschrijving
Audio
muted
Default status van de audio
Autoplay
autoplay
De video begint direct te spelen
Controls
controls
Er worden knoppen bij de video getoond, zoals een ‘play’ knop
Height
[pixels]
De hoogte van de video
Loop
loop
De video begint opnieuw nadat hij is afgelopen
Preload
preload
De video wordt geladen als de pagina wordt geladen.
Src
[URL]
De URL van de video
Width
[pixels]
De breedte van de video
De -tag ondersteunt naast bovenstaande specifieke attributen alle standaard HTML5 attributen. Daarmee is de video onder andere eenvoudig te benaderen en te bewerken met Javascript en CSS voor dynamische aansturing en vormgeving van de video.
HTML5 Code Een eenvoudige -tag om een H.264 filmpje, MY_MOVIE.mp4, af te spelen in het formaat 320 bij 240 pixels is:
11
De ‘id’ tag kan gebruikt worden om vanuit Javascript en CSS het video object te bewerken, zoals het aanpassen van de grootte van de video, het pauzeren en spelen van de video, etc. De ‘preload’ en ‘controls’ opties geven aan dat de video geladen mag worden tijdens het openen van de pagina en dat er controls voor bijvoorbeeld afspelen en stoppen van de video getoond moeten worden. Merk op dat deze -tag alleen in browsers werkt die het MP4-formaat ondersteunen. In de loop van dit document zal deze tag uitgebreid worden met code zodat de video voor alle browsers geschikt wordt.
2.5
Bronnen • • • • •
HTML5: http://diveintohtml5.org/video.html HTML5: http://www.html5video.org/ HTML5: http://en.wikipedia.org/wiki/HTML5_video HTML5; http://www.w3schools.com/html5/tag_video.asp HTML5 test: http://html5test.com/
• • • • • • • • •
QuickTime: http://images.apple.com/euro/quicktime/pdf/QuickTime7_User_Guide.pdf MS expression: http://www.microsoft.com/netherlands/expression/ MS Silverlight: http://www.microsoft.com/silverlight/ MS codecs: http://msdn.microsoft.com/en–us/library/ff819508(VS.85).aspx Silverlight codecs: http://msdn.microsoft.com/en–us/library/cc189080(VS.95).aspx Alles ogg: http://www.xiph.org/ Adobe Flash: http://en.wikipedia.org/wiki/Flash_Video H.264 overal: http://www.wowzamedia.com/H.264.html WebM: http://www.webmproject.org/
Gerelateerde SURFnet/Kennisnet-rapporten: • •
http://www.surfnetkennisnetproject.nl/attachments/2235334/TS_Open_Live_Streamin gdefinitief.pdf http://video.surfnet.nl/StreamingVideoFormaten/rapport_streaming_video_formaten.p df
12
3
Ondersteuning van HTML5 video
In het vorige hoofdstuk is beschreven dat met de nieuwe -tag in HTML5 het mogelijk is om video in een webbrowser af te spelen zonder gebruik te maken van een plug–in. Dit lijkt de ideale oplossing voor video op het web, want er is dan geen propriëtaire videospeler of software meer nodig om een video op alle platformen af te spelen. Zover is het nu nog niet. Ten eerste bieden alleen recente browserversies ondersteuning voor HTML5. Bovendien is er veel verschil tussen de implementaties van de verschillende browsers van de -tag, waardoor een bepaalde video niet in iedere browser afspeelbaar is. Alle nieuwe browsers ondersteunen de -tag wel, maar het verschilt per browser welk formaat video afspeelbaar is.
3.1
-tag in webbrowsers
Om een vergelijking te maken tussen de webbrowsers worden hierna de vijf belangrijkste desktop webbrowsers van het moment beschouwd: 1. 2. 3. 4. 5.
Internet Explorer; Firefox; Chrome; Safari; Opera.
In sectie 3.3 kijken we naar de ondersteuning in mobiele apparaten. Van iedere webbrowser wordt de HTML5-ondersteuning van de huidige versie weergegeven en de ondersteuning van de bèta-versie, als deze beschikbaar is. Alleen de belangrijkste formaten worden in beschouwing genomen, die op verschillende platforms beschikbaar zijn. Naast de beschreven formaten ondersteunen fabrikanten vaak ook nog hun eigen formaten, die echter niet algemeen bruikbaar zijn.
Internet Explorer Internet Explorer is de webbrowser die geleverd wordt door Microsoft. Deze is alleen beschikbaar op Windows–platforms. Huidige versie: 8 De huidige versie van Internet Explorer ondersteunt de -tag niet. Bètaversie: 9 De nieuwste features van Microsoft wat betreft HTML5 video zijn hier te vinden: http://msdn.microsoft.com/en–us/ie/ff468705.aspx#_HTML5_video_audio. Op het gebied van HTML5 en de –tag gaat er ondersteuning komen voor: – – –
1
Container: MP4, WebM 1 Video: H.264, VP8 1 Audio: AAC, mp3, Vorbis
Firefox Firefox is de veel gebruikte browser van de Mozilla community. Deze is beschikbaar voor Windows, OSX, en Linux.
1
WebM wordt niet standaard bij Internet Explorer geleverd, maar door de WebM codec in Windows te installeren, wordt het voor gebruikers wel mogelijk in Internet Explorer 9 WebM–video’s af te spelen.
13
Huidige versie: 3.6 Deze versie ondersteunt de -tag voor de volgende formaten: – – –
Container: ogg Video: Theora Audio: Vorbis
Bètaversie: 4.0 Belangrijke HTML5 video features van de nieuwe versie 4.0 zijn hier te vinden: https://developer.mozilla.org/En/Media_formats_supported_by_the_audio_and_video_elements. Daar
is veel te lezen over HTML5 en video. Firefox gaat ondersteuning geven voor WebM: – – –
Container: WebM, Ogg Video: VP8, Theora Audio: Vorbis
Chrome Chrome is de webbrowser van Google, en is beschikbaar op Windows, OSX, en Linux. Ondersteuning voor HTML5 video is er vanaf versie 5 van Chrome. Vanaf versie 6 wordt ook WebM ondersteund. Huidige versie: 7.0 Deze versie ondersteunt de -tag voor de volgende formaten: – – –
Container: Ogg, WebM, MP4 Video: Theora, VP8, H.264 Audio: Vorbis, AAC
Safari Safari is de webbrowser van Apple. Van oudsher ondersteunt Apple het H.264 en de MP4/MOV container. Safari doet dat vanaf versie 3 ook. Huidige versie: 5.0 Deze versie ondersteunt de -tag voor de volgende formaten: – – –
Container: MP4 Video: H.264 Audio: AAC
Opera Opera is een webbrowser die is ontwikkeld in Noorwegen; het bedrijf Opera is nu onderdeel is Nokia. De browser is beschikbaar voor Windows, OSX, en Linux. Huidige versie: 10.6 Deze versie ondersteunt de -tag voor de volgende formaten: – – –
Container: Ogg, WebM Video: Theora, VP8 Audio: Vorbis
Bètaversie: 11 De nieuwe versie van Opera heeft optimalisaties voor HTML5, maar zal dezelfde formaten ondersteunen als versie 10.6.
14
3.2
Webbrowser en video matrix
Alle versies en video ondersteuning uit de vorige paragrafen zijn hierna opgenomen in één overzicht. Internet Explorer
Firefox
Chrome
Safari
Opera
8
9
3.6
4.0
6+
3+
10.6+
MP4
–
×
–
–
×
×
–
Ogg
–
–
container ×
×
×
–
×
–
×
2
–
×
×
–
×
H.264
–
×
–
–
×
×
–
Theora
–
–
WebM Video codec
×
×
×
–
×
–
×
2
–
×
×
–
×
MP3
–
×
–
–
–
–
–
AAC
–
×
–
–
×
×
×
–
×
2
×
×
×
–
×
Ogg/Theora/Vorbis
–
–
×
×
×
–
×
MP4/H.264/AAC/
–
×
–
–
×
×
–
–
2
–
×
×
–
×
VP8 Audio codec
Vorbis combined
WebM/VP8/Vorbis
×
Uit deze tabel is te lezen dat er op dit moment nog geen combinatie is die op alle browsers werkt met de HTML5 -tag. Als op dit moment gebruik wordt gemaakt van de –tag om video’s op te nemen, dan moet een combinatie van alle drie de formaten worden gebruikt. Als we alleen de nieuwste versie van Firefox in beschouwing nemen, is een combinatie van minimaal twee videoformaten nodig. De mogelijk combinaties zijn: – –
MP4 en Ogg; MP4 en WebM;
De belangrijkste bewegingen in de toekomst zijn die van Internet Explorer versie 9 naar H.264 ondersteuning en van Firefox 4.0 naar WebM ondersteuning. Aangezien VP8 (de videocodec behorende bij WebM) een modernere codec is en betere kwaliteit en compressie geeft dan Theora (de videocodec in het Ogg-formaat), ligt het voor de hand te kiezen voor WebM. Overigens is de kwaliteit ook erg afhankelijk van welke encoder er wordt gebruikt: een goede Theora-encoder kan betere resultaten geven dan een slechte VP8-encoder, ondanks dat de VP8 codec geavanceerder is.
2
Na handmatige installatie van de codec 15
De belangrijkste conclusie is dus dat video voor gebruik met HTML5 het beste beschikbaar gemaakt kan worden in de volgende combinatie, waarbij opgemerkt moet worden dat Chrome beide formaten ondersteunt: – –
MP4 voor IE 9 en Safari 3+ WebM voor FireFox 4, Chrome 6+ en Opera 10.6+
Door ondersteuning van deze twee formaten is de video het beste op de toekomst voorbereid. Deze conclusie wordt onderschreven door wat YouTube op dit moment over HTML5 ondersteuning schrijft op http://www.youtube.com/html5:
HTML5 code Zoals we hierboven hebben beschreven is het nodig om video’s in meerdere formaten aan te bieden. Om het voorbeeld van HTML5 video uit Hoofdstuk 2 afspeelbaar te maken in alle browsers is het nodig meerdere source files aan te bieden in de -tag. Het nieuwe voorbeeld is: <source src="MY_MOVIE.mp4" /> <source src="MY_MOVIE.webm" type='video/webm; codecs="VP8, vorbis"' />
Indien naast MP4 en WebM ook het Ogg formaat gewenst is, dan kan de volgende source als derde optie binnen de –tag toegevoegd worden: <source src="MY_MOVIE.ogv" type='video/ogg; codecs="theora, vorbis"' />
3.3
Mobiele toegang tot video
Naast webbrowsers voor PC en laptops wordt er steeds meer gebrowsed met mobiele(re) apparaten. Een aantal van deze apparaten en software hebben worden in dit rapport ook beschreven wat betreft hun ondersteuning voor HTML5 Video. Het gaat om: 1. 2. 3. 4.
iOS van Apple voor iPhone en iPad; Android van Google; Windows Phone 7, het mobiele operating systeem van Microsoft; Opera mini, een browser van Opera voor verschillende mobiele platformen.
16
iOS voor iPhone en iPad iPhones en iPads zijn van leverancier Apple en gebruiken het iOS operating systeem. Deze devices gebruiken Safari en ondersteunen de MP4-container en H.264-video, net als andere apparaten en software van Apple. De huidige versie van iOS is versie 4.
Android De webbrowser van Android is gebaseerd op dezelfde technologie als de Chrome–browser en gebruikt onder andere variant van de browser engine. Android ondersteunt, net als iOS: H.264 in een MP4 container. De meest recente versie van Android, 2.3, ondersteunt bovendien ook WebM-video’s.
Windows Phone 7 Dit operating systeem voor mobiele apparaten maakt gebruikt van een versie van Internet Explorer die vergelijkbaar is met Internet Explorer 8. Windows Phone 7 ondersteunt nog geen HTML5 -tag.
Opera Mini Opera Mini ondersteunt nog geen HTML5 -tag.
3.4
Mobiel en video matrix
Alle versies zijn weer opgenomen in één overzicht iOS 4+
Android 2+
Windows Phone 7
Opera mini
Combined
–
–
–
–
MP4/H.264/AAC
×
×
–
–
WebM/VP8/Vorbis
–
× (vanaf 2.3)
–
–
Ondersteuning voor mobiele browsers heeft op dit moment geen consequenties voor het gebruik van de HTML5 –tag. De twee belangrijkste mobiele apparaten maken gebruik van H.264 video, maar helaas is er nog geen ondersteuning op het mobiele Windows–platform. Qua ondersteunde codecs maken mobiele browsers dan ook geen verschil, omdat MP4/H.264 sowieso al aangeboden dient te worden voor desktopbrowsers. De eerder gepresenteerde code werkt daardoor ook op mobiele apparaten, voor zover die HTML5-video ondersteunen. Hierbij moet wel opgemerkt worden dat de H.264 video codec en de AAC audio codec niet met de meest geavanceerde opties ingesteld moeten worden tijdens het encoding proces. De meest complexe coderingen worden niet ondersteund op de mobiele platformen en zijn daar niet afspeelbaar. Daarom is het aan te bevelen H.264 met een profiel voor mobiele devices te coderen en AAC met het ‘low complexity’ profiel, wanneer ondersteuning voor het afspelen op mobiele devices gewenst is. Gebruik bijvoorbeeld het iPhone-profiel in Handbrake. (http://www.handbrake.fr/)
17
3.5
Wat als HTML5 niet ondersteund wordt?
De HTML5 -tag wordt gebruikt om video in een browser af te spelen zonder plug–in. Op dit moment zijn alleen de nieuwste browsers geschikt hiervoor. Als bezoekers met oudere browsers de video willen bekijken dan zal er een mechanisme moeten zijn waardoor alsnog een plug–in wordt gebruikt om de video af te spelen. Om een plug–in af te spelen als de -tag niet begrepen wordt kan er een -tag binnen de -tag worden geplaatst. Dit kan een willekeurig object zijn, zoals Silverlight of Flash. Het meest gebruikte object van het moment om video in een webpagina te tonen is Flash. Voordeel van het gebruik van Flash is dat binnen Flash een H.264 video afgespeeld kan worden. Er hoeft dus geen aparte encoding meer plaats te vinden, maar de H.264 kan hergebruikt worden om in het Flash object af te spelen.
HTML5 code In onderstaand voorbeeld is de code uitgebreid met Javascript-code die een <embed>-tag genereert. Met deze code is een video in alle browsers af te spelen. De Javascript-code komt uit SURFmedia en MediaMosa. <source src="MY_MOVIE.mp4" /> <source src="MY_MOVIE.webm" type='video/webm; codecs="VP8, vorbis"' /> <script type='text/Javascript' src='http://player.vpcore.snkn.nl/swfobject– licensed.js'> This div will be replaced
<script type='text/Javascript'> var s1 = new SWFObject('http://player.vpcore.snkn.nl/player– licensed.swf','ply','352','308','9'); s1.addParam('allowfullscreen','true'); s1.addParam('allowscriptaccess','always'); s1.addParam('wmode','opaque'); s1.addParam('flashvars','streamer=rtmp://wowstreaming.snkn.nl/vod&file=vpx/5/MY_MOVIE.mp 4'); s1.addVariable('type', 'mp4'); s1.write('mediaspace');
Als de browser de video niet ondersteunt, wordt de Javascript-code aangeroepen, die de volgende <embed>-tag genereert: <embed type="application/x-shockwave-flash" src="http://player.vpcore.snkn.nl/player-licensed.swf" id="ply" name="ply" quality="high" allowfullscreen="true" allowscriptaccess="always" wmode="opaque" flashvars="streamer=rtmp://wowstreaming.snkn.nl/vod& file=vpx/5/MY_MOVIE.mp4&skin=http://player.vpcore.snkn.nl/classic.zip&autostart= true" width="352" height="308">
18
3.6
–
IE 8: http://www.microsoft.com/netherlands/windows/internet–explorer/ IE 9: http://windows.microsoft.com/nl–nl/internet–explorer/products/ie–9/features IE 9 HTML5: http://msdn.microsoft.com/en–us/ie/ff468705.aspx#_HTML5_video_audio IE 9 WebM: http://windowsteamblog.com/windows/b/bloggingwindows/archive/2010/05/19/another– follow–up–on–html5–video–in–ie9.aspx FF 3.6: http://www.mozilla–europe.org/nl/firefox/ FF 4.0: http://www.mozilla.com/en–US/firefox/beta/technology/ FF HTML5: https://developer.mozilla.org/En/Media_formats_supported_by_the_audio_and_video_el ements Chrome: http://www.google.com/chrome/intl/en/more/index.html Chromium: http://www.chromium.org/chromium–projects Safari 5: http://www.apple.com/nl/safari/whats–new.html#html5 Safari develop: http://developer.apple.com/library/safari/#documentation/AudioVideo/Conceptual/Using_ HTML5_Audio_Video/Introduction/Introduction.html Opera features: http://www.opera.com/docs/specs/productspecs/
– –
HTML5 volgens YouTube: http://www.youtube.com/html5 HTML5: http://diveintohtml5.org/video.html
– – – –
– – –
– – – –
Bronnen
19
4
Geavanceerde mogelijkheden HTML5 video
In dit hoofdstuk worden een aantal technieken rondom HTML5 Video behandeld, die verder gaan dan puur het afspelen van video. Een aantal van deze technieken zijn al daadwerkelijk in een aantal browsers geïntegreerd, maar andere technieken zijn slechts in een enkele browser geïmplementeerd , of zijn delen van de HTML5 specificatie die helemaal nog niet beschikbaar zijn in browsers. Hierbij is het verstandig om in het oog te houden dat de HTML5 specificatie weliswaar door de W3C wordt opgesteld, maar dat het uiteindelijk de ontwikkelaars van de individuele browsers zijn die beslissen welke features zij in hun browser opnemen, en welke delen van de standaard zij ondersteunen. Hoewel de browserbouwers zijn vertegenwoordigd in de W3C, komt het geregeld voor dat browsers (om wat voor reden dan ook) afwijken van de standaard. Dat geldt niet alleen voor bijvoorbeeld Microsoft, die (in het verleden) erom bekend stond browsers uit te brengen die niet compatibel waren met de huidige webstandaarden, maar ook voor andere browserontwikkelaars die bepaalde features niet implementeren, en andere, niet in de standaard gespecificeerde onderdelen juist wel. Een aantal van de hier behandelde features hebben op dit moment slechts het niveau van een gimmick, maar andere hebben een fundamenteel karakter en vormen een deel van de ontwikkeling die nodig is voordat HTML5 Flash of Silverlight volledig zou kunnen vervangen
4.1
Ondertitel en annotaties
Vaak is het nuttig om in of naast een video–of audiofragment tekst of andere data synchroon mee te laten lopen. Je kunt dan bijvoorbeeld denken aan ondertitels die over een video heen worden gelegd, maar ook aan PowerPoint–slides die synchroon naast een video van een college worden getoond. Hoewel al er wel voorstellen bestaan om dit soort zaken op te lossen, zoals SMIL, hebben deze een grotere scope dan ondertitels bij video, en zijn ze niet gemakkelijk te gebruiken met HTML5 video. Daarom is er voor gesynchroniseerde tekst zoals ondertitels er een voorstel om dit op een eenvoudige manier op te lossen. De idee is om aan een –element tracks met diverse vormen van gesynchroniseerde tekst toe te voegen. De rendering van de tekst wordt verder aan de browser overgelaten. Zo’n video–tag met ondertitels ziet er als volgt uit: <source src="MY_MOVIE.mp4" /> <source src="MY_MOVIE.webm" type='video/webm; codecs="VP8, vorbis"' />
src="subs_en.vtt" kind=”subtitles” srclang="en" label=”English for the hearing /> src="subs_se.vtt" kind=”subtitles” srclang=”se” label=”Swedish” /> src="subs_jp.vtt" kind=”subtitles” srclang="jp" label=”Japanese” />
In dit voorbeeld worden, naast een MP4– en een WebM–videotrack, drie tekstracks beschreven, voor Engelse, Zweedse, en Japanse ondertitels. Het formaat van de ondertitels is het WebVTT-formaat, een simpel formaat waarin begin– en eindtijd van de ondertitel worden beschreven, alsmede de inhoud van de ondertitel. Zo’n WebVTT–bestand ziet er als volgt uit:
20
WEBVTT FILE 1 00:00:20,000 ––> 00:00:24,400 Altocumulus clouds occur between six thousand 2 00:00:24,600 ––> 00:00:27,800 and twenty thousand feet above ground level. 3 00:00:32,080 ––> 00:00:34,320 At these great heights, the air is very cold.
Naast zulke platte tekst is het ook mogelijk meer geavanceerde opmaak aan te geven. Dit alles heeft nog slechts de status van een voorstel, en is het nog niet beschikbaar in een browser. Het is echter wel al mogelijk om via Javascript ondertitels te laten zien in HTML5 video’s. Een voorbeeld van wat nu mogelijk is (functioneel in Firefox en Chrome) is te vinden op http://www.xiph.org/video/vid1.shtml. Een voorbeeld, gekopieerd van deze webpagina, is hieronder te zien.
Wat hier feitelijk gebeurt, is dat de ondertitels via Javascript worden ingelezen. Via de videoAPI van HTML5 kan vanuit Javascript de huidige positie in de video worden opgevraagd, en kan op het juiste moment de goede ondertitel worden getoond. Op eenzelfde manier is het mogelijk andere content synchroon te laten meelopen met een HTML5 video. Door in Javascript uit te lezen wat de positie van de video is, kan bijvoorbeeld op het juiste moment een plaatje van een slide in een –element worden vervangen.
4.2
Websockets
Het is vaak lastig om real–time data te verwerken in webpagina’s. Hoewel er allerhande oplossingen bestaan om vanuit Javascript binnen een webpagina data op te halen
21
(bijvoorbeeld door middel van XMLHttpRequests over http–verbindingen), zijn er geen mogelijkheden om een full–duplex verbinding op te starten, waar de server data naartoe kan zenden zodra die beschikbaar komt. Bovendien lopen alle huidige verbindingsmogelijkheden via http en geven dus de overhead van het opzetten van de http verbinding en het uitwisselen van de http headers. In HTML5 wordt nu wel een mechanisme gespecificeerd waardoor zulke full–duplexverbinden mogelijk worden: Websockets. Hiermee wordt het mogelijk om vanuit een webapplicatie een real–time full–duplex verbinding met de server op te zetten. Het grootste voordeel hiervan is de reductie van overhead en latency die nodig is voor het uitwisselen van de data. Op http://www.websockets.org/quantum.html wordt een voorbeeld gegeven van een aandelenwebsite, die door clients elke seconde wordt bevraagd op updates. Door gebruik te maken van Websockets zou de hoeveelheid verspilde bandbreedte voor overhead kunnen worden teruggebracht van 665Mbps naar 1.6Mbps. Technisch gezien werken websockets als volgt: de client (meestal de browser) is verantwoordelijk voor het initiëren van de verbinding door een websocket te openen naar een server. Bij het opzetten van de verbinding wisselen de client en de server een “handshake” uit: GET /text http/1.1 Upgrade: WebSocket Connection: Upgrade Host: www.example.org ... http/1.1 101 WebSocket Protocol Handshake Upgrade: WebSocket Connection: Upgrade ...
Nadat deze handshake is uitgevoerd, kunnen de client en de server zowel tekstframes en binaire frames uitwisselen, met slechts enkele bytes aan overhead. Websockets zijn beschikbaar in Chrome 6, Opera 11, en Safari 5, en Firefox 4. Recentelijk zijn echter beveilingrisico’s in het protocol ontdekt, waardoor een aantal browserontwikkelaars hebben besloten om Websockets voorlopig niet te activeren. Daardoor 3 zijn in Firefox 4 en Opera websockets voorlopig niet beschikbaar .
4.3
Digital Rights Management
Distributie van mediacontent op internet is voor veel traditionele mediabedrijven een lastig punt, omdat men over het algemeen eist dat de gebruiker de verspreide content niet lokaal kan opslaan en kan kopiëren. Dit geldt zowel voor betaalde content (zoals het on–demand huren en streamen van een film van NetFlix) als voor content die gratis beschikbaar is (zoals bijvoorbeeld op www.uitzendinggemist.nl of de BBC iPlayer). Browser–plug–ins die op dit moment in gebruik zijn om video af te spelen in de browser, zoals Adobe Flash en Microsoft Silverlight, hebben op verschillende niveaus ondersteuning om de toegang tot digitale content af te schermen, het zogenaamde Digital Rights Management (DRM). Ten eerste kan de videostream, zelfs als deze zonder encryptie over het netwerk wordt verstuurd, vanuit de browser niet gemakkelijk worden opgeslagen door een “Save As” optie in het contextmenu. Op een lager niveau kan dan natuurlijk nog wel de videostream worden “afgeluisterd” en naar de harddisk worden gekopieerd op het moment 3
http://hacks.mozilla.org/2010/12/websockets-disabled-in-firefox-4/ 22
dat de browser deze binnenhaalt. Om dat te voorkomen wordt ook wel de hele videostream versleuteld verstuurd. De plug–in die de video afspeelt moet dan echter wel de sleutel kennen die de server gebruikt. In het geval van onder meer Flash en Silverlight zijn er allerhande manieren om deze sleutels uit te wisselen, en de video te decoderen zonder dat de gebruiker de mogelijkheid heeft om de video op te slaan. In het geval van HTML5 zijn deze mogelijkheden er momenteel echter niet. De specificatie zegt helemaal niets over DRM en het uitwisselen van sleutels, en hoewel er stemmen opgaan om dit wel in de specificatie op te nemen, blijven de meningen daarover verdeeld. Hoewel er dus niets gespecificeerd is, kunnen browserontwikkelaars wel zelfstandig DRM– functionaliteiten inbouwen. Er is op het moment slechts één ontwikkelaar die dat heeft gedaan, en dat is Apple in Safari en de iOS browser voor iPhone en iPad. De DRM is bovendien alleen beschikbaar in Apple’s versie van http Dynamic Streaming (zie Hoofstuk 5). Het werkt als volgt: voor Apple’s versie van http Dynamic Streaming wordt de video opgeknipt in fragmenten van ongeveer 10 seconden. Zoals beschreven in Hoofdstuk 5, wordt de beschrijving van welk fragment op welk tijdstip door de browser moet worden getoond bijgehouden in een playlist in een M3U8–bestand. Deze playlist kan echter ook een verwijzing bevatten naar een encryptiesleutel. Dat ziet er dan als volgt uit: #EXTM3U #EXT–X–MEDIA–SEQUENCE:7794 #EXT–X–TARGETDURATION:15 #EXT–X–KEY:METHOD=AES–128,URI=https://priv.example.com/key.txt #EXTINF:15, http://media.example.com/movie–1.ts #EXTINF:15, http://media.example.com/movie–2.ts #EXTINF:15, http://media.example.com/movie–3.ts
Om de video nu af te spelen, moet de browser eerst de encryptiesleutel ophalen, in dit voorbeeld van de locatie https://priv.example.com/key.php?r=52. Die locatie is typisch afgeschermd met een wachtwoord, en de sleutel kan alleen worden gedownload als de gebruiker daartoe gerechtigd is. Als de browser de sleutel heeft binnengehaald, gebruikt hij deze om de gespecificeerde mediafragmenten te decoderen, waarna deze aan de gebruiker kunnen worden getoond. Het is dan niet meer mogelijk om op netwerkniveau de videostream af te luisteren en op te slaan. Uiteraard is de beveiliging niet geheel waterdicht: de browser heeft de sleutel binnengehaald, dus met voldoende moeite is het mogelijk de sleutel uit het geheugen of uit de cache te herleiden. In de praktijk blijkt echter dat de videoproducenten deze praktijk afdoende vinden, in ieder geval op de manier waarop hij is geïmplementeerd op Apple-platformen: deze methode van beveiliging van streaming content wordt op dit moment namelijk al door enkele contentproviders in de VS (onder andere Hulu en NetFlix) gebruikt om video naar hun klanten te versturen voor gebruik met iPads en iPhones.
4.4
HTML5 Canvas
HTML5 introduceert een –element, dat gebruikt kan worden om grafieken, plaatjes, of andere grafische elementen te tekenen. Dit heeft allerlei nuttige toepassingen voor webapplicaties in het algemeen, maar heeft ook toepassingen voor HTML5 Video.
23
Het is namelijk mogelijk om video’s op te nemen in zo’n canvas, en er op die manier beeldbewerkingen op uit te voeren. Zo zijn er allerlei speciale effecten mogelijk. Voorbeelden zijn te zien in de volgende screenshots.
[http://www.craftymind.com/2010/04/20/blowing–up–html5–video–and–mapping–it–into–3d–space/] Op dit moment is deze feature nog slechts een gimmick, maar het biedt in de toekomst wel allerlei mogelijkheden voor bijvoorbeeld gaming. HTML5 canvas is beschikbaar in de nieuwste versies van alle belangrijke browserplatformen.
4.5
Fullscreen
De HTML5-specificatie schrijft expliciet voor dat browsers het niet mogelijk moeten maken om HTML5 video’s in fullscreen te draaien. Dit heeft te maken met eventuele mogelijkheden van websites om het hele scherm over te nemen en daarmee dan gebruikers kunnen overtuigen om op malafide links te klikken, of hun wachtwoord of creditcardgegevens naar malafide sites te sturen. Full–screen video is echter een eis voor veel gebruikers, en browserontwikkelaars lijken zich dan ook niet veel aan te trekken van de bezwaren van de W3C. Zowel in Firefox als in Safari kunnen video’s fullscreen worden getoond. Gebruikers van Chrome en Opera kunnen een extensie gebruiken om fullscreen video te kunnen bekijken.
4.6
Opnames en randapparatuur
Voor toepassingen zoals videoconferencing is het van belang dat webapplicaties toegang hebben tot de webcam en microfoon van de gebruiker. In Flash en Silverlight is het inderdaad mogelijk om applicaties toegang te geven tot webcam en microfoon. Voor HTML5–applicaties is dit nog niet het geval. Er wordt echter gewerkt om toegang tot webcam en microfoon (en zelfs randapparatuur in het algemeen) te regelen in de HTML5-standaard. De W3C stelt een <device>–tag voor waarmee een webpagina kan aangeven toegang te willen tot een bepaald randapparaat. De bedoeling is dat de browser de mogelijkheid geeft om de gebruiker het apparaat te laten selecteren, en dat vervolgens, als de gebruiker toestemming geeft, de webpagina direct het apparaat kan aansturen en bijvoorbeeld een videostream kan doorsturen naar een server (bijvoorbeeld via een websocket). Deze feature is nog niet in browsers beschikbaar. Google heeft wel aangekondigd het in Chrome te zullen implementeren.
24
4.7
Overzicht van de ondersteuning
In onderstaande tabel is de ondersteuning van de verschillende features samengevat HTML5 Flash
IE9
Ondertitels
×
×
Websockets
×
DRM
Chrome 8
Safari 5
Opera 10
×
4
×
4
×
4
×
–
–
5
×
×
–
×
–
–
–
×
–
HTML5 canvas
–
×
×
×
×
×
Fullscreen video
×
–
–
–
×
–
–
6
–
–
Webcam/microfoon
×
4
Firefox 4
–
–
4
5
Het is duidelijk dat veel van de geavanceerde mogelijkheden op dit moment nog niet in alle browsers zijn geïmplementeerd.
4.8 – – – – – –
Bronnen
Ondertitels: http://blog.gingertech.net/2008/12/12/attaching–subtitles–to–html5–video/ Ondertitels: http://www.w3.org/WAI/PF/HTML/wiki/Media_TextAssociations Ondertitels: http://blog.gingertech.net/wp– content/uploads/2010/10/WebDirSouth2010/index.html – slide1 Ondertitels: http://www.annodex.net/~silvia/itext/elephant_no_skin.html Ondertitels: http://www.whatwg.org/specs/web-apps/current-work/multipage/video.html Ondertitels: http://www.whatwg.org/specs/web-apps/current-work/webvtt.html
– – – – –
Websockets: http://www.websockets.org/ Websockets: http://tools.ietf.org/html/draft–ietf–hybi–thewebsocketprotocol–03 Websockets: http://www.w3.org/TR/2008/WD–html5–20080122/ – broadcast DRM: http://www.w3.org/Bugs/Public/show_bug.cgi?id=10902]. DRM voor Dynamic streaming: http://developer.apple.com/library/ios/ – documentation/NetworkingInternet/Conceptual/StreamingMediaGuide/UsinghttpLiveStrea ming/UsinghttpLiveStreaming.html
–
Randapparatuur <device>–tag: http://www.whatwg.org/specs/web–apps/current– work/complete/commands.html – devices Randapparatuur in Chrome: http://www.youtube.com/watch?v=tC3– NpIGx1U&feature=related]
–
–
WebSockets: http://cometdaily.com/2010/11/04/state–of–websocket–support/
4
Via Javascript Wel geïmplementeerd, maar i.v.m. beveilingsproblemen voorlopig niet beschikbaar (http://hacks.mozilla.org/2010/12/websockets-disabled-in-firefox-4/) 6 Wel aangekondigd voor latere versies 5
25
5
Ondersteuning aan de serverkant
Zoals in Hoofdstuk 3 duidelijk is geworden, zijn er wat betreft browser–ondersteuning nog behoorlijke hindernissen voor de adoptie van HTML5 Video. Ook over de server–kant is een en ander te zeggen. Onder server–kant verstaan wordt hier verstaan: alle systemen die worden gebruikt om video’s op het web te kunnen aanbieden, zoals webservers, streaming video servers, video encoders en transcoders. Dit is dus een wat breder begrip dan alleen de webservers die nodig zijn om de video uiteindelijk naar de gebruikers te sturen. Tevens komen in dit hoofdstuk een aantal zaken aan de orde die te maken hebben met de manier waarop de video bij de eindgebruiker wordt afgeleverd. Daarbij gaat het bijvoorbeeld over de verschillende protocollen die worden gebruikt bij de aflevering van video, en manieren waarop ervoor wordt gezorgd dat videostreams zo soepel mogelijk afspelen. Dit hoofdstuk is als volgt opgebouwd: allereerst wordt de manier waarop video wordt afgeleverd bij de browser bekeken. Daarbij wordt een onderscheid gemaakt tussen on– demand content en live streaming content, en wordt voor elk bekeken wat de impact is van de verschillende distributiemethoden op het gebruik van de video in HTML5. Daarna komen een aantal veelgebruikte media encoders en streamers aan de orde, en tenslotte wordt aan aantal aanvullende technieken voor de aflevering van video behandelt.
5.1
Distributie van video op het web
Er zijn verschillende manieren waarop video’s op het web geplaatst kunnen worden. We maken wat dat betreft allereerst een onderscheid tussen live video en on–demand content. Bij live video gaat het vaak om televisie–achtige toepassingen zoals de uitzending van live– events of het streamen van real–time video’s. Bij on–demand video gaat het juist om opgeslagen video’s die door de gebruiker worden bekeken op het moment dat het hem het beste uitkomt. Zowel bij live als bij on–demand video zijn diverse manieren voor transport van de videostream in gebruik. De technieken overlappen gedeeltelijk, maar er zijn een aantal essentiële verschillen. Bij live video wordt vaker gebruik gemaakt van technieken om de video bij grote hoeveelheden gebruikers tegelijk vloeiend te laten aankomen, door bijvoorbeeld de kwaliteit van de video automatisch aan te passen aan de kwaliteit van de verbinding of de beschikbare bandbreedte. Bij on–demand content daarentegen liggen de problemen meer in het beheer van de grote hoeveelheden videobestanden. Bovendien zal niet iedereen tegelijk beginnen met het afspelen van de video, en zal dus in principe elke gebruiker individueel bediend moeten worden. Daardoor liggen de problemen vaak meer op het gebied van het snel door de video spoelen.
5.2
Distributie van on–demand video
Standaard http De allereenvoudigste manier om statische on–demand content te distribueren, is door gebruik te maken van videobestanden die via standaard http kunnen worden gedownload. Omdat elke gebruiker op individuele basis moet worden bediend, kan het videobestand simpelweg op de webserver worden geplaatst zoals elk ander bestand, en wordt via http aan de client aangeboden, die het kan downloaden zoals elk ander bestand. Hierbij maakt het voor de server geen enkel verschil of de video in de client door een Flash–speler, een andere browser–plug–in, of door een HTML5–compatible browser wordt afgespeeld; het is verder aan de browser of de browser plug–in om te zorgen dat de video netjes in de browser aan de
26
gebruiker wordt getoond. Wat dit betreft zijn er voor HTML5 video in de webserver dus geen aanpassingen nodig. Deze gang van zaken heeft echter een groot nadeel voor de gebruiker. Hij kan de video slechts van het begin af aan afspelen, en hij kan pas naar een positie later in de video doorspoelen op het moment dat de video tot dat punt is gedownload. In sommige gevallen en bij sommige videoformaten staat er zelfs essentiële meta–informatie aan het einde van het videobestand, waardoor het afspelen helemaal niet kan beginnen voordat de hele video is gedownload. Streaming–videoservers Een oplossing hiervoor is in het verleden gevonden door gebruik te maken van streaming video servers (zoals bijvoorbeeld Flash Media Server). Zulke servers interpreteren zelf de videoformaten en houden een index bij van welke positie in het videobestand bij welke tijd van de video hoort. Door bovendien continue 2–weg–communicatie in te bouwen in het protocol (bijvoorbeeld door een alternatief protocol dan http te gebruiken) in de verbinding met de client (bijvoorbeeld RTMP in het geval van Flash Media Server), kan de client aan de server doorgeven welk deel van de video hij wil ontvangen. Als de gebruiker dan aangeeft bij een bepaalde positie in de video te willen beginnen met spelen, kan de server direct het relevante deel van de video naar de client versturen. Met een simpele http-download is dit niet zonder meer mogelijk. Het nadeel van deze methode is dat er een aparte server nodig is speciaal voor de video’s, en dat de alternatieve protocollen die hiervoor worden gebruikt, niet altijd door firewalls worden doorgelaten. http–pseudo–streaming Als alternatief is al enige jaren het zogenaamde http–pseudo–streaming in gebruik. Bij http– pseudo–streaming wordt er bovenop de http-webserver een klein stukje software toegevoegd (bijvoorbeeld een PHP–script of een Apache-module) dat de index uit de video kan interpreteren. De client kan vervolgens via een http GET request een bepaalde positie opvragen in de video, waarna de pseudo–streaming–module wederom het correcte deel van de video kan serveren. Het nadeel van deze pseudo–streaming is niet alleen dat je het extra stukje software aan de serverkant moet toevoegen, maar ook dat er speciale ondersteuning in de client nodig is. Een voorbeeld van een applicatie die dit ondersteunt is jwplayer (zie http:// www.longtailvideo.com/players/jw-flv-player/). Range requests Voor HTML5 Video is de support voor het afspelen van video in de browser ingebouwd, en wordt er een variant op http-pseudo-streaming gebruikt. Er wordt gebruikt gemaakt van een bestaande http-feature, waarmee de client de mogelijkheid krijgt een specifiek deel van een bestand op de server op te vragen, de zogenaamde Range–request. De browser moet echter nog wel zien uit te vinden welke byte–range er bij welke tijdcode in de video hoort, zodat hij kan bepalen welk deel van het videobestand hij moet opvragen om bijvoorbeeld op positie 6m30s te kunnen starten met afspelen. Deze informatie haalt de browser uit de meta–informatie die zich aan het begin of het einde van het videobestand bevindt. Daartoe haalt de browser eerst het begin van het videobestand op. Als daar geen meta–informatie staat, haalt hij het einde van het bestand binnen en gebruikt de metadata daar. Vervolgens kan de browser bepalen waar hij moet beginnen met lezen, en, al naar gelang wat de gebruiker aangeeft, kan hij beginnen met spelen aan het begin van de video of op een punt dat door de gebruiker is aangegeven, door alleen het relevante deel van het videobestand op te vragen bij de server. Overigens is de ondersteuning voor deze methode erg afhankelijk van browser en videoformaat. Zo werken range requests voor Chrome 8 alleen voor WebM– en MP4–
27
formaten, terwijl ze voor Firefox 3 juist wel voor Ogg werken, voor Safari alleen voor MP4, en voor IE9 helemaal niet.
Distributie van live video In het geval van live streaming video ligt de situatie iets anders dan voor on–demand content. In het geval van live streaming wordt de video real–time opgebouwd en (tegelijk) aan verschillende clients verstuurd, die op hun beurt de video real–time weergeven Het seeking–probleem dat bij on–demand content een grote rolt speelt, is hier niet van belang. Immers, de video komt real–time binnen en er is geen mogelijkheid om vooruit te spoelen. Bij live streaming is het veel belangrijker om een stabiele videostream aan te kunnen bieden aan grote hoeveelheden gebruikers. Een van de consequenties van deze invalshoek, is dat live streaming video vaak over UDP wordt aangeboden, waar traditionele on–demand video content juist over http (en dus TCP) wordt afgehandeld. Het gebruik van TCP heeft als voornaamste voordeel dat het vrijwel gegarandeerd is dat een pakket aankomt. De manier waarop dit is geïmplementeerd — de client moet opnieuw om een pakketje vragen als blijkt dat hij er een mist — maakt deze manier van het versturen van data echter minder geschikt voor live streaming; niet alleen geeft het bijhouden van welke pakketjes wel en niet zijn ontvangen en vragen om herhaling van die pakketten bij de server nogal een overhead, het geeft ook een te grote vertraging, met name als de verbinding traag is. In het geval van streaming media is het voor de prestaties vaak beter een missend pakket maar gewoon over te slaan (en als een consequentie daarvan bijvoorbeeld een frame weg te laten in de uitvoer) dan om op dat missende pakket te gaan wachten en in de tussentijd de video stop te zetten. Overigens worden in de praktijk soms deze nadelen van TCP voor lief genomen, en wordt gekozen voor distributie van live streaming video over http, bijvoorbeeld omdat http-video’s niet zo snel tegen zullen worden gehouden door firewalls. Protocollen Op het moment zijn er verschillende transportprotocollen voor streaming video in gebruik. De belangrijkste zijn RTP/RTSP (onder meer in gebruik door Silverlight en QuickTime), RTMP (in gebruik door Flash), en, ondanks bovengenoemde bezwaren, standaard http. RTP/RTSP (Real–time Transport Protocol/Real Time Streaming Protocol) is een open standaard [RFC2326,RFC3350] voor het transporteren van streaming video en audio. Via RTSP worden beheercommando’s verstuurd tussen de server en de client; over dit kanaal kan de client een video aanvragen, kan hij om een stream met een hogere of lagere kwaliteit vragen, en wordt er informatie over de kwaliteit van de ontvangst teruggestuurd naar de 7 server. De daadwerkelijke content wordt via RTP (over UDP ) afgeleverd. Dit streaming protocol wordt onder meer ondersteund door QuickTime, Real Media, en Microsoft Silverlight. Huidige HTML5–browsers ondersteunen geen RTP/RTSP–streams. Voor enkele browsers wordt er echter aan gewerkt om dit wel te ondersteunen. Bijvoorbeeld in bètaversies van Chrome lijkt rudimentaire ondersteuning van RTP-streams voor HTML5 Video elementen aanwezig. Het is te verwachten dat ook Firefox dit zal gaan ondersteunen. In hoeverre Microsoft en Apple dit zullen doen is op dit moment onduidelijk, omdat die inzetten op een andere techniek voor live streaming in HTML5 (zie hieronder). RTMP (Real Time Messaging Protocol) is een gesloten protocol dat oorspronkelijk ontwikkeld is door Macromedia (nu Adobe) voor gebruik met de Flash plug–in. Adobe heeft in 2009 een specificatie van RTMP vrijgegeven. RTMP kent verschillende uitbreidingen, waaronder een
7
TCP is in principe ook mogelijk, maar in de praktijk wordt meestal UDP gebruikt. 28
variant (RTMPT) voor het verpakken van RTMP in http (omdat standaard RTMP vaak door firewalls wordt tegengehouden), en een variant waarbij de video versleuteld wordt verstuurd (RTMPE). RTMP wordt op het moment voornamelijk gebruikt voor Flash–players, en wordt aan de serverkant ondersteund door Flash Media Server en Wowza. Er is op dit moment geen ondersteuning van HTML5-browsers voor RTMP, en er zijn geen signalen dat eraan wordt gewerkt. Voorlopig zijn RTMP–streams dus onbruikbaar voor HTML5 Video. De derde manier voor transport van live video is http Dynamic Streaming. Bij deze variant, die zowel voor live video streams als voor on–demand video geschikt is, wordt de video in kleine stukjes van 3–10 seconden opgedeeld, die stuk voor stuk aan de client worden toegezonden. De client is vervolgens ervoor verantwoordelijk om de losse stukjes video naadloos aan elkaar te plakken en de video in een geheel aan de gebruiker te tonen. Als bijkomend voordeel kan er op relatief eenvoudige wijze dynamisch bitrate control worden bereikt. Zie ook hieronder in paragraaf 5.4. Helaas zijn er drie verschillende versies van deze techniek in gebruik, ontwikkeld door Microsoft, Adobe, en Apple: •
•
•
Microsoft IIS Smooth Streaming In dit geval worden de stukjes video in een MP4 container (H.264 video en AAC audio) opgeslagen op de server. Als de client een bepaald stukje video opvraagt zorgt een extra module in de server ervoor dat het correct stukje video uit het MP4– bestand wordt opgezocht, en dat stukje naar de client wordt verstuurd. De benodigde ondersteuning in de server is alleen nog beschikbaar in Microsoft IIS, en aan de browser–kant wordt alleen nog Microsoft Silverlight ondersteund. Adobe http Dynamic Streaming Adobe slaat de individuele stukjes video op in losse F4F–bestanden, waarvan het formaat is afgeleid van MP4. Daarnaast zijn er aparte bestanden nodig met metadata (F4M) en met indexinformatie (F4X). De client download in eerste instantie de metadata in het F4M–bestand, en besluit op basis daarvan welke F4F–bestanden er bij de server zullen worden opgevraagd. Ook hier is in de server een extra module nodig om de indexdata in he F4X–bestand te interpreteren. Aan de browserkant werkt dit nog alleen voor Flash plug–ins. Apple http Live Streaming In Apple’s variant van http Live Streaming wordt elk stukje video opgeslagen in een aparte MPEG–TS container op de server. Daarnaast is er een playlist nodig in de vorm van een M3U8–bestand dat in tekstvorm specificeert welk fragment welk deel van de video bevat. De client vraagt het M3U8–bestand op, en kan op basis daarvan direct bepalen welke stukjes video er moeten worden gedownload. Er is geen aparte ondersteuning nodig aan de serverkant. Aan de clientkant wordt dit protocol ondersteund door Apple iOS3 (dus, recente iPhones en iPads) en door de Safari– browser. Ook bij de ontwikkelaars van andere browsers is er interesse om dit formaat te ondersteunen.
Apple heeft haar versie van http Dynamic Streaming ingediend als Internet Standaard bij de IETF. Bovendien is de versie van Apple aan de serverkant het gemakkelijkst op te zetten, en heeft Apple een behoorlijke userbase met alle iPhone– en iPadgebruikers. Het protocol ondersteunt bovendien ook een vorm van DRM (zie Hoofstuk 4.3). De kans is daarom groot dat Apple’s versie van http Dynamic Streaming de nieuwe de facto standaard gaat worden voor streaming video op het web. De implementatie van Apple http Live Streaming is uitermate geschikt voor HTML5 Video. Sterker nog, de websites die deze techniek gebruiken (onder meer Apple zelf, maar ook
29
Netflix en Akamai) serveren nu al op deze manier video’s aan hun klanten via een HTML5– webpagina met een –tag.
5.3
Backend–ondersteuning voor HTML5–compatible formaten
Nu we gezien hebben op welke manieren de video bij de gebruikers kan worden afgeleverd, wordt het tijd om te kijken naar hoe de videostreams kunnen worden gegenereerd, en welke pakketten er beschikbaar zijn om HTML5–compatibele video’s te streamen. In het algemeen zal de video al beschikbaar zijn in een digitaal formaat. Dat kan zijn als DV output van een videocamera, als stream vanaf een televisiesatelliet, of een MPEG–2 bestand dat is geüpload door een gebruiker. Voordat deze content in een HTML5 -tag kan worden gebruikt, zal deze moeten worden omgezet naar een formaat en codec die door de browser wordt ondersteund. Zoals we in Hoofdstuk 3 hebben uitgelegd, zijn de belangrijkst drie videoformaten die te gebruiken zijn met HTML5 video: – – –
een WebM container met VP8 video en Vorbis audio; een MP4 container met H.264 video en AAC audio; een Ogg container met Theora video en Vorbis audio.
Omdat niet alle webbrowsers alle formaten en codecs ondersteunen, is het van belang dat de server of video-backend die de video aanbiedt, ondersteuning biedt voor verschillende formaten, zodat alle browsers kunnen worden bediend. In deze sectie behandelen we verschillende, veel gebruikte video-servers en -backends, en kijken we welke van bovengenoemde formaten worden ondersteund. Merk op dat deze lijst zowel programmatuur omvat die slechts video kan encoden of transcoden, programmatuur die alleen kant en klare bestanden over het netwerk kan streamen zonder het formaat aan te passen, en software die beide kan. De hier behandelde programmatuur is slechts een deel van de beschikbare pakketten. Met name op het gebied van encoders/transcoders is het aanbod groot, en zijn er vele (gratis) programma’s te vinden die de diverse formaten kunnen genereren.
FFmpeg (alleen encoding) FFMpeg is een veelgebruikte open source tool voor het converteren en transcoderen van video. Het biedt veelzijdige libraries voor het decoderen en encoderen van diverse audio– en videoformaten en kan vele containerformaten lezen en schrijven. Het is beschikbaar voor diverse platformen, waaronder Windows, OSX, en Linux, en wordt als backend gebruikt in een aantal mediaservers, waaronder MediaMosa. FFmpeg heeft al lange tijd ondersteuning voor H.264-video, AAC-audio en de MP4-container, en voor Theora-video, Vorbis-audio en de Ogg-container. Ondersteuning voor WebM– containers en VP8-video (zowel decoding als encoding) is er vanaf versie 0.6. FFmpeg heeft geen ondersteuning voor het streamen van video; het is alleen bedoeld voor het omzetten van de video naar andere formaten.
Handbrake Handbrake is een veelgebruikte open-source video transcoder, die zich met name richt op het encoden van verschillende varianten van H.264-video. Ook Theora-video wordt ondersteund, maar niet in een Ogg-container. Ook WebM wordt niet ondersteund. Handbrake is met name sterk op het gebied van encoden voor mobiele devices; het heeft bijvoorbeeld voorgedefinieerde instellingen voor iPhone en iPod.
30
Handbrake is beschikbaar voor Windows, OSX en Linux.
FFmpeg2theora FFmpeg2theora is een eenvoudig programma om Ogg-formaat video te encoderen. Het is beschikbaar voor Windows, OSX, en Linux.
GStreamer (encoding en streaming) GStreamer is een multimedia framewerk dat geschikt is voor het openen, transcoderen, en filteren van audio– en videobestanden. Het wordt daarom veel gebruikt als media–backend voor content–delivery netwerken. GStreamer ondersteunt al geruime tijd AAC- en Vorbis-audio, H.264- en Theora-video, en MP4- en Ogg-containers. Sinds juni 2010 worden ook WebM en VP8 ondersteund. GStreamer heeft bovendien ook outputmodules voor diverse streamtypes, waaronder http (via icecast), RTSP/RTP, en RTMP voor alle beschikbaar videoformaten.
Flumotion (encoding en streaming) Flumotion is een open source platform voor online streaming van video dat wordt ontwikkeld door Fluendo. Er is een open source versie en een commerciële versie beschikbaar; het grootste verschil tussen beide versie ligt in de meegeleverde codecs. Flumotion gebruikt GStreamer als backend, en ondersteunt daarom net als GStreamer alle drie de veelgebruikte formaten. Bij de open source versie worden vanwege verplichte royalty’s echter geen H.264- en AAC-codecs meegeleverd. WebM en VP8 worden ondersteund sinds versie 0.8 in zowel de open source als de commerciële versie. In de commerciële versie wordt alleen http–streaming ondersteund. De open source versie kan ook streamen over RTSP/RTP.
Microsoft Expression Encoder & Windows Media Services (encoding en streaming) Windows Media Services is een server voor streaming van audio en video. Het wordt ontwikkeld door Microsoft, en is gratis beschikbaar bij Windows Server 2008. Expression Encoder is Microsoft’s oplossing voor het coderen van video. Expression Encoder ondersteunt, naast Windows Media formaten, ook H.264-video en AACaudio. Vorbis-audio, Theora-video, en VP8-video worden niet ondersteund. De output van de Expression Encoder kan via Windows Media Services worden gestreamed via Microsoft’s variant van http dynamic streaming (naar Silverlight clients).
QuickTime Pro & QuickTime streaming server/Darwin Streaming Server (encoding en streaming) Quicktime Pro is een video editor en encoder voor OSX (en is tevens beschikbaar voor Windows). QuickTime Streaming Server is een streaming server voor OSX, en is gratis beschikbaar bij de Server editie van OSX. Darwin Streaming Server is de open source variant van de QuickTime Streaming Server. QuickTime Streaming Server is alleen beschikbaar voor OSX, maar Darwin Streaming Server werkt ook op Windows en Linux. QuickTime Pro ondersteunt encoding in diverse videoformaten, maar van de drie veelgebruikte formaten voor HTML5, is alleen H.264-video met AAC-audio beschikbaar. De resulterende MP4–stream kan via QuickTime streaming server en Darwin Streaming Server worden gedistribueerd. Streaming is ook mogelijk via RTSP/RTP.
31
Flash Media Live Encoder & Flash Media Server (encoding en streaming) Flash Media Live Encoder is Adobe’s oplossing voor het coderen van (live) video, en is beschikbaar op Windows en OSX. De resulterende video kan via Flash Media Server worden gedistribueerd. De combinatie is vooral gericht op clients met een Flash–plug–in. Het ondersteunt op dit moment alleen H.264 en AAC, en geen Theora, VP8, en Vorbis, en geen Ogg- en WebM-containers. Streaming wordt ondersteund via RTMP en via Adobes variant van http Live Streaming..
Red5 (alleen streaming) Red5 is een open source Flash server die ook Flash video kan streamen. Red5 ondersteunt op dit moment geen Theora– of VP8–video of Vorbis-audio, maar alleen H.264-video en AAC-audio. Streaming is alleen mogelijk over RTMP.
Real/Helix Universal Server (alleen streaming) Helix Universal Server is een streaming server die wordt ontwikkeld door RealNetworks. Het is beschikbaar voor Windows en Linux. Helix Universal Server ondersteunt alleen H.264-video en AAC-audio in MP4 containers. Het ondersteunt live streaming voor RTSP/RTP en RTMP. Bovendien is er ondersteuning voor Apple http Live streaming.e
Icecast (alleen streaming) Icecast is een streaming media server die zich oorspronkelijk vooral op audio richtte. Tegenwoordig ondersteunen ze echter ook Theora video in Ogg containers. H.264- en Theora-video, AAC-audio, en MP4- en WebM–containers worden niet ondersteund. Streaming gebeurt alleen via http.
Wowza (alleen streaming) Wowza Media Server is een streaming server die zich vooral richt op H.264–content. Het is beschikbaar voor Windows, OSX, en Linux. Wowza ondersteunt alleen H.264-video en AAC-audio in een MP4-container. Het kan die MP4 wel streamen via RTSP/RTP, RTMP, en http, en ondersteunt ook de Apple en Microsoft varianten van http Live Streaming. Er is geen ondersteuning voor WebM– en Ogg– containers, Theora– en VP8–video en Vorbis-audio.
32
Overzicht Onderstaande tabel geeft een overzicht van de ondersteuning van veelgebruikte videoformaten voor HTML5, alsmede ondersteuning voor streaming over verschillende protocollen. Merk op dat in deze tabel transcoders en streamers zijn gecombineerd; een leeg, wit vakje geeft aan dat dat het product niet geschikt is voor streaming of transcoding. Een “–” geeft aan dat de applicatie in principe wel streaming of transcoding ondersteunt, maar niet voor dit formaat. Transport via:
Encode als: Ogg/Vorbis/ Theora
Mp4/H.264/ AAC
WebM/VP8/ Vorbis
FFmpeg
×
×
(Vanaf versie 0.6)
Handbrake
–
×
–
ffmpeg2theora
×
–
–
Gstreamer
×
×
Flumotion
×
Microsoft Expression Encoder & Windows Media Services
http
RTSP/RTP
RTMP
×
–
× (niet in commerciele versie)
–
–
–
×
×
×
(Sinds juni 2010)
(Ogg via icecast)
× (alleen in commerciële versie)
×
×
–
×
–
QuickTime pro & QuickTime/Darwin Streaming Server
–
×
–
Flash Media Live Encoder & Flash Media Server
–
×
–
Red5
Helix Universal Server
(alleen MP4) ×
×
(alleen MP4)
(alleen MP4)
× (alleen MP4)
×
×
–
×
×
×
(alleen MP4)
(alleen MP4)
(alleen MP4)
–
–
×
×
×
(alleen MP4)
(alleen MP4)
(alleen MP4)
(alleen ogm)
Wowza
–
–
–
×
Icecast
5.4
×
(alleen MP4)
Overigen
Dynamische kwaliteitsbeheersing Dynamische kwaliteitsbeheersing houdt in dat wanneer een video wordt afgespeeld, de client en de server onderling bepalen wat de hoogste bandbreedte is die geleverd kan worden en
33
automatisch de kwaliteit van de videostream daarop aanpassen. In de praktijk heeft de server vaak een videobestand op enkele verschillende bitrates en groottes beschikbaar, en kan de client bepalen wat de beste kwaliteit is die hij aankan. Dergelijke automatische aanpassingen vergen traditioneel een dialoog tussen client en server, en is traditioneel geïmplementeerd in een browser plug–in en een streaming server component. Voor de huidige implementatie van HTML5 is er eigenlijk maar één manier waarom dynamische kwaliteitsbeheersing is geïmplementeerd: door middel van http Dynamic Streaming op Apple-platformen. Zoals eerder beschreven, wordt bij Apple’s versie van http Dynamic Streaming de video in segmenten van 5 à 10 seconden opgeknipt, en vraagt de browser die segmenten één voor één op bij de server. Het is echter mogelijk om elk segment in aan aantal verschillende kwaliteiten (en dus groottes) aan te bieden, zodat de browser voor elk segment de optimale kwaliteit kan selecteren die nog net binnen de beschikbare bandbreedte past. Deze manier van dynamische kwaliteitsbeheersing werkt goed, er is geen extra communicatie nodig tussen de browser en de server, en er is in de server geen speciale ondersteuning nodig, anders dan de beschikbaarheid van de video in verschillende kwaliteiten. Zoals hierboven beschreven is deze manier van video spelen op dit moment echter alleen beschikbaar in Apple devices (iOS3) en in Safari 5.
IPv6 IPv6 is de meest recente versie van het Internet Protocol, en is ontworpen om IPv4 te vervangen, dat de afgelopen 30 jaar het onderliggende transportprotocol van het Internet is geweest. De belangrijkste reden om over te schakelen van IPv4 op IPv6 is het dreigende gebrek aan adressen in de IPv4-adresruimte: IPv4biedt slechts een adresruimte voor 4 34 miljard computers, terwijl dat aantal in IPv6 in de orde van 10 is. Voor HTML5 Video is de invoering van IPv6 eigenlijk geen issue. Alle moderne browsers ondersteunen IPv6, en er is geen reden om aan te nemen dat IPv6–ondersteuning voor het specifiek –element een probleem zal zijn.
Multicast Multicast is een transport–techniek op IP–niveau waarbij een enkele datastream naar een grote hoeveelheid eindpunten op het internet kan worden verstuurd, zonder dat de zendende partij de data naar elk eindpunt apart hoeft te versturen. De zender stuurt de stream dus slechts één maal, terwijl die toch door vele verschillende gebruikers kan worden ontvangen. Dit in tegenstelling tot de gebruikelijk unicast, waarbij de server met elke client individueel contact heeft. In het geval van live video heeft multicast duidelijke voordelen, met name op het gebied van bandbreedteverbruik: een server kan via multicast in principe miljoenen clients bedienen, terwijl hij maar de bandbreedte gebruikt die nodig is voor een enkele videostream. Een belangrijke voorwaarde is wel dat de videostream over UDP wordt gedistribueerd (bijvoorbeeld via RTSP/RTP). Het probleem is echter dat er maar weinig internetproviders zijn die multicast op IPv4 ondersteunen. Door die gebrekkige ondersteuning is het distribueren van video via multicast op dit moment vrijwel niet haalbaar. Binnen het IPv6 protocol heeft multicast een prominentere plaats gekregen, en de hoop is dat na grootschalige uitrol van IPv6, die in de komende jaren moet gaan plaatsvinden, multicast voor mediastreams meer gebruikt kan gaan worden.
34
Multicast stream zijn niet gemakkelijk in een HTML5 video-tag te gebruiken. De meeste bestanden voor HTML5 Video zullen over http worden gedistribueerd, en omdat dat op TCP is gebaseerd, is multicast daarvoor sowieso niet mogelijk. Browsers die RTSP/RTP–streams kunnen spelen in HTML5–video, kunnen in principe wel gebruik maken van multicast om de mediastream te ontvangen. Momenteel zijn er echter nog geen browsers die dat kunnen.
5.5 – – – –
– –
– – – – – – – – – – – – – –
Bronnen Adaptive http Streaming: http://blog.gingertech.net/2010/10/09/adaptive-http-streamingfor-open-codecs/ RTSP voor Chrome: http://code.google.com/p/chromium/issues/detail?id=25573 Microsoft IIS Smooth Streaming: http://learn.iis.net/page.aspx/626/smooth–streaming– technical–overview/ Microsoft IIS Smooth Streaming: http://www.microsoft.com/downloads/en/details.aspx?displaylang=en&FamilyID=03d225 83–3ed6–44da–8464–b1b4b5ca7520]; Adobe http Dynamic Streaming [http://www.adobe.com/products/httpdynamicstreaming/ Apple http Live Streaming: http://www.appleinsider.com/articles/09/07/08/apple_launches_http_live_streaming_stan dard_in_iphone_3_0.html Apple http Live Streaming: http://tools.ietf.org/html/draft–pantos–http–live–streaming–01 Vergelijking van Media streamers: http://en.wikipedia.org/wiki/Comparison_of_streaming_media_systems FFmpeg: http://www.ffmpeg.org/ VLC: http://www.videolan.org/vlc/ Gstreamer: http://www.gstreamer.net/ Flumotion: http://www.flumotion.net/ Flendo: http://www.fluendo.com/ Windows Media Services: http://www.microsoft.com/windows/windowsmedia/forpros/server/server.aspx QuickTime: http://docs.info.apple.com/article.html?artnum=120145 Flash Media Server: http://www.adobe.com/products/flashmediaserver/ Red5: http://osflash.org/red5 Helix Universal Server: http://www.realnetworks.com/products-services/helix-serverproxy.aspx Icecast: http://www.icecast.org/ Wowza: http://www.wowzamedia.com/
35
6
Conclusie
In deze technologieverkenning is inzicht gegeven in het gebruik van video in webbrowsers. De -tag in HTML5 is een nieuwe manier om video in een webpagina in te sluiten. Door gebruik te maken van deze technologie is het gebruik van video in webbrowsers vereenvoudigd. Het is mogelijk geworden video af te spelen zonder hulp van een plug–in in een -tag. Hierdoor zijn er theoretisch geen beperkingen meer in het gebruik van een videoformaat, container of codec. Waar eerst de plug–in verantwoordelijk was voor het correct afspelen van een video is met deze nieuwe technologie de webbrowser verantwoordelijk geworden. Door de verscheidenheid aan webbrowsers op diverse afspeelapparaten, zoals PC’s, laptops en mobiele apparaten, is er ook een diversiteit aan implementaties van de functionaliteit van de -tag. Niet iedere browser ondersteunt alle videoformaten. De drie audio en videoformaten die gebruikt worden zijn: 1. Een MP4 container met H.264 video en AAC audio; 2. Een Ogg container met Theora video en Vorbis audio; 3. WebM, een WebM-container met VP8 video en Vorbis audio. Uit dit onderzoek is gebleken dat er meerdere varianten van deze formaten gebruikt moeten worden om de video met gebruik van HTML5 op alle apparaten af te laten spelen. De combinatie van MP4 en Ogg of de combinatie van MP4 en WebM is toereikend. Aangezien de video-codec die bij WebM wordt gebruikt, VP8, moderner is en dus potentieel beter compressie toestaat, ligt het voor de hand voor WebM te kiezen. Merk echter wel op dat de huidige versie van Firefox, 3.6, nog geen WebM ondersteunt; die ondersteuning komt beschikbaar in versie 4, die in 2011 zal verschijnen. De -tag voorziet in een mechanisme om meerdere videoformaten aan één tag te koppelen. Daardoor zijn alle afspeelapparaten te bedienen met één stuk code. De HTML5 -tag is een nieuwe technologie die uiteindelijk moet concurreren met al bestaande methoden om video af te spelen zoals QuickTime, Silverlight (Windows Media) en Flash. Flash is op dit moment het meest verspreid en biedt een aantal geavanceerde functionaliteiten die (nog) niet in HTML5 ondersteund worden. In dit onderzoek is gekeken naar onder andere Digital Rights Management (DRM) en het kunnen afspelen van een video in een volledig scherm. Juist op deze twee terreinen is er voor HTML5 niet één generieke oplossing die wel in Flash voorhanden is. Dit zal een reden zijn om in de nabije toekomst toch Flash te blijven gebruiken. We verwachten echter dat vroeg of laat ook de deze geavanceerde video functionaliteiten in HTML5 ondersteund zullen worden. Door gebruik te maken van HTML5 zijn er ook geavanceerde functionaliteiten die juist weer makkelijker toe te voegen zijn. Dit heeft te maken met het feit dat de -tag onderdeel van de webpagina is, waardoor deze aangestuurd kan worden met Javascript en CSS. Hierdoor is het eenvoudig geworden om vanuit de webpagina bijvoorbeeld ondertiteling bij een video toe te voegen en aan te sturen. Ook kan de video bewerkt worden in een -tag om beeldbewerking mogelijk te maken. Omdat HTML5 onderdeel van een webpagina is, is ook de streaming technologie vereenvoudigd. Aan de serverkant is niet veel technologie nodig om een video in de browser te tonen. Omdat streaming over http gaat, is een video net zo te behandelen als een HTMLpagina of een image en kan de video vanaf een webserver geserveerd worden. Voor gebruik van geavanceerde streaming technieken worden door bestaande plug–ins andere protocollen gebruikt, zoals RTSP, MMS en RTMP. Deze protocollen voorzien in functionaliteiten zoals bandbreedte onderhandeling tussen server en plug–in. Ook maken deze protocollen het makkelijk om vooruit en achteruit te spoelen in een video. Vooruit en
36
achteruit spoelen is ook beschikbaar in HTML5, andere geavanceerde server functionaliteit zijn er (nog) niet. In deze verkenning zijn een aantal video servers onderzocht die in meer of mindere mate ondersteuning bieden voor streaming van HTML5 video. Hieruit is gebleken dat alleen het Flumotion open source platform geschikt is om die drie belangrijke formaten voor HTML5 te streamen.
6.1
Uitkomsten
In de inleiding is een aantal doelen vastgesteld voor deze technologieverkenning. Uit de informatie in de voorgaande hoofdstukken kunnen de volgende antwoorden op de daar gestelde vragen worden geformuleerd: –
Is het gebruik van op HTML5 gebaseerde video nuttig voor de videodiensten van SURFnet, van Kennisnet en van de Nederlandse onderwijsinstellingen?
Zoals in dit rapport naar voren is gekomen, biedt HTML5 Video vele nieuwe mogelijkheden, met name op het gebied van integratie van de video met de rest van de webpagina. Bovendien zijn voor het afspelen van HTML5 Video geen losse plugins meer nodig. Deze twee zaken maken dat HTML5 Video zeer nuttig kan worden voor gebruik in de videodiensten van SURFnet, van Kennisnet en van de Nederlandse onderwijsinstellingen. Een nadeel van HTML5 Video is echter dat er op dit moment geen enkel formaat is dat in alle browsers kan worden afgespeeld, en er dus altijd minimaal twee versies van elke video zullen moeten worden aangeboden. De verwachting is dat op de langere termijn HTML5 Video de standaardmanier zal worden waarmee video in webpagina’s worden opgenomen. Dit zal echter nog wel enige jaren duren. –
Zouden SURFnet, Kennisnet, en hun directe doelgroepen het open WebM videoformaat moeten ondersteunen?
Omdat de specificatie van WebM volledig open is en omdat geen licentiekosten hoeven te worden betaald, is WebM een zeer aantrekkelijk formaat voor gebruik op het web, juist in de onderwijs- en onderzoeksector die door SURFnet en Kennisnet worden bediend. Om HTML5 voor video-distributie te gebruiken, is het bovendien noodzakelijk om ook een WebM-formaat aan te bieden om alle gebruikers te kunnen bedienen. SURFnet, Kennisnet, en hun directe doelgroepen zouden dus inderdaad dit formaat moeten ondersteunen. Het alternatieve Ogg-formaat (met Theora-video), dat ook open is en gratis beschikbaar, is technologisch wat minder geavanceerd dan WebM (met VP8). Als er gekozen moet worden, heeft daarom WebM de voorkeur. –
Kunnen WebM en HTML5 video op termijn propriëtaire videocodecs en –oplossingen vervangen?
Op korte termijn is de ondersteuning van HTML5 video in browsers nog matig, en kan HTML5 Video het gebruik van losse video-plugins nog niet vervangen. Echter, zodra de nieuwe versies van Microsoft Internet Explorer (versie 9) en van Mozilla Firefox (versie 4) zijn uitgebracht en de meeste gebruikers naar deze versies zijn geüpgraded, wordt het gebruik van HTML5 Video wel haalbaar. Op de langere termijn kunnen propriëtaire browser-plugins dan worden uitgefaseerd en kan alle video via HTML5 worden geserveerd. Voor WebM ligt de situatie iets ingewikkelder. De belangrijkste platformen die niet op korte termijn standaard WebM zullen ondersteunen, zijn Internet Explorer op Windows, en de browsers op Apple-platforms (zowel Safari als de geïntegreerde browsers op iPhone en iPad). Internet Explorer zal wel WebM kunnen spelen via de Windows Media speler, als de
37
correcte codec in Windows is geïnstalleerd; op Apple-platformen zal de ondersteuning echter problematisch blijven. Het is daarom de verwachting dat met alleen WebM niet alle gebruikers kunnen worden bediend, en dat dus ook een MP4-formaat zal moeten worden aangeboden. –
Is het op dit moment al zinnig is om te investeren in HTML5–compatibiliteit van videodiensten, of is het daarvoor nog te vroeg?
Voor een volledige overgang naar HTML5 Video is het nog te vroeg. Het is echter verstandig om al wel voorbereidingen te treffen zodat in de toekomst een overgang naar het gebruik van HTML5 Video eenvoudiger wordt. Aanbevelingen hiervoor zijn opgenomen in de volgende paragraaf.
6.2
Aanbevelingen
HTML5 komt er aan. Daar is geen twijfel over mogelijk. In deze aanbevelingen volgen een aantal richtlijnen voor het inzetten van HTML5 video. We hebben gekeken naar de videoformaten die op dit moment gebruikt worden in verschillende browsers en naar de videoformaten die sterk in opkomst zijn. •
•
•
MP4/H.264/AAC is op dit moment het best ondersteund. Dit is nu de beste keus voor het coderen van een video. MP4 zal ook op termijn in gebruik blijven, omdat dit het belangrijkste formaat is op nieuwe mobiele omgevingen, met name die van Apple. De licentiekosten die verbonden zijn aan het gebruik van H.264 zorgen ervoor dat niet alle browsers dit formaat zullen ondersteunen en er dus een alternatief nodig zal zijn. WebM (WebM/VP8/Vorbis) is waarschijnlijk het beste alternatief. WebM is een open formaat wat in 2010 gelanceerd is en sterk in opkomst is, gezamenlijk met HTML5. De hoge kwaliteit in combinatie met de openheid van dit formaat maken WebM een erg aantrekkelijk formaat, met name als in de nabije toekomst vrijwel alle browsers (met Apple-platformen als enige uitzondering) dit formaat zullen ondersteunen. Op dit moment heeft WebM echter nog niet genoeg ondersteuning in de browsers om MP4 en H.264 volledig te kunnen vervangen. Ogg/Theora/Vorbis is een ander open formaat, dat al langere tijd beschikbaar is. Hoewel de compressiekwaliteit van de video wat achterblijft bij VP8 en H.264, is dit op zich een goed alternatief. Grootschalig acceptatie van het formaat is echter achterwege gebleven, met name door gebrek aan ondersteuning in de belangrijke browsers en video plugins.
Om een start te maken met HTML5 is de aanbeveling dit te doen in MP4 met een fallback naar een Flash player. Hetzelfde MP4-formaat kan als alternatief in een Flash plug–in afgespeeld worden als de browser niet de -tag ondersteunt. Hiermee is de video voor iedereen afspeelbaar. Bij voorkeur kan direct een tweede codering in WebM toegevoegd worden. In de toekomst heeft het de voorkeur om WebM als basisformaat te gebruiken, en een MP4formaat aan te bieden als fallback voor Apple-platformen. Ook dient het aanbeveling om bestaande video in een propriëtair formaat zoals Windows Media of Flash om te gaan zetten naar WebM en H.264. Deze nieuwe video’s kunnen dan in dezelfde omgeving afgespeeld worden, met dezelfde players en bovendien ingezet worden als HTML5 video. Als Digital Rights Management (DRM) een issue is binnen de organisatie waar de video ingezet gaat worden, dan kan op dit moment alleen een propriëtair formaat, Windows Media of Flash, worden gebruikt. In dit geval is het zaak nog te wachten de video via HTML5 beschikbaar te stellen. Eventueel kan wel de stap naar MP4 gemaakt worden.
38