js獲取上傳音視頻的時長


獲取上傳視頻路徑,將該路徑放入video標簽,獲取視頻時長 

 

方式一:隱藏一個音頻標簽,播放獲取。

<video style="display:none;" controls="controls" id="videoData" oncanplaythrough="geTime(this)"></video> <input type="file" onchange="changeFile(this)" /> <script type="text/JavaScript"> function geTime(ele) { var hour = parseInt((ele.duration)/3600); var minute = parseInt((ele.duration%3600)/60); var second = Math.ceil(ele.duration%60); console.log("這段視頻的時長為:"+hour+"小時,"+minute+"分,"+second+"秒"); } function changeFile(ele){ var video = ele.files[0]; var url = URL.createObjectURL(video); console.log(url); document.getElementById("videoData").src = url; } </script>

廣州vi設計公司http://www.maiqicn.com 辦公資源網站大全 https://www.wode007.com

方式二;通過new Audio的方式獲取:

<input type="file" onchange="changeFile(this)" > <script> function changeFile(ele) { var content = ele.files[0] var url = URL.createObjectURL(content);//獲取錄音時長 var audioElement = new Audio(url);//audio也可獲取視頻的時長 var duration; audioElement.addEventListener("loadedmetadata", function (_event) { duration = audioElement.duration; console.log(duration/60); }); } </script>

說明:

1.URL.createObjectURL()方法會創建一個 DOMString,其中包含一個表示參數中給出的對象的URL。這個 URL 的生命周期和創建它的窗口中的 document 綁定。這個新的URL 對象表示指定的 File 對象或 Blob 對象。(個人感覺可以把對象轉換成url使用,十分靈活方便,特別是對於文件對象)。 

2.loadedmetadata 當指定的音頻/視頻的元數據已加載時,會發生 loadedmetadata 事件。音頻/視頻的元數據包括:時長、尺寸(僅視頻)以及文本軌道。

 

上傳之前限制一下視頻的時長 

由於用阿里雲解析視頻的時候,是按照視頻時長收費的,為了節省測試費用,老板要我在上傳之前限制一下視頻的時長!這里通過video 的視頻預覽來實現的。(參考:https://www.jianshu.com/p/dc60d8dc07de)

const gettime = (video, size) => { const promise = new Promise(resolve => { video.addEventListener('canplaythrough', e => { console.log(58, e, e.target.duration, size) if (e.target.duration <= size) { resolve(true) } else { resolve(false) } }) }) return promise } export const checkSize = async (files, size) => { // console.log(56, Number.isNaN(Number(size)), size) if (!files || !files[0]) return false // 這一條是正式服務器不需要這段所以當size 為undefined 時默認 返回 true if (Number.isNaN(Number(size))) return true const checktimevideo = document.getElementById('checktimevideo') if (checktimevideo) { document.body.removeChild(checktimevideo) } const video = document.createElement('video') const url = URL.createObjectURL(files[0]) video.src = url video.id = 'checktimevideo' video.style.display = 'none' document.body.appendChild(video) return await gettime(video, size) } // 這個函數調用的時候也非常簡單 <input type='file' onChange = { async e => { e.persist() // 這個是用來處理 SyntheticEvent 問題的 const isok = await checkSize(e.target.files[0], 200) // 200 表示200秒 } } />

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM