html5 multimedia - browser-native video, audio and canvas - meet.js summit / poznan / 14 january...

70
HTML5 multimedia Patrick H. Lauke / meet.js Summit / Poznań / 14 January 2011 BROWSER-NATIVE VIDEO, AUDIO AND CANVAS

Upload: patrick-lauke

Post on 12-May-2015

2.921 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

HTML5 multimedia

Patrick H. Lauke / meet.js Summit / Poznań / 14 January 2011

BROWSER-NATIVE VIDEO, AUDIO AND CANVAS

Page 2: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

Web Evangelist at Opera

Page 3: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

making your site Fonzie compliant...

Page 4: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

<video>

Page 5: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

Adobe Flash currently most commonvideo delivery mechanism

Page 6: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

<object width="425" height="344"><param name="movie"

value="http://www.youtube.com/v/9sEI1AUFJKw&hl=en&fs=1&"></param>

<param name="allowFullScreen" value="true"></param>

<param name="allowscriptaccess" value="always"></param>

<embed src="http://www.youtube.com/v/9sEI1AUFJKw&hl=en&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object>

Page 7: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

<video src="video.webm"></video>

Page 8: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

<video src="video.webm" controls autoplay muted loop preload="none|metadata|auto" poster="poster.jpg" width="320" height="240"> <a href="video.webm">Download movie</a></video>

Page 9: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

video as native object

● behaves like any other HTML element● keyboard accessibility out-of-the-box

Page 10: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

people.opera.com/patrickl/experiments/webm/hover+transition

Page 11: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012
Page 12: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

powerful (simple) API

Page 13: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

controlling <video> with JavaScript

var v = document.getElementById('player');

v.play();v.pause();v.volume = … ;v.currentTime = … ;…

Page 14: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

events fired by <video>

var v = document.getElementById('player');

v.addEventListener('loadeddata', function() { … }, true)v.addEventListener('play', function() { … }, true)v.addEventListener('pause', function() { … }, true)v.addEventListener('timeupdate', function() { … }, true)v.addEventListener('ended', function() { … }, true)…

Page 15: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

www.w3.org/2010/05/video/mediaevents.html

Page 16: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

people.opera.com/patrickl/experiments/webm/basic-controls

Page 17: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

people.opera.com/patrickl/experiments/webm/fancy-controls

Page 18: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

people.opera.com/patrickl/experiments/webm/fancy-swap

Page 19: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

HTML5 means all your old dHTML is cool again!

Page 20: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

video formatsthe big debate?

Page 21: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

HTML5 does not specify video container/codec

(same as with images in HTML 4.01)

Page 22: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

MP4/H.264or

Ogg Theoraor

WebM/VP8

Page 23: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

MP4 / H.264

ubiquitous, patent encumbered, licensing/royalties

Page 24: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

Ogg Theora

free and open, no licensing feesnot many tools for it, not web optimised

Page 25: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

WebM / VP8

open and royalty-free, web-optimisedsupport by hardware and software vendors

Page 26: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

providing multiple sources<video controls width="…" height="…">

<source src="movie.mp4" type="video/mp4"><source src="movie.webm" type="video/webm"><source src="movie.ogv" type="video/ogg"><!-- fallback content -->

</video>

Page 27: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

specifying codecs<video controls width="…" height="…">

<source … type='video/mp4; codecs="avc1.42E01E,mp4a.40.2"'><source … type='video/webm; codecs="vorbis,vp8"'><source … type='video/ogg; codecs="theora,vorbis"'><!-- fallback content -->

</video>

Page 28: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

feature-detection for codecs

v.canPlayType('video/webm;codecs="vp8,vorbis"')

"probably" | "maybe" | ""

Page 29: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012
Page 30: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

www.ffmpeg.org

Page 31: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

www.mirovideoconverter.com

Page 32: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

flash fallback for older browsershttp://camendesign.com/code/video_for_everybody

Page 33: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

