Get HTML5 Video Duration
HTML5 video is exciting, if only for the reason that we no longer need Flash or other third party plugins to render media. We can also create custom controls and displays around the video, and one of those displays should be the duration of the video. Let me show you how to get and display the video duration!
The JavaScript
video elements have a duration property which represents the number of seconds in the video. To display the duration in a pretty fashion, you'll need to use parseInt and modulus (%):
// Assume "video" is the video node
var i = setInterval(function() {
if(video.readyState > 0) {
var minutes = parseInt(video.duration / 60, 10);
var seconds = video.duration % 60;
// (Put the minutes and seconds in the display)
clearInterval(i);
}
}, 200);
It's important to use setInterval and check the video's readyState in case the video hasn't loaded by the time you attempt to pull the duration. parseInt is used to get the minute number and modulus is used to get the second count.
![Conquering Impostor Syndrome]()
Two years ago I documented my struggles with Imposter Syndrome and the response was immense. I received messages of support and commiseration from new web developers, veteran engineers, and even persons of all experience levels in other professions. I've even caught myself reading the post...
![Responsive Images: The Ultimate Guide]()
Chances are that any Web designers using our Ghostlab browser testing app, which allows seamless testing across all devices simultaneously, will have worked with responsive design in some shape or form. And as today's websites and devices become ever more varied, a plethora of responsive images...
![Shake Things Up Using jQuery UI’s Shake Effect]()
Yesterday I created a tutorial showing you how you can shake an element using Fx.Shake, a MooTools component written by Aaron Newton. It turns out that jQuery UI also has a shake effect which can draw attention to an element.
The XHTML
Exactly the same as...
![MooTools Equal Heights Plugin: Equalizer]()
Keeping equal heights between elements within the same container can be hugely important for the sake of a pretty page. Unfortunately sometimes keeping columns the same height can't be done with CSS -- you need a little help from your JavaScript friends. Well...now you're...
There are two events you can use instead of an interval
a)
loadedmetadatab)
durationchangeOf course you still need to check
readyStateinitially.(function(){ var video = document.querySelector('video'); var onDurationChange = function(){ if(video.readyState){ //to your thing } }; video.addEventListener('durationchange', onDurationChange); onDurationChange(); })();You need to divide video duration by 60 to get minutes, then use parseInt with radix 10. We should test if video duration > 0 before our division.
You need to divide video duration by 60 to get minutes, then use parseInt with radix 10.
if (video.duration > 0) { var minutes = parseInt(video.duration / 60, 10); var seconds = video.duration % 60; }David,
You forgot to divide the duration (seconds) by 60 to get minutes:
Thanks for the great articles!
Since when (and on which platforms)
setIntervalpasses the interval ID as argument to the callback function?HTML5 video is really great, gone are the days struggling with Flash codes and easily display our videos. Thanks for the JS code.
Thanks for the code! What if I want also to get the hours and display them as a
HH:mm:ssformat accordingly?I m trying to buid the video using jquery. Please help to fetch the video duration before loaded
var video=$(''); var source= $(''); $(source).appendTo(video); $(source).attr('src',php.mp4); $(source).attr('type','video/mp4'); //var d= $(video).duration; var d=document.querySelector('video').duration; console.log(d);You could just use the javascript
whilefunction…while (true) { if (video.readyState) { //blabla code break; } //code to execute if not accomplished }