coderef

<video>Baseline · Widely available

The &#x3C;video> element plays videos or movies, optionally with controls provided by the browser.

Supported in all major browsers for at least 30 months — safe to use without fallbacks. Baseline since Jul 29, 2015. Widely available since Jan 29, 2018.

Browser support

DesktopChrome
1–2Not supported
3+Supportedsince Sep 15, 2009
Current: 155
Edge
12+Supportedsince Jul 29, 2015
Current: 154
Firefox
1–3Not supported
3.5+Supportedsince Jun 30, 2009
Current: 157
Safari
1–3Not supported
3.1+Supportedsince Mar 18, 2008
Current: 27
MobileChrome Android
18+Supportedsince Jun 27, 2012
Current: 155
Firefox Android
4+Supportedsince Mar 29, 2011
Current: 157
Safari iOS
1–2Not supported
3+Supportedsince Jun 17, 2009
Current: 27

How to use

This feature is Baseline widely available — use it freely, no fallback needed.

Example

Full syntax and examples are on MDN: HTMLMediaElement.

Feature detection

JS · check before using
const el = document.createElement("video");
if (!(el instanceof HTMLUnknownElement)) {
  // <video> is supported
}

Sub-features

Support for each part of the feature (78). The overall table above shows when the whole feature works.

Show 58 more
Sub-featureChromeEdgeFirefoxSafariChrome AndroidFirefox AndroidSafari iOS
HTMLMediaElement.load3123.53.11843
HTMLMediaElement.loadeddata_event3123.53.11843
HTMLMediaElement.loadedmetadata_event3123.53.11843
HTMLMediaElement.loadstart_event312641863
HTMLMediaElement.loop31211418143
HTMLMediaElement.muted3123.53.11843
HTMLMediaElement.networkState3123.53.11843
HTMLMediaElement.pause3123.53.11843
HTMLMediaElement.pause_event3123.53.11843
HTMLMediaElement.paused3123.53.11843
HTMLMediaElement.play3123.53.11843
HTMLMediaElement.play.returns_promise50175310505310
HTMLMediaElement.play_event3123.53.11843
HTMLMediaElement.playbackRate312203.118203
HTMLMediaElement.played312153.118153
HTMLMediaElement.playing_event3123.53.11843
HTMLMediaElement.preload512451845
HTMLMediaElement.progress_event31263.11863
HTMLMediaElement.ratechange_event3123.53.11843
HTMLMediaElement.readyState3123.53.11843
HTMLMediaElement.seekable31283.11883
HTMLMediaElement.seeked_event3123.53.11843
HTMLMediaElement.seeking3123.53.11843
HTMLMediaElement.seeking_event3123.53.11843
HTMLMediaElement.src3123.53.11843
HTMLMediaElement.stalled_event3123.53.11843
HTMLMediaElement.suspend_event3123.53.11843
HTMLMediaElement.timeupdate_event3123.53.11843
HTMLMediaElement.volume3123.53.1184✕
HTMLMediaElement.volumechange_event31263.11863
HTMLMediaElement.waiting_event31263.11863
HTMLVideoElement3123.53.11843
HTMLVideoElement.height3123.53.11843
HTMLVideoElement.playsInline7579✕1075✕10
HTMLVideoElement.poster3123.63.11843
HTMLVideoElement.resize_event3793.53.11843
HTMLVideoElement.videoHeight3123.53.11843
HTMLVideoElement.videoWidth3123.53.11843
HTMLVideoElement.width3123.53.11843
MediaError31243.11842
MediaError.code31243.11842
MediaError.message59795215595215
TimeRanges61243.11842
TimeRanges.end61243.11842
TimeRanges.length61243.11842
TimeRanges.start61243.11842
video3123.53.11843
video.autoplay3123.53.118410
video.controls3123.53.11843
video.crossorigin33≤187410337910
video.height3123.53.11843
video.loop312113.118146
video.muted301211530144.2
video.playsinline7579✕1075✕10
video.poster3123.63.11843
video.preload31243.11843
video.src3123.53.11843
video.width3123.53.11843