UNPKG

get-blob-duration

Version:

Convenience method to patch Chromium bug when getting duration of HTML5 video or audio Blob.

33 lines (29 loc) 980 B
/** * @param {Blob|String} blob * * @returns {Promise<Number>} Blob duration in seconds. */ export default async function getBlobDuration(blob) { const tempVideoEl = document.createElement('video') const durationP = new Promise((resolve, reject) => { tempVideoEl.addEventListener('loadedmetadata', () => { // Chrome bug: https://bugs.chromium.org/p/chromium/issues/detail?id=642012 if(tempVideoEl.duration === Infinity) { tempVideoEl.currentTime = Number.MAX_SAFE_INTEGER tempVideoEl.ontimeupdate = () => { tempVideoEl.ontimeupdate = null resolve(tempVideoEl.duration) tempVideoEl.currentTime = 0 } } // Normal behavior else resolve(tempVideoEl.duration) }) tempVideoEl.onerror = (event) => reject(event.target.error) }) tempVideoEl.src = typeof blob === 'string' || blob instanceof String ? blob : window.URL.createObjectURL(blob) return durationP }