From:
Using HTML5 audio and video
HTML5 introduces built-in media support via the and elements, offering the ability to easily embed media into HTML documents.
Embedding media
Embedding media in your HTML document is trivial:
This example plays a sample video, with playback controls, from the Theora web site.
Here is an example for embedding audio into your HTML document
The src
attribute can be a URL of the audio file or the path to the file on the local system.
This code example uses attributes of the element:
controls
: Displays the standard HTML5 controls for the audio on the web page.autoplay
: Makes the audio play automatically.loop
: Make the audio repeat (loop) automatically.
The preload
attribute is used in the audio element for buffering large files. It can take one of 3 values:
"none"
does not buffer the file"auto"
buffers the media file"metadata"
buffers only the metadata for the file
Multiple source files can be specified using the element in order to provide video or audio encoded in different formats for different browsers. For instance:
This plays the Ogg video file in browsers supporting the Ogg format. If the browser doesn't support Ogg video, the browser uses the MPEG-4 file. See also the list of in different browsers.
You may also specify which codecs the media file requires; this allows the browser to make even more intelligent decisions:
Here, we specify that the video uses the Dirac and Speex codecs. If the browser supports Ogg video, but not the specified codecs, the video will not load.
If the type
attribute isn't specified, the media's type is retrieved from the server and checked to see if the browser can handle it; if it can't be rendered, the next source
is checked. If none of the specified source
elements can be used, an error
event is dispatched to the video
element. If the type
attribute is specified, it's compared against the types the browser can play, and if it's not recognized, the server doesn't even get queried; instead, the next source
is checked at once.
See for a complete list of events associated with media playback. For details on media formats supported by different browsers, see .
Controlling media playback
Once you've embedded media into your HTML document using the new elements, you can programmatically control them from JavaScript code. For example, to start (or restart) playback, you can do this:
var v = document.getElementsByTagName("video")[0]; v.play();
The first line fetches the first video element in the document, and the second calls the element's method, as defined in the interface that is used to implement the media elements.
Controlling an HTML5 audio player to play, pause, increase and decrease volume using some Javascript is straightforward.
Stopping the download of media
While stopping the playback of media is as easy as calling the element's pause() method, the browser keeps downloading the media until the media element is disposed of through garbage collection.
Here's a trick that stops the download at once:
var mediaElement = document.getElementById("myMediaElementID");mediaElement.pause();mediaElement.src='';//ormediaElement.removeAttribute("src");
By removing the media element's src
attribute (or setting it to an empty string—it may depend on the browser), you destroy the element's internal decoder, which stops the network download. The spec is quite unclear on the removeAttribute() scenario and setting a <video> 'src' attribute to an empty string can cause an unwanted request (Mozilla Firefox 22).
Seeking through media
Media elements provide support for moving the current playback position to specific points in the media's content. This is done by setting the value of the currentTime
property on the element; see for further details on the element's properties. Simply set the value to the time, in seconds, at which you want playback to continue.
You can use the element's seekable
property to determine the ranges of the media that are currently available for seeking to. This returns a object listing the ranges of times that you can seek to.
var mediaElement = document.getElementById('mediaElementID'); mediaElement.seekable.start(0); // Returns the starting time (in seconds) mediaElement.seekable.end(0); // Returns the ending time (in seconds) mediaElement.currentTime = 122; // Seek to 122 seconds mediaElement.played.end(0); // Returns the number of seconds the browser has played
Specifying playback range
When specifying the URI of media for an or element, you can optionally include additional information to specify the portion of the media to play. To do this, append a hash mark ("#") followed by the media fragment description.
A time range is specified using the syntax:
#t=[starttime][,endtime]
The time can be specified as a number of seconds (as a floating-point value) or as an hours/minutes/seconds time separated with colons (such as 2:05:01 for 2 hours, 5 minutes, and 1 second).
A few examples:
- http://example.com/video.ogv#t=10,20
- Specifies that the video should play the range 10 seconds through 20 seconds. http://example.com/video.ogv#t=,10.5
- Specifies that the video should play from the beginning through 10.5 seconds. http://example.com/video.ogv#t=,02:00:00
- Specifies that the video should play from the beginning through two hours. http://example.com/video.ogv#t=60
- Specifies that the video should start playing at 60 seconds and play through the end of the video.
The playback range portion of the media element URI specification was added to Gecko 9.0 (Firefox 9.0 / Thunderbird 9.0 / SeaMonkey 2.6). At this time, this is the only part of the implemented by Gecko, and it can only be used when specifying the source for media elements, and not in the address bar.
Fallback options
HTML included between, for example, the opening and closing tags of media elements is processed by browsers that don't support HTML5 media. You can take advantage of this fact to provide alternative fallback media for those browsers.
This section provides two possible fallback options for video. In each case, if the browser supports HTML5 video, that is used; otherwise, the fallback option is used.
Using Flash
You can use Flash to play a Flash format movie if the element isn't supported:
Note that you shouldn't include classid
in the object
tag in order to be compatible with browsers other than Internet Explorer.
Playing Ogg videos using a Java applet
There's a Java applet called that you can use as a fallback to play Ogg videos in browsers that have Java support but don't support HTML5 video:
If you do not create an alternate child element of the cortado object element, such as the element above, FireFox 3.5 installations that handle the video natively but do not have Java installed will incorrectly inform the user that they need to install a plugin to view content on the page.
Error handling
(Firefox 4 / Thunderbird 3.3 / SeaMonkey 2.1)Starting in Gecko 2.0 (Firefox 4 / Thunderbird 3.3 / SeaMonkey 2.1), error handling has been revised to match the latest version of the HTML5 specification. Instead of the error
event being dispatched to the media element itself, it now gets delivered to the child elements corresponding to the sources resulting in the error.
This lets you detect which sources failed to load, which may be useful. Consider this HTML:
Since Firefox doesn't support MP4 and 3GP due to their patent-encumbered nature, the elements with the IDs "mp4_src" and "3gp_src" will receive error
events before the Ogg resource is loaded. The sources are tried in the order in which they appear, and once one loads successfully, the remaining sources aren't tried at all.
Detecting when no sources have loaded
To detect that all child elements have failed to load, check the value of the media element's networkState
attribute. If this is HTMLMediaElement.NETWORK_NO_SOURCE
, you know that all the sources failed to load.
If at that point you add another source by inserting a new element as a child of the media element, Gecko attempts to load the specified resource.
Showing fallback content when no source could be decoded
Another way to show the fallback content of a video when none of the sources could be decoded in the current browser is to add an error handler on the last source element. Then you can replace the video with its fallback content:
var v = document.querySelector('video'), sources = v.querySelectorAll('source'), lastsource = sources[sources.length-1]; lastsource.addEventListener('error', function(ev) { var d = document.createElement('div'); d.innerHTML = v.innerHTML; v.parentNode.replaceChild(d, v); }, false);
See also
- The media-related HTML elements: , , ;
- , a JavaScript library (mwEmbed) which supports a seamless fallback with HTML5, VLC Player, Java Cortado and OMTK Flash Vorbis player. (It is used by Wikimedia)
- , a Flash library which implements a Vorbis decoder
- , a JavaScript wrapper for audio- and video-tags with flash fallback, open source, GPL
- , an audio/video playback solution in Java maintained by Xiph.org
- , an open source HTML5 video player and framework.
- - open source HTML5 audio/video framework with a custom Flash shim that mimic HTML5 media API for older browsers.
- - HTML5 fallback support video player
- - for HTML5 video
- an open source audio and video libray for jQuery and Zepto