在上传视频文件之前使用JavaScript的视频长度

问题描述 投票:0回答:1

我想在上传之前从用户桌面上的本地文件中找到视频长度。 “video.onload”事件没有触发(请参阅代码),因此我在加载视频后帮助自己使用setTimeout。但我不喜欢使用setTimeout。有更干净的方式吗?

function handleFileSelect(evt) {
	var files = evt.target.files; // FileList object
    var output = [];
    for (var i = 0, f; f = files[i]; i++) {
		var video = document.getElementById('myVideo');
		var obj_url = window.URL.createObjectURL(f);
		video.src = obj_url;
        console.log(f.name+ " " +f.type);
        console.log(video.src);

		video.onload = function() {
    // It didn't work so I used delayedchk() 
    // window.URL.revokeObjectURL(this.src);
		}
    delayedchk();    
	}
}
document.getElementById('files').addEventListener('change', handleFileSelect, false);

function show(){
	vid = document.getElementById("myVideo");
	document.getElementById("laenge").innerHTML = Math.floor(vid.duration);
	vid.play();
  window.URL.revokeObjectURL(vid.src);
}

function delayedchk(){
	  var vdur = document.getElementById("myVideo").duration;
    console.log(typeof vdur +' = '+vdur);
    if( isNaN(vdur) ){
      	setTimeout(delayedchk,500);
    }else{
		show();
    }
}
<!DOCTYPE html> 
<html> 
<body onload="show()">
<video id="myVideo" src="https://www.w3schools.com/tags/mov_bbb.mp4" type="video/mp4"></video>
  <h1>Lenght: <span id="laenge"></span> sec.</h1>
  <input type="file" id="files" name="files[]" multiple />
</body> 
</html>
javascript html video file-upload
1个回答
0
投票

您可以通过收听duration property事件来检索视频的loadedmetadata

var myVideoPlayer = document.getElementById('myVideo');
myVideoPlayer.addEventListener('loadedmetadata', function() {
  document.getElementById('laenge').innerHTML = myVideoPlayer.duration;
});
<h1>Length: <span id="laenge"></span> sec.</h1>
<video id="myVideo" src="https://www.w3schools.com/tags/mov_bbb.mp4" type="video/mp4" autoplay></video>
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.