Controlling Video from JavaScript with the video Element
Problem
You want to embed video in your web page, without using Flash. You also want a con‐ sistent look for the video control, regardless of browser and operating system.
Solution
Use the HTML5 video element:
<video id="meadow" poster="purples.jpg" > <source src="meadow.m4v" type="video/mp4"/> <source src="meadow.ogv" type="video/ogg" /> </video>
You can provide controls for it via JavaScript, as shown in Example 9-5. Buttons are used to provide the video control, and text in a div element is used to provide feedback on time during the playback.
Providing a custom control for the HTML5 video element :
<!DOCTYPE html> <head> <title>Meadow Video</title> <script> <style> video { border: 1px solid black; } </style> window.onload=function() { // events for buttons document.getElementById("start").addEventListener("click",startPlayback); document.getElementById("stop").addEventListener("click",stopPlayback); document.getElementById("pause").addEventListener("click",pausePlayback); // setup for video playback var meadow = document.getElementById("meadow"); meadow.addEventListener("timeupdate",reportProgress); // video fallback var detect = document.createElement("video"); if (!detect.canPlayType) { document.getElementById("controls").style.display="none"; } } // start video, enable stop and pause // disable play function startPlayback() { var meadow = document.getElementById("meadow"); meadow.play(); document.getElementById("pause").disabled=false; document.getElementById("stop").disabled=false; this.disabled=true; } // pause video, enable start, disable stop // disable pause function pausePlayback() { document.getElementById("meadow").pause(); this.disabled=true; document.getElementById("start").disabled=false; document.getElementById("stop").disabled=true; } // stop video, return to zero time // enable play, disable pause and stop function stopPlayback() { var meadow = document.getElementById("meadow"); meadow.pause(); meadow.currentTime=0; document.getElementById("start").disabled=false; document.getElementById("pause").disabled=true; this.disabled=true; } // for every time divisible by 5, output feedback function reportProgress() { var time = Math.round(this.currentTime); var div = document.getElementById("feedback"); div.innerHTML = time + " seconds"; } </script> </head> <body> <video id="meadow" poster="purples.jpg" > <source src="meadow.m4v" type="video/mp4"/> <source src="meadow.ogv" type="video/ogg" /> </video> <div id="feedback"></div> <div id="controls"> <button id="start">Play</button> <button id="stop">Stop</button> <button id="pause">Pause</button> </controls> </body>
EXPLAIN
The new HTML5 video element, as with the HTML5 audio element, can be controlled
with its own built-in controls, or you can provide your own.
The media elements support the following methods:
• play: Starts playing the video
• pause: Pauses the video
• load: Preloads the video without starting play
• canPlayType: Tests if the user agent supports the video type
The media elements don’t support a stop method, so the code emulates one by pausing
video play and then setting the video’s currentTime attribute to 0,
which basically resets
the play start time.
I also used currentTime to print out the video time, using Math.round to round the
time to the nearest second.
The video control is providing two different video codecs: H.264 (.mp4), and Ogg
Theora (.ogv). Firefox, Opera, and Chrome support Ogg Theora, but Safari and IE only
support the H.264-formatted video.
However, by providing both types, the video works
in all of the browsers that support the video element.
The video and audio controls are inherently keyboard-accessible.
If you do replace the
controls, you’ll want to provide accessibility information with your replacements. The
video control doesn’t have built-in captioning, but work is underway to provide the API
for captioning.
No comments:
Post a Comment