SlideShare a Scribd company logo
Building an HTML5 Video Player
      HTML5 Developer Conference 2012
                  #html5video
Steve Heffernan, Video.js & Zencoder & Brightcove
              http://videojs.com
                @heff @videojs
• History
• User Support
• Formats
• Code
• Bugs
• Resources
HTML5 Video Player - HTML5 Dev Conf 2012
HTML5 Video Player - HTML5 Dev Conf 2012
HTML5 Video Player - HTML5 Dev Conf 2012
~2000   ~2008   ~2015
HTML5 Video Player - HTML5 Dev Conf 2012
Reasons to use HTML5 Video



    • It’s the future!
    • Runs natively in the browser
    • Cleaner code
<video src="video.mp4" controls></video>
<video controls>

 <source src="video.mp4" type="video/mp4">

 <source src="video.webm" type="video/webm">
   <source src="video.ogv" type="video/ogg">

 <object type="application/x-shockwave-flash" data="flash.swf">

 
 <param name="movie" value="flash.swf" />

 
 <param name="flashvars" value="file=video.mp4" />

 </object>
</video>
HTML5 Video Player - HTML5 Dev Conf 2012
HTML5 Video Player - HTML5 Dev Conf 2012
http://blog.mefeedia.com/html5-dec-2011
The ‘Format War’
HTML5 Video Player - HTML5 Dev Conf 2012
OPEN   CLOSED
HTML5 Video Player - HTML5 Dev Conf 2012
CONTAINER FORMAT



 VIDEO CODEC




 AUDIO CODEC
MP4



               H.264




               AAC
3+   9+   9+
OGV



                  THEORA




                  VORBIS
3.5+   3+ 10.5+
WEBM



                 VP8




4+   6+ 10.6+   VORBIS
HTML5 Video Player - HTML5 Dev Conf 2012
Three Formats



9+   3+     3+   9+



     4+     6+ 10.6+



     3.5+   3+ 10.5+
Two Formats




9+   3+   3+   9+


     4+   6+ 10.6+
One Format




9+   3+   3+   9+
Handbrake.fr
Firefogg.org
Zencoder.com
Content Protection




 • RTMP Streaming   • Source Obscurity   • Native App
                                          Obscurity
 • DRM (Flash       • Time/GEO/IP
  Access/Smooth      limited URLs        • HTTP Streaming
  Streaming)
                                         • AES Encryption
Content Protection

              bit.ly/wAkriF
<video src="video.mp4" controls></video>
<video controls>

 <source src="video.mp4" type="video/mp4">

 <source src="video.webm" type="video/webm">
   <source src="video.ogv" type="video/ogg">
</video>
<video controls>

 <source src="video.mp4" type="video/mp4">

 <source src="video.webm" type="video/webm">
   <source src="video.ogv" type="video/ogg">
</video>
<video controls>

 <source src="video.mp4" type="video/mp4">

 <source src="video.webm" type="video/webm">
   <source src="video.ogv" type="video/ogg">

 <object type="application/x-shockwave-flash" data="flash.swf">

 
 <param name="movie" value="flash.swf" />

 
 <param name="flashvars" value="file=video.mp4" />

 </object>
</video>
<video controls>
    <source src="video.mp4" type="video/mp4">
    <source src="video.webm" type="video/webm">
    <source src="video.ogv" type="video/ogg">
    <object type="application/x-shockwave-flash"
data="flash.swf">

 
 <param name="movie" value="flash.swf" />

 
 <param name="flashvars" value="file=video.mp4" />
       <img src="image.jpg" alt="title" title="Can’t play video" />
    </object>
</video>
<p>
    <strong>Download Video:</strong>
    <a href="video.mp4">MP4</a>
    <a href="video.ogv">Ogg</a>
</p>
•Controls            •Autoplay           •Tracks
  •Poster              •Loop
  •Preload             •Width/Height

