首页 > 其他分享 >js获取上传音视频的时长

js获取上传音视频的时长

时间:2022-11-07 13:12:34浏览次数:52  
标签:视频 url js URL video var ele 音视频 时长

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>

 

方式二;通过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秒
} }
/>

标签:视频,url,js,URL,video,var,ele,音视频,时长
From: https://www.cnblogs.com/xzqyun/p/16865584.html

相关文章

  • js中innerHTML与innerText的用法与区别
    div.innerHTML: 也就是从对象的起始位置到终止位置的全部内容,包括Html标签。div.innerText: 从起始位置到终止位置的内容,但它去除Html标......
  • moment.js:105 Uncaught TypeError: date.clone is not a function
    在使用Antd的表单动态填充的方法setFieldsValue时出现的报错,是因为时间选择器回显出现了问题,当前的格式不支持显示,需要使用momentjs转换为正确的回显格式importm......
  • js把json格式化
    1字符串转json对象2json对象转格式化的字符串<html><head></head><body><inputtype="button"οnclick="aa()"/><textarearows="13"cols="220"id="t"></textare......
  • nodejs 安装篇
    直接使用ubuntu软件源安装sudoaptupdatesudoaptinstallnodejsnpmnodejs--versionv10.19.0npm-v从nodesource安装nodejs和npm复制代码安装仓库`https:......
  • HTML躬行记(4)——Web音视频基础
    公司目前的业务会接触比较多的音视频,所以有必要了解一些基本概念。文章涉及的一些源码已上传至Github,可随意下载。一、基础概念本节音视频的基础概念摘自......
  • leetcode 54. 螺旋矩阵 js高效实现
    给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。示例1:  输入:matrix=[[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]......
  • js中变量base64加密传输
    首先对base64进行定义:varBase64={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encode:function(e){......
  • js中的call,apply与bind
    call,apply,bind都是一种方法。一,call()①:call()是可以调用函数的。1functionfn(){2console.log(12)3}45fn.call()//12 ②:通过给call()内部传......
  • threejs_threejs3
    向量的clone方法和copy方法求两点之间的距离向量之间的叉乘three.js生成的renderer.domElement如何添加到目标的元素中直接引入想要的函数,可以不需要像以前那样引......
  • js中截取字符串:
    js中截取字符串:str.substr(startIndex,length);//从下标为startIndex的字符开始截取,截取length个字符str.substring(startIndex,endIndex)//从下标为startIndex的字符开......