# HTML Video
Super easy to add videos directly to your site! No more dealing with Flash or whatever crazy plugins back in the day 😂. Simplify and move forward with HTML5 <video>
tag, yay 🥳
<video controls>
<source src="video.webm" type="video/webm" />
<source src="video.mp4" type="video/mp4" />
<track src="subtitle.vtt" kind="subtitles" />
Your browser doesn't support HTML5 video.
</video>
Tag | |
---|---|
<video> | Defines the video element |
<source> | Defines the video source |
<track> | Defines the text track |
# HTML5 Video Basics
Here's the very basic for you to get your video added to your site.
<video src="video.mp4" controls></video>
# Video Fallback
The support for <video>
is quite good. But just in case your user's browser doesn't support HTML5 video tag, it's good to add a text to let them know. The content inside the tag acts as a fallback in browsers that don't support the <video>
element.
<video src="video.mp4" controls>
Your browser doesn't support HTML5 video tag.
</video>
What's even better! If your video is hosted somewhere else, you can link that up. That way your user can still watch your video.
<video src="video.mp4" controls>
<p>
Your browser doesn't support HTML5 video tag.
Here's <a href="video.mp4">a link to the video</a>
<p>
</video>
Of course, the fallback can be anything. You can add use an <img>
.
<video src="video.mp4" controls>
<img src="image.png" >
</video>
Or I daresay even some flash object 😳
<video src="video.mp4" controls>
<object type="application/x-shockwave-flash">
<!-- flash stuff -->
</object>
</video>
# Defining Video Source
There are 2 ways you can specify the source of your video.
# 1. Define with src
attribute
<video
src="video.mp4" // 👈
controls
></video>
# 2. Define source
tag
<video controls>
<source src="video.mp4">
</video>
The benefit of using <source>
is that you can add different video type of your videos. Not all browsers support the same video format. So by passing in multiple video file formats, you can let your browser decide which works them 👍
<video controls>
<source src="video.webm" type="video/webm">
<source src="video.ogg" type="video/ogg">
<source src="video.mp4" type="video/mp4">
</video >
# Video Attribute
The video attribute are very similar to the <auto>
attributes and it operates very similar. I discuss these shared attributes in my HTML audio attributes article, so check that out if you want to read about them.
controls
autoplay
muted
loop
preload
Let me go through some of the attributes that are unique to <video>
poster
This attribute allow to pass in an image URL, so an image can be displayed while the video is downloading or until the play button is pressed.
<video poster="image.png"></video>
height
You can use this attribute to set the height of the video player.
<video height="100"></video>
<!-- translates to 100 pixels -->
Note, you can only pass absolute values. No percentages!
width
You can use this attribute to set the height of the video player.
<video width="100"></video>
# Adding Subtitles & Captions using <track>
tag
If you want to add a text track, then you can add the <track>
child element to your <video>
. There are 4 attributes of the <track>
tag.
<track kind="..." label="..." src="..." srclang="..." />
kind
There are several text tracks you can add, and you can indicate it in the kind
attribute.
<track kind="..." />
kind | |
---|---|
subtitles | Dialogue in different languages |
captions | Transcription of the video |
descriptions | Textural description of the video content helps user who can't view the video |
chapters | Chapter titles are useful when navigating the media resource |
metadata | It is used by script and not visible by the user |
srclang
When you set the kind="subtitles"
, you must also define the srclang
<track kind="subtitles" srclang="zh-TW" />
It must be a valid BCP 47 language tag.
src
In this attribute, is where you indicate your .vtt
file.
<track src="subtitles.vtt" />
label
This attribute is where you specify the title of your text track.
<track label="English" />
default
If you have multiple text track, you can use the default
boolean attribute to identify which track should be enabled by default if the user's preference is not specified.
<video>
<track kind="subtitles" src="english-subtitles.vtt" srclang="en" default />
<track kind="subtitles" src="chinese-subtitles.vtt" srclang="zh-TW" />
</video>
# JavaScript Video Events
There are a lot of events you can listen to on the video file. For example:
Event | Fired when |
---|---|
play | When the video starts to play |
pause | When the video is paused |
ended | When the video is completed |
You can find the full event list on MDN
# How to check when video has finished
To listen to an event, you can use the addEventListener
to listen for the specific event.
<video id="some-video"></video>
const videoEl = document.getElementById('some-video');
videoEl.addEventListener('ended', function() {
// do something when the video has finished playing
});
You can also add the even using the event attribute like this:
<video onended="doSomething()"></video>
function doSomething() {
// do something
}
Alternatively, you can also access this as a property on the element all in your js file like this:
const videoEl = document.getElementById('some-video');
videoEl.onended = function() {
// do something when the video has finished playing
};
# Browser Support
The support is excellent for all modern browsers, including Internet Explorer 9 and up 👍
Browser | |
---|---|
Chrome | ✅ |
Firefox | ✅ |
Safari | ✅ |
Edge | ✅ |
Internet Explorer | ✅ |
# Community Input
_@faintpulses:_ Tip: for cross browser support, if you want auto play set, make sure to mute the video within the
<video>
tag._@sssangha90:_ You can leave out
controls
to avoid browser default controls, set a class to the video tag, and style the controls and functionality of the controls within the stylesheet.css and script.js
# Resources
- MDN Web Docs: source
- MDN Web Docs: track
- MDN Web Docs: Media Events
- MDN Web Docs: Introduction to events
- MDN Web Docs: Adding captions and subtitles to HTML5 video
- MDN Web Docs: Video Attributes
- w3schools: HTML5 Video
- w3schools: video
- w3schools: track
- w3schools: source
- w3schools: HTML Audio/Video DOM Reference
- w3: HTML5 Video Events and API
- HTML5 Video
- How to Embed a Video in HTML
- Stack Overflow: Detect when an HTML5 video finishes
- Stack Overflow: Image placeholder fallback for HTML5 Video
- Stack Overflow: How can I display an image if browser does not support HTML5's video tag
- Videos can be expensive