<video controls autoplay loop width="480" height="270"
 poster="poster.png"
 preload="auto" >

 <source src="video.mp4" type="video/mp4">

 <track kind="captions" src="captions.vtt" srclang="en">
</video>
Tag Builder
         http://videojs.com/tag-builder/
JavaScript API



     • Attributes
     • Functions
     • Events
JavaScript API




                 Live Demo!
                 (good luck)
JavaScript API
Browser/General Issues


  •Autobuffer => Preload
  •Cross-browser Load Progress Tracking
  •Missing Poster in Some Safari Versions
  •HTML5 Browsers Do Not Fallback on
   Incompatible Sources
<video controls>

 <source src="video.mp4" type="video/mp4">

 <source src="video.webm" type="video/webm">
   <source src="video.ogv" type="video/ogg">

 <object type="application/x-shockwave-flash" data="flash.swf">

 
 <param name="movie" value="flash.swf" />

 
 <param name="flashvars" value="file=video.mp4" />

 </object>
</video>
Determine Video Support

<script>

 var vidTag = document.createElement("video"),
     flashVersion = swfobject.getFlashPlayerVersion();

 if (vidTag.canPlayType && vidTag.canPlayType("video/mp4")) {
   // Video Tag
 } else if (flashVersion.major > 9) {
   // Flash Object
 } else {
   // No Video Support
 }

</script>

                SWF Object: http://code.google.com/p/swfobject/
Device Quirks: iOS 3


 • Needs MP4 as first source.
 • iPad Poster Attribute Bug
 • iPad JS in Head / iPhone JS not in Head
Device Quirks: Android 2.1 / 2.2

 • Can’t touch to start
 • Type attribute breaks video
 • canPlayType function broken

 ~25% of Android Users
Android Touch Start Fix



<script>

 if (navigator.userAgent.match(/Android/i) !== null) {
   $("video").click(function(){
     this.play();
   });
 }

</script>
Android Type Attribute Fix Options

• Don’t include type attribute
• Don’t use source tags

    <video src="video.mp4" controls></video>


• Set source through JS API
     video.src("video.mp4")
Android canPlayType Fix
<script>
var androidMatch = navigator.userAgent.match(/Android (d+)./i);

if (androidMatch && androidMatch[1] < 3) {

 // Overwrite canPlayType
 document.createElement("video")
    .constructor.prototype.canPlayType = function(type){
       if (type && type.toLowerCase().indexOf("video/mp4") !== -1) {
           return "maybe";
       } else {
           return "";
       }
 };

}
</script>
VideoJS.com
Video for Everybody
    By Kroc Camen
Dive into HTML5
  By Mark Pilgrim
HTML5 Video and Audio in Depth




   http://videojs.com/lynda
Building an HTML5 Video Player
      HTML5 Developer Conference 2012
                  #html5video
Steve Heffernan, Video.js & Zencoder & Brightcove
              http://videojs.com
                @heff @videojs

More Related Content

What's hot (20)

PDF
Multimedia on the web - HTML5 video and audio
Christian Heilmann
 
PDF
HTML5 and the web of tomorrow!
Christian Heilmann
 
PDF
Keypoints html5
dynamis
 
PDF
Using HTML5 sensibly
Christian Heilmann
 
PDF
Realize mais com HTML 5 e CSS 3 - 16 EDTED - RJ
Leonardo Balter
 
PDF
Progressive Enhancement 2.0 (Conference Agnostic)
Nicholas Zakas
 
PDF
[In Control 2010] HTML5
Christopher Schmitt
 
PPTX
Browser Wars Episode 1: The Phantom Menace
Nicholas Zakas
 
PPT
HTML5 Mullet: Forms & Input Validation
Todd Anglin
 
PPT
Html5 Overview
Owen Williams
 
PPT
HTML5 Overview
reybango
 
PPTX
Introduction to HTML5 & CSS3
Pradeep Varadaraja Banavara
 
PPTX
What is HTML 5?
Susan Winters
 
