上传媒体文件获取音频/视频长度

 // 获取视频时长
 let url = URL.createObjectURL(file);
 let audioElement = new Audio(url);
 audioElement.addEventListener('loadedmetadata', function (item) {
 let duration = parseInt(audioElement.duration);
 that.videoDuration = duration;
 console.log("秒数:", duration);
 });
 // 移除事件监听器
 audioElement.removeEventListener('loadedmetadata', function (item) { });

代码解释

1. let url = URL.createObjectURL(file);
作用:为传入的 file 对象(通常是一个音频文件)生成一个临时的 URL。
说明:file 是一个文件对象,通常来自 <input type="file"> 的文件选择或拖拽上传。
URL.createObjectURL(file) 会生成一个唯一的 URL,指向该文件的内容。这个 URL 是临时的,只在当前页面有效。

2. let audioElement = new Audio(url);
作用:创建一个 <audio> 元素,并设置其 src 为刚刚生成的临时 URL。
说明:new Audio(url) 是 JavaScript 中创建音频对象的一种方式,等同于在 HTML 中使用 <audio src="url"></audio>。此时,音频文件开始加载,但尚未播放。

3. audioElement.addEventListener('loadedmetadata', function (item) { ... });
作用:为音频元素添加一个事件监听器,监听 loadedmetadata 事件。
说明:loadedmetadata 事件在音频的元数据(如时长、编码格式等)加载完成后触发。当元数据加载完成后,回调函数会被执行。

4. let duration = parseInt(audioElement.duration);
作用:获取音频的时长(以秒为单位),并将其转换为整数。
说明:audioElement.duration 返回音频的总时长(以秒为单位,可能是小数)。parseInt 将时长转换为整数(去掉小数部分)。

5. that.videoDuration = duration;
作用:将音频的时长存储到 that.videoDuration 变量中。
说明:that 可能是外部作用域的一个对象或上下文(例如 Vue.js 组件中的 this)。videoDuration 是一个自定义变量,用于存储音频的时长。

6. console.log("秒数:", duration);
作用:在控制台输出音频的时长(以秒为单位)。
说明:这是一个调试语句,用于检查音频时长是否正确加载。

总结
这段代码的核心功能是:
为传入的音频文件生成一个临时 URL。
创建一个音频元素并加载该文件。
监听元数据加载完成的事件,获取音频的时长并存储到变量中。
在控制台输出音频的时长(以秒为单位)。

注意事项
临时 URL 的生命周期:
URL.createObjectURL 生成的 URL 是临时的,页面卸载后会自动释放。如果需要手动释放,可以调用 URL.revokeObjectURL(url)。

跨域问题:
如果音频文件来自不同的域名,可能会遇到跨域问题,导致无法加载元数据。
兼容性:
URL.createObjectURL 和 Audio API 在现代浏览器中广泛支持,但在一些旧版浏览器中可能不兼容。
小数部分:
使用 parseInt 会去掉时长的小数部分。如果需要更精确的时长,可以直接使用 audioElement.duration。
示例场景
假设用户上传了一个 MP3 文件,这段代码可以帮助你获取该文件的时长,并将其存储到变量中,供后续使用(例如显示时长或限制上传文件的长度)。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值