关闭

js获取上传音视频的时长

时间: 2019-01-07阅读: 4903标签: 视频

获取上传视频路径,将该路径放入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秒
} }
/>



站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

2.广告联盟: 整理了目前主流的广告联盟平台,如果你有流量,可以作为参考选择适合你的平台点击进入

链接: http://www.fly63.com/article/detial/1788

关闭

DPlayer简单用法

DPlayer 是一个支持弹幕的 HTML5 视频播放器。支持 Bilibili 视频和 danmaku,实时视频(HTTP Live Streaming,M3U8格式)以及 FLV 格式

视频全屏弹幕实现

这个问题如果思路错了就是个死胡同。所以我在找问题的时候趟了很多坑。思路错在我不应该使用视频的全屏,敲黑板!划重点啦!不要使用视频的全屏!(解决了问题的时候才幡然醒悟)

Web视频格式

网络视频一直都很火。虽然在页面上嵌入 Instagram 和 Youtube 视频非常简单,但是有越来越多的需求 —— 比如许多电子商务的场景 —— 要求定制的视频传输方法。

如何实现沉浸式视频体验?

沉浸式视频体验,大致内容是一个页面里有几十个视频,用户点击其中一个视频时,该视频自动滑动到屏幕可视区域的顶部开始播放,并暂停其他视频,该视频滑出屏幕可视区域之后要自动暂停。

web视频播放

毫无疑问,现在是短视频、直播的时代。视频内容逐渐代替图文形式成为网友们获取新鲜事物以及展现自我的一大媒介。随着5G的到来,2020年属于直播短视频爆发式增长的一年,电商平台也都涌入直播营销的大风口

基于 WebRTC 的 RTSP 视频实时预览

由于项目需要,需要使用摄像头预览功能,设备型号为海康威视。目前已存在的基于 FFmpeg 的方案延迟都太高,所以项目最终选择基于此方案。方案选用为基于 WebRTC 的视频即时通讯,它原生支持对 RTP 协议的解码

使用 multipart/x-mixed-replace 实现 http 实时视频流

关于实时视频传输,业界已经有非常多成熟方案,分别应用在不同需求场景。本文介绍一种基于 HTTP ,非常简单、易理解的方案,实用性不强,但有助于理解 HTTP 协议。

Web端直接播放 .ts 视频

最近项目中需要前端播放 .ts 格式视频,捣鼓了几天学习到很多知识,也发掘了一种优秀的解决方案,项目中已存储的 .ts 切片数量众多,已经占用了NAS服务器绝大部分的资源,生成的 .m3u8 索引虽然非常小

如何将视频设置为网页背景【转】

有时候为一个网页添加一个动画效果的背景,会让网页增加一定的韵味,让网页看起来与众不同。需要用到了video/标签,然后在source里面写视频的路径,autoplay用来使其自动播放,muted用来使其静音,loop为循环播放

移动端视频h5表现问题汇总

同屏播放视频、移动端视频预加载:由于移动端不能预加载视频,所以hack一种方案:监听WXJSBridge WeixinJSBridgeReady、微信安卓环境下需要在touchmove事件中阻止掉默认事件,否则不能触发视频播放 、 由于微信安卓版本基于x5内核,视频会出现全屏按钮,而且去不掉,会误导用户点击

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!