PDF
Progressive Enhancement 2.0 (jQuery Conference SF Bay Area 2011)
Nicholas Zakas
 
PDF
Prebrowsing - Velocity NY 2013
Steve Souders
 
PPTX
Doing More with LESS for CSS
Todd Anglin
 
PDF
Intro to html 5
Ian Jasper Mangampo
 
PDF
Real World Web Standards
gleddy
 
PDF
HTML5 Introduction
dynamis
 
PDF
Brave new world of HTML5 - Interlink Conference Vancouver 04.06.2011
Patrick Lauke
 
Multimedia on the web - HTML5 video and audio
Christian Heilmann
 
HTML5 and the web of tomorrow!
Christian Heilmann
 
Keypoints html5
dynamis
 
Using HTML5 sensibly
Christian Heilmann
 
Realize mais com HTML 5 e CSS 3 - 16 EDTED - RJ
Leonardo Balter
 
Progressive Enhancement 2.0 (Conference Agnostic)
Nicholas Zakas
 
[In Control 2010] HTML5
Christopher Schmitt
 
Browser Wars Episode 1: The Phantom Menace
Nicholas Zakas
 
HTML5 Mullet: Forms & Input Validation
Todd Anglin
 
Html5 Overview
Owen Williams
 
HTML5 Overview
reybango
 
Introduction to HTML5 & CSS3
Pradeep Varadaraja Banavara
 
What is HTML 5?
Susan Winters
 
Progressive Enhancement 2.0 (jQuery Conference SF Bay Area 2011)
Nicholas Zakas
 
Prebrowsing - Velocity NY 2013
Steve Souders
 
Doing More with LESS for CSS
Todd Anglin
 
Intro to html 5
Ian Jasper Mangampo
 
Real World Web Standards
gleddy
 
HTML5 Introduction
dynamis
 
Brave new world of HTML5 - Interlink Conference Vancouver 04.06.2011
Patrick Lauke
 

Viewers also liked (9)

PDF
HTML5: features with examples
Alfredo Torre
 
PPTX
Html5 tutorial for beginners
Singsys Pte Ltd
 
PDF
Making the HTML5 Video element interactive
Charles Hudson
 
PPTX
Use case document for boot fitting form
Kalai Vani
 
PPT
Building an HTML5 Video Player
Brightcove
 
PPTX
html5.ppt
Niharika Gupta
 
PPT
How to Embed a PowerPoint Presentation Using SlideShare
Joie Ocon
 
PDF
reveal.js 3.0.0
Hakim El Hattab
 
PDF
What is Artificial Intelligence | Artificial Intelligence Tutorial For Beginn...
Edureka!
 
HTML5: features with examples
Alfredo Torre
 
Html5 tutorial for beginners
Singsys Pte Ltd
 
Making the HTML5 Video element interactive
Charles Hudson
 
Use case document for boot fitting form
Kalai Vani
 
Building an HTML5 Video Player
Brightcove
 
html5.ppt
Niharika Gupta
 
How to Embed a PowerPoint Presentation Using SlideShare
Joie Ocon
 
reveal.js 3.0.0
Hakim El Hattab
 
What is Artificial Intelligence | Artificial Intelligence Tutorial For Beginn...
Edureka!
 
Ad

Similar to HTML5 Video Player - HTML5 Dev Conf 2012 (20)

PDF
Html5video
benwilkins
 
PDF
HTML5 multimedia - browser-native video and audio - DevUp HTML5 / Barcelona /...
Patrick Lauke
 
PDF
HTML5 multimedia - browser-native video and audio - JSDay / Verona / 17 May 2012
Patrick Lauke
 
KEY
Upgrade to HTML5 Video
steveheffernan
 
KEY
HTML5 Video Presentation
sith33
 
PDF
HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / ...
Patrick Lauke
 
PDF
HTML5 multimedia - where we are, where we're going
brucelawson
 
PDF
HTML5 Multimedia: where we are, where we're going
brucelawson
 
KEY
HTML5 Video for WordPress
steveheffernan
 
