The HTML Video element (<video>
) embeds a media player which supports video playback into the document. You can use <video>
for audio content as well, but the <audio>
element may provide a more appropriate user experience.
The above example shows simple usage of the <video>
element. In a similar manner to the <img>
element, we include a path to the media we want to display inside the src
attribute; we can include other attributes to specify information such as video width and height, whether we want it to autoplay and loop, whether we want to show the browser's default video controls, etc.
The content inside the opening and closing <video></video>
tags is shown as a fallback in browsers that don't support the element.
Browsers don't all support the same video formats; you can provide multiple sources inside nested <source>
elements, and the browser will then use the first one it understands:
<video controls> <source src="myVideo.mp4" type="video/mp4"> <source src="myVideo.webm" type="video/webm"> <p>Your browser doesn't support HTML5 video. Here is a <a href="myVideo.mp4">link to the video</a> instead.</p> </video>
Other usage notes:
controls
attribute, the video won't include the browser's default controls; you can create your own custom controls using JavaScript and the HTMLMediaElement
API. See Creating a cross-browser video player for more details.HTMLMediaElement
s fire many different events.object-position
property to adjust the positioning of the video within the element's frame, and the object-fit
property to control how the video's size is adjusted to fit within the frame.<track>
element and the WebVTT format. See Adding captions and subtitles to HTML5 video for more information.A good general source of information on using HTML <video>
is the Video and audio content beginner's tutorial.
Like all other HTML elements, this element supports the global attributes.
autoplay
Note: Sites that automatically play audio (or video with an audio track) can be an unpleasant experience for users, so it should be avoided when possible. If you must offer autoplay functionality, you should make it opt-in (requiring a user to specifically enable it). However, this can be useful when creating media elements whose source will be set at a later time, under user control.
To disable video autoplay, autoplay="false"
will not work; the video will autoplay if the attribute is there in the <video>
tag at all. To remove autoplay the attribute needs to be removed altogether.
buffered
TimeRanges
object.controls
crossorigin
<canvas>
element without being tainted. The allowed values are: anonymous
Origin:
HTTP header without a cookie, X.509 certificate, or performing HTTP Basic authentication. If the server does not give credentials to the origin site (by not setting the Access-Control-Allow-Origin:
HTTP header), the image will be tainted, and its usage restricted.use-credentials
Origin:
HTTP header with a cookie, a certificate, or performing HTTP Basic authentication. If the server does not give credentials to the origin site (through Access-Control-Allow-Credentials:
HTTP header), the image will be tainted and its usage restricted.Origin:
HTTP header), preventing its non-tainted used in <canvas>
elements. If invalid, it is handled as if the enumerated keyword anonymous
was used. See CORS settings attributes for additional information.height
loop
muted
false
, meaning that the audio will be played when the video is played.preload
none
: Indicates that the video should not be preloaded.metadata
: Indicates that only video metadata (e.g. length) is fetched.auto
: Indicates that the whole video file can be downloaded, even if the user is not expected to use it.auto
value.If not set, its default value is browser-defined (i.e. each browser may have its own default value). The spec advises it to be set to metadata
.
autoplay
attribute has precedence over preload
. If autoplay
is specified, the browser would obviously need to start downloading the video for playback.intrinsicsize
naturalWidth
/naturalHeight
on images would return the values specified in this attribute. Explainer, examples
poster
src
<source>
element within the video block to specify the video to embed.width
playsinline
The <video>
element is a replaced element — its display
value is inline
by default, but its default width and height in the viewport is defined by the video being embedded.
There are no special considerations for styling <video>
; a common strategy is to give it a display
value of block
to make it easier to position, size, etc., and then provide styling and layout information as required. Video player styling basics provides some useful styling techniques.
You can detect when tracks are added to and removed from a <video>
element using the addtrack
and removetrack
events. However, these events aren't sent directly to the <video>
element itself. Instead, they're sent to the track list object within the <video>
element's HTMLMediaElement
that corresponds to the type of track that was added to the element:
HTMLMediaElement.audioTracks
AudioTrackList
containing all of the media element's audio tracks. You can add a listener for addtrack
to this object to be alerted when new audio tracks are added to the element.HTMLMediaElement.videoTracks
addtrack
listener to this VideoTrackList
object to be informed when video tracks are added to the element.HTMLElement.textTracks
addtrack
event listener to this TextTrackList
to be notified when new text tracks are added to the element.For example, to detect when audio tracks are added to or removed from a <video>
element, you can use code like this:
var elem = document.querySelector("video"); elem.audioTrackList.onaddtrack = function(event) { trackEditor.addTrack(event.track); }; elem.audioTrackList.onremovetrack = function(event) { trackEditor.removeTrack(event.track); };
This code watches for audio tracks to be added to and removed from the element, and calls a hypothetical function on a track editor to register and remove the track from the editor's list of available tracks.
You can also use addEventListener()
to listen for the addtrack
and removetrack
events.
This example plays a video when activated, providing the user with the browser's default video controls to control playback.
<!-- Simple video example --> <!-- 'Big Buck Bunny' licensed under CC 3.0 by the Blender foundation. Hosted by archive.org --> <!-- Poster from peach.blender.org --> <video controls src="https://archive.org/download/BigBuckBunny_124/Content/big_buck_bunny_720p_surround.mp4" poster="https://peach.blender.org/wp-content/uploads/title_anouncement.jpg?x11217" width="620"> Sorry, your browser doesn't support embedded videos, but don't worry, you can <a href="https://archive.org/details/BigBuckBunny_124">download it</a> and watch it with your favorite video player! </video>
Until the video starts playing, the image provided in the poster
attribute is displayed in its place. If the browser doesn't support video playback, the fallback text is displayed.
This example builds on the last one, offering three different sources for the media; this allows the video to be watched regardless of which video codecs are supported by the browser.
<!-- Using multiple sources as fallbacks for a video tag --> <!-- 'Elephants Dream' by Orange Open Movie Project Studio, licensed under CC-3.0, hosted by archive.org --> <!-- Poster hosted by Wikimedia --> <video width="620" controls poster="https://upload.wikimedia.org/wikipedia/commons/e/e8/Elephants_Dream_s5_both.jpg" > <source src="https://archive.org/download/ElephantsDream/ed_1024_512kb.mp4" type="video/mp4"> <source src="https://archive.org/download/ElephantsDream/ed_hd.ogv" type="video/ogg"> <source src="https://archive.org/download/ElephantsDream/ed_hd.avi" type="video/avi"> Your browser doesn't support HTML5 video tag. </video>
First WebM is tried. If that can't be played, then MP4 is tried. Finally, OGG is tried. A fallback message is displayed if the video tag isn't supported, but not if all sources fail.
If the MIME type for the video is not set correctly on the server, the video may not show or show a gray box containing an X (if JavaScript is enabled).
If you use Apache Web Server to serve Ogg Theora videos, you can fix this problem by adding the video file type extensions to "video/ogg" MIME type. The most common video file type extensions are ".ogm", ".ogv", or ".ogg". To do this, edit the "mime.types" file in "/etc/apache" or use the "AddType"
configuration directive in httpd.conf
.
AddType video/ogg .ogm AddType video/ogg .ogv AddType video/ogg .ogg
If you serve your videos as WebM, you can fix this problem for the Apache Web Server by adding the extension used by your video files (".webm" is the most common one) to the MIME type "video/webm" via the "mime.types" file in "/etc/apache" or via the "AddType" configuration directive in httpd.conf
.
AddType video/webm .webm
Your web host may provide an easy interface to MIME type configuration changes for new technologies until a global update naturally occurs.
Videos should provide both captions and transcripts that accurately describe its content (see Adding captions and subtitles to HTML5 video for more information on how to implement these). Captions allow people who are experiencing hearing loss to understand a video's audio content as the video is being played, while transcripts allow people who need additional time to be able to review audio content at a pace and format that is comfortable for them.
If automatic captioning services are used, it is important to review the generated content to ensure it accurately represents the source video.
In addition to spoken dialog, subtitles and transcripts should also identify music and sound effects that communicate important information. This includes emotion and tone:
14 00:03:14 --> 00:03:18 [Dramatic rock music] 15 00:03:19 --> 00:03:21 [whispering] What's that off in the distance? 16 00:03:22 --> 00:03:24 It's… it's a… 16 00:03:25 --> 00:03:32 [Loud thumping] [Dishes clattering]
Captions should not obstruct the main subject of the video. They can be positioned using the align
VTT cue setting.
Content categories |
Flow content, phrasing content, embedded content. If it has a controls attribute: interactive content and palpable content. |
---|---|
Permitted content | If the element has a Else: zero or more |
Tag omission | None, both the starting and ending tag are mandatory. |
Permitted parents | Any element that accepts embedded content. |
Permitted ARIA roles | application |
DOM interface | HTMLVideoElement |
Specification | Status | Comment |
---|---|---|
HTML Living Standard The definition of '<video>' in that specification. | Living Standard |
Desktop | ||||||
---|---|---|---|---|---|---|
Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | |
Basic support | 3 | Yes | 3.5 | 9 | 10.5 | 3.1 |
autoplay |
3 | Yes | 3.5 | 9 | 10.5 | 3.1 |
buffered |
? | Yes | 4 | ? | Yes | ? |
controls |
3 | Yes | 3.5 | 9 | 10.5 | 3.1 |
crossorigin |
? | Yes | 12 | ? | ? | ? |
height |
3 | Yes | 3.5 | 9 | 10.5 | 3.1 |
loop |
3 | Yes | 11 | 9 | 10.5 | 3.1 |
muted |
30 | Yes | 11 | 10 | Yes | 5 |
played |
? | Yes | 15 | ? | Yes | ? |
poster |
3 | Yes | 3.6 | 9 | 10.5 | 3.1 |
preload |
3 | Yes | 4 | 9 | Yes | 3.1 |
src |
3 | Yes | 3.5 | 9 | 10.5 | 3.1 |
width |
3 | Yes | 3.5 | 9 | 10.5 | 3.1 |
Mobile | |||||||
---|---|---|---|---|---|---|---|
Android webview | Chrome for Android | Edge Mobile | Firefox for Android | Opera for Android | iOS Safari | Samsung Internet | |
Basic support | Yes | Yes | Yes | 4 | Yes | Yes | Yes |
autoplay |
Yes | Yes | Yes | 4 | Yes | 10
|
Yes |
buffered |
? | ? | Yes | 4 | Yes | ? | ? |
controls |
Yes | Yes | Yes | 4 | Yes | Yes | Yes |
crossorigin |
? | ? | Yes | 14 | ? | ? | ? |
height |
Yes | Yes | Yes | 4 | Yes | Yes | Yes |
loop |
Yes | Yes | Yes | 14 | Yes | 6 | Yes |
muted |
Yes | Yes | Yes | 14 | Yes | ? | Yes |
played |
? | ? | Yes | 15 | Yes | ? | ? |
poster |
Yes | Yes | Yes | 4 | Yes | Yes | Yes |
preload |
Yes | Yes | Yes | 4 | Yes | Yes | Yes |
src |
Yes | Yes | Yes | 4 | Yes | Yes | Yes |
width |
Yes | Yes | Yes | 4 | Yes | Yes | Yes |
object-position
and object-fit
<audio>
© 2005–2018 Mozilla Developer Network and individual contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/video