<video controls width="…" height="…"><source src="movie.mp4" type="video/mp4" /><source src="movie.webm" type="video/webm" /><source src="movie.ogv" type="video/ogg" />

<object width="…" height="…" type="application/x-shockwave-flash" data="player.swf">

<param name="movie" value="player.swf" /><param name="flashvars" value=" … file=movie.mp4" /><!-- fallback content -->

</object>

</video>

Page 34: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

<audio>

Page 35: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

audio...exactly the same as video

<audio src=”music.mp3” controls autoplay … ></audio>

<audio controls autoplay><source src="music.mp3" type="audio/mpeg" /><source src="music.oga" type="audio/ogg" /><!-- fallback content -->

</audio>

formats: MP3 vs Ogg Vorbis (vs WAV)

Page 36: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

people.opera.com/patrickl/experiments/audio/wilhelm

Page 37: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

people.opera.com/patrickl/experiments/audio/windchime

Page 38: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

no need for <audio> in your document

var s = document.createElement('audio');s.src = 'aaargh.oga'; s.play();

(same for video as well, if you're crazy...)

Page 39: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

<canvas>

Page 40: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

canvas = “scriptable images”

<canvas width="…" height="…"></canvas>

Page 41: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

canvas has standard API methods for drawing

ctx = canvas.getContext("2d");ctx.fillRect(x, y, width, height);ctx.beginPath();ctx.moveTo(x, y);ctx.lineTo(x, y);ctx.bezierCurveTo(x1, y1, x2, y2, c1, c2);…

www.w3.org/TR/2dcontext

Page 42: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

people.opera.com/patrickl/experiments/canvas/particle/3

Page 43: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

mariuswatz.com/works/abstract01js

Page 44: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

canvas drawing ready-made images

ctx = canvas.getContext("2d");

var logo = new Image();logo.src = 'logo.png';

ctx.drawImage(logo,x1,y1,w1,h1,x2,y2,w2,h2);

or call in an existing image already on the page

Page 45: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

www.splintered.co.uk/experiments/archives/paranoid_0.4

Page 46: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

canvas access to image data array

ctx = canvas.getContext("2d");canvasData = ctx.getImageData(x,y,w,h);

[R,G,B,A,R,G,B,A,R,G,B,A,R,G,B,A, … ]

Page 47: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

www.splintered.co.uk/experiments/archives/canvas-ambilight

Page 48: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

desandro.com/resources/close-pixelate

Page 49: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

canvas also works with video

ctx = canvas.getContext("2d");v = document.getElementById('player');

ctx.drawImage(v,x1,y1,w1,h2,x2,y2,w2,h2);

grab currently displayed frame (update as appropriate)

Page 50: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

html5doctor.com/video-canvas-magic

Page 51: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

media.chikuyonok.ru/ambilight

Page 52: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

is it all safe to use, right now?

Page 53: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

www.youtube.com/html5

Page 54: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

don't do browser sniffing

http://www.flickr.com/photos/timdorr/2096272747/

Page 55: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012
Page 56: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

feature-detectionprogressive enhancement, graceful degradation

diveintohtml5.info/everything.html

Page 57: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

feature-detection for audio/video

if (!!document.createElement('video').canPlayType;) { … }

if (!!document.createElement('audio').canPlayType;) { … }

Page 58: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

sublimevideo.net

Page 59: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

www.jplayer.org

Page 60: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

www.textfiles.com/underconstruction

Page 61: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

dev.w3.org/2011/webrtc/editor/webrtc.html

Page 62: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

dev.w3.org/2011/webrtc/editor/getusermedia.html

Page 63: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

camera accessnavigator.getUserMedia({video:true},success,error);

Page 64: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

dev.opera.com/labs

Page 65: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

people.opera.com/danield/html5/explode

Page 66: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

neave.com/webcam/html5

Page 67: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

HTML5 as Flashkiller?

Page 68: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

not a question ofHTML5 replacing Flash...

Page 69: HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / Poznan / 14 January 2012

giving developers a choice!