PDF
JS Days Mobile Meow
Greg Schechter
 
PDF
Web DU Mobile Meow
Greg Schechter
 
PDF
Mobile Meow at Mobilism
Greg Schechter
 
PPTX
HTML5 Multimedia Streaming
EDINA, University of Edinburgh
 
PDF
Craft 2019 - “The Upside Down” Of The Web - Video technologies
Máté Nádasdi
 
PDF
HTML5 Audio & Video
Aaron Gustafson
 
PDF
Beginning html5 media, 2nd edition
ser
 
PDF
HTML5 APIs - The New Frontier
Robert Nyman
 
PPT
Html5 vs Flash video
Frédéric Caron
 
PDF
HTML Media: Where We Are & Where We Need To Go
Nigel Parker
 
PDF
Web Directions @media 2010
Patrick Lauke
 
Html5video
benwilkins
 
HTML5 multimedia - browser-native video and audio - DevUp HTML5 / Barcelona /...
Patrick Lauke
 
HTML5 multimedia - browser-native video and audio - JSDay / Verona / 17 May 2012
Patrick Lauke
 
Upgrade to HTML5 Video
steveheffernan
 
HTML5 Video Presentation
sith33
 
HTML5 multimedia - browser-native video, audio and canvas - meet.js Summit / ...
Patrick Lauke
 
HTML5 multimedia - where we are, where we're going
brucelawson
 
HTML5 Multimedia: where we are, where we're going
brucelawson
 
HTML5 Video for WordPress
steveheffernan
 
JS Days Mobile Meow
Greg Schechter
 
Web DU Mobile Meow
Greg Schechter
 
Mobile Meow at Mobilism
Greg Schechter
 
HTML5 Multimedia Streaming
EDINA, University of Edinburgh
 
Craft 2019 - “The Upside Down” Of The Web - Video technologies
Máté Nádasdi
 
HTML5 Audio & Video
Aaron Gustafson
 
Beginning html5 media, 2nd edition
ser
 
HTML5 APIs - The New Frontier
Robert Nyman
 
Html5 vs Flash video
Frédéric Caron
 
HTML Media: Where We Are & Where We Need To Go
Nigel Parker
 
Web Directions @media 2010
Patrick Lauke
 
Ad

Recently uploaded (20)

PDF
July Patch Tuesday
Ivanti
 
PDF
Agentic AI lifecycle for Enterprise Hyper-Automation
Debmalya Biswas
 
PDF
Reverse Engineering of Security Products: Developing an Advanced Microsoft De...
nwbxhhcyjv
 
PPTX
Q2 FY26 Tableau User Group Leader Quarterly Call
lward7
 
PDF
Exolore The Essential AI Tools in 2025.pdf
Srinivasan M
 
PPT
Interview paper part 3, It is based on Interview Prep
SoumyadeepGhosh39
 
PDF
Log-Based Anomaly Detection: Enhancing System Reliability with Machine Learning
Mohammed BEKKOUCHE
 
PDF
Newgen 2022-Forrester Newgen TEI_13 05 2022-The-Total-Economic-Impact-Newgen-...
darshakparmar
 
PDF
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
PDF
How Startups Are Growing Faster with App Developers in Australia.pdf
India App Developer
 
PDF
NewMind AI - Journal 100 Insights After The 100th Issue
NewMind AI
 
PDF
Empower Inclusion Through Accessible Java Applications
Ana-Maria Mihalceanu
 
PDF
Blockchain Transactions Explained For Everyone
CIFDAQ
 
PDF
CIFDAQ Weekly Market Wrap for 11th July 2025
CIFDAQ
 
PDF
Chris Elwell Woburn, MA - Passionate About IT Innovation
Chris Elwell Woburn, MA
 
PDF
Python basic programing language for automation
DanialHabibi2
 
PPTX
MSP360 Backup Scheduling and Retention Best Practices.pptx
MSP360
 
