'use strict'; /*@ Ox.getVideoFormat Get supported video formats (formats) -> of supported formats formats list of available formats @*/ Ox.getVideoFormat = function(formats) { var aliases = { 'mp4': 'h264', 'm4v': 'h264', 'ogv': 'ogg' }, format, tests = { 'h264': 'video/mp4; codecs="avc1.42E01E, mp4a.40.2"', 'ogg': 'video/ogg; codecs="theora, vorbis"', 'webm': 'video/webm; codecs="vp8, vorbis"' }, userAgent = navigator.userAgent.toLowerCase(), video = document.createElement('video'); Ox.forEach(formats, function(f) { var alias = aliases[f] || f; if (!!(video.canPlayType && video.canPlayType(tests[alias]).replace('no', ''))) { // disable WebM on Safari/Perian, seeking does not work if (!( alias == 'webm' && /safari/.test(userAgent) && !/chrome/.test(userAgent) && !/linux/.test(userAgent) )) { format = f; return false; // break } } }); return format; }; /*@ Ox.getVideoInfo url video url callback gets called with object containing duration, width, height @*/ Ox.getVideoInfo = Ox.queue(function(url, callback) { var video = document.createElement('video'); video.addEventListener('loadedmetadata', function(event) { var info = { duration: this.duration, widht: this.videoWidth, height: this.videoHeight, }; this.src = ''; callback(info); video = null; }); video.preload = 'metadata'; video.src = url; }, { maxThreads: 4 });