PDF
"Beyond English: Navigating the Challenges of Building a Ukrainian-language R...
Fwdays
 
PPTX
Building Search Using OpenSearch: Limitations and Workarounds
Sease
 
PDF
Timothy Rottach - Ramp up on AI Use Cases, from Vector Search to AI Agents wi...
AWS Chicago
 
July Patch Tuesday
Ivanti
 
Agentic AI lifecycle for Enterprise Hyper-Automation
Debmalya Biswas
 
Reverse Engineering of Security Products: Developing an Advanced Microsoft De...
nwbxhhcyjv
 
Q2 FY26 Tableau User Group Leader Quarterly Call
lward7
 
Exolore The Essential AI Tools in 2025.pdf
Srinivasan M
 
Interview paper part 3, It is based on Interview Prep
SoumyadeepGhosh39
 
Log-Based Anomaly Detection: Enhancing System Reliability with Machine Learning
Mohammed BEKKOUCHE
 
Newgen 2022-Forrester Newgen TEI_13 05 2022-The-Total-Economic-Impact-Newgen-...
darshakparmar
 
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
How Startups Are Growing Faster with App Developers in Australia.pdf
India App Developer
 
NewMind AI - Journal 100 Insights After The 100th Issue
NewMind AI
 
Empower Inclusion Through Accessible Java Applications
Ana-Maria Mihalceanu
 
Blockchain Transactions Explained For Everyone
CIFDAQ
 
CIFDAQ Weekly Market Wrap for 11th July 2025
CIFDAQ
 
Chris Elwell Woburn, MA - Passionate About IT Innovation
Chris Elwell Woburn, MA
 
Python basic programing language for automation
DanialHabibi2
 
MSP360 Backup Scheduling and Retention Best Practices.pptx
MSP360
 
"Beyond English: Navigating the Challenges of Building a Ukrainian-language R...
Fwdays
 
Building Search Using OpenSearch: Limitations and Workarounds
Sease
 
Timothy Rottach - Ramp up on AI Use Cases, from Vector Search to AI Agents wi...
AWS Chicago
 

HTML5 Video Player - HTML5 Dev Conf 2012

  • 1. Building an HTML5 Video Player HTML5 Developer Conference 2012 #html5video Steve Heffernan, Video.js & Zencoder & Brightcove http://videojs.com @heff @videojs
  • 2. • History • User Support • Formats • Code • Bugs • Resources
  • 6. ~2000 ~2008 ~2015
  • 8. Reasons to use HTML5 Video • It’s the future! • Runs natively in the browser • Cleaner code
  • 10. <video controls> <source src="video.mp4" type="video/mp4"> <source src="video.webm" type="video/webm"> <source src="video.ogv" type="video/ogg"> <object type="application/x-shockwave-flash" data="flash.swf"> <param name="movie" value="flash.swf" /> <param name="flashvars" value="file=video.mp4" /> </object> </video>
  • 16. OPEN CLOSED
  • 18. CONTAINER FORMAT VIDEO CODEC AUDIO CODEC
  • 19. MP4 H.264 AAC 3+ 9+ 9+
  • 20. OGV THEORA VORBIS 3.5+ 3+ 10.5+
  • 21. WEBM VP8 4+ 6+ 10.6+ VORBIS
  • 23. Three Formats 9+ 3+ 3+ 9+ 4+ 6+ 10.6+ 3.5+ 3+ 10.5+
  • 24. Two Formats 9+ 3+ 3+ 9+ 4+ 6+ 10.6+
  • 25. One Format 9+ 3+ 3+ 9+
  • 29. Content Protection • RTMP Streaming • Source Obscurity • Native App Obscurity • DRM (Flash • Time/GEO/IP Access/Smooth limited URLs • HTTP Streaming Streaming) • AES Encryption
  • 30. Content Protection bit.ly/wAkriF
  • 32. <video controls> <source src="video.mp4" type="video/mp4"> <source src="video.webm" type="video/webm"> <source src="video.ogv" type="video/ogg"> </video>
  • 33. <video controls> <source src="video.mp4" type="video/mp4"> <source src="video.webm" type="video/webm"> <source src="video.ogv" type="video/ogg"> </video>
  • 34. <video controls> <source src="video.mp4" type="video/mp4"> <source src="video.webm" type="video/webm"> <source src="video.ogv" type="video/ogg"> <object type="application/x-shockwave-flash" data="flash.swf"> <param name="movie" value="flash.swf" /> <param name="flashvars" value="file=video.mp4" /> </object> </video>
  • 35. <video controls> <source src="video.mp4" type="video/mp4"> <source src="video.webm" type="video/webm"> <source src="video.ogv" type="video/ogg"> <object type="application/x-shockwave-flash" data="flash.swf"> <param name="movie" value="flash.swf" /> <param name="flashvars" value="file=video.mp4" /> <img src="image.jpg" alt="title" title="Can’t play video" /> </object> </video> <p> <strong>Download Video:</strong> <a href="video.mp4">MP4</a> <a href="video.ogv">Ogg</a> </p>
  • 36. •Controls •Autoplay •Tracks •Poster •Loop •Preload •Width/Height <video controls autoplay loop width="480" height="270" poster="poster.png" preload="auto" > <source src="video.mp4" type="video/mp4"> <track kind="captions" src="captions.vtt" srclang="en"> </video>
  • 37. Tag Builder http://videojs.com/tag-builder/
  • 38. JavaScript API • Attributes • Functions • Events
  • 39. JavaScript API Live Demo! (good luck)
  • 41. Browser/General Issues •Autobuffer => Preload •Cross-browser Load Progress Tracking •Missing Poster in Some Safari Versions •HTML5 Browsers Do Not Fallback on Incompatible Sources
  • 42. <video controls> <source src="video.mp4" type="video/mp4"> <source src="video.webm" type="video/webm"> <source src="video.ogv" type="video/ogg"> <object type="application/x-shockwave-flash" data="flash.swf"> <param name="movie" value="flash.swf" /> <param name="flashvars" value="file=video.mp4" /> </object> </video>
  • 43. Determine Video Support <script> var vidTag = document.createElement("video"), flashVersion = swfobject.getFlashPlayerVersion(); if (vidTag.canPlayType && vidTag.canPlayType("video/mp4")) { // Video Tag } else if (flashVersion.major > 9) { // Flash Object } else { // No Video Support } </script> SWF Object: http://code.google.com/p/swfobject/
  • 44. Device Quirks: iOS 3 • Needs MP4 as first source. • iPad Poster Attribute Bug • iPad JS in Head / iPhone JS not in Head
  • 45. Device Quirks: Android 2.1 / 2.2 • Can’t touch to start • Type attribute breaks video • canPlayType function broken ~25% of Android Users
  • 46. Android Touch Start Fix <script> if (navigator.userAgent.match(/Android/i) !== null) { $("video").click(function(){ this.play(); }); } </script>
  • 47. Android Type Attribute Fix Options • Don’t include type attribute • Don’t use source tags <video src="video.mp4" controls></video> • Set source through JS API video.src("video.mp4")
  • 48. Android canPlayType Fix <script> var androidMatch = navigator.userAgent.match(/Android (d+)./i); if (androidMatch && androidMatch[1] < 3) { // Overwrite canPlayType document.createElement("video") .constructor.prototype.canPlayType = function(type){ if (type && type.toLowerCase().indexOf("video/mp4") !== -1) { return "maybe"; } else { return ""; } }; } </script>
  • 50. Video for Everybody By Kroc Camen
  • 51. Dive into HTML5 By Mark Pilgrim
  • 52. HTML5 Video and Audio in Depth http://videojs.com/lynda
  • 53. Building an HTML5 Video Player HTML5 Developer Conference 2012 #html5video Steve Heffernan, Video.js & Zencoder & Brightcove http://videojs.com @heff @videojs

Editor's Notes