Javascript 如何设置html视频的持续时间
我正在尝试为播放列表分配持续时间。。。。但当我使用ONED时,该函数在完成该视频后调用,但我想要的是该视频应仅在其指定的持续时间内播放,然后它应停止,下一个视频应播放..我使用以下代码Javascript 如何设置html视频的持续时间,javascript,html5-canvas,Javascript,Html5 Canvas,我正在尝试为播放列表分配持续时间。。。。但当我使用ONED时,该函数在完成该视频后调用,但我想要的是该视频应仅在其指定的持续时间内播放,然后它应停止,下一个视频应播放..我使用以下代码 <video id="myVideo" height="100%" width="100%" autoplay onended="run();"> <source id="ss" src="video/video1.ogg" type='video/ogg'>
<video id="myVideo" height="100%" width="100%" autoplay onended="run();">
<source id="ss" src="video/video1.ogg" type='video/ogg'>
</video>
<script type="text/javascript">
// num_files++;
//alert(num_files);
video_count =1;
videoPlayer = document.getElementById("ss");
video=document.getElementById("myVideo");
time2= Math.round(+new Date()/1000);
function run(){
for(i=1;i<=3;i++)
{
//alert(duration[i]);
time1= Math.round(+new Date()/1000);
// alert('ctime'+time1);
dur_time=parseInt(time2,10)+parseInt(duration[i],10);
// alert('dtime'+dur_time);
video_count++;
if(time1<dur_time)
{
video_count--;
//alert(video_count);
if (video_count > num_files) video_count = 1;
videoPlayer.setAttribute("src","video/video"+video_count+".ogg");
//alert(video_count);
video.pause();
video.load();
video.play();
time1= Math.round(+new Date()/1000);
}
}
}
</script>
您需要点击播放视频时更新的timeupdate事件:
video.addEventListener('timeupdate', function() {
if (this.currentTime >= dur_time) {
this.pause();
/// next action
}
}, false);
您可能可以使用轮询(即setTimeout/setInterval/requestAnimationFrame)实现同样的效果,但使用事件是一种更干净的方法,只会在实际时间更改时更新
更新
您也可以通过这种方式在特定持续时间后停止视频,但是,这不是帧精确的,但在某些极端情况下可能会有所帮助:
var seconds = 3;
setTimeout(stopVideo, seconds * 1000); /// ms
video.play();
function stopVideo() {
if (video.isPlaying) {
video.pause();
/// next action
}
}
我们可以使用下面的代码来代替setTimeout,它对我来说工作正常
video.addEventListener("timeupdate", function() {
// alert(video_count);
dur_time=parseInt(time2,10)+7;
if (this.currentTime >= 7 || time1 >= dur_time) {
this.pause();
advanceVideo();
time2= Math.round(+new Date()/1000);
}
time1= Math.round(+new Date()/1000);
}, false);
timeupdate可以正常工作,但问题是如果视频很小,并且持续时间较长,则视频必须重复。。但在这种情况下,它不会发生。。我在视频标签上添加了循环,但同样的视频在超时后也会重复…那么如何避免这种情况呢?@user3145475如果视频重复,则每次循环时currentTime都会重置。在这种情况下,您可以使用SetTimeOutTopVideo,wantedDuration,在启动视频的同时设置。这一次,函数stopVideo可以调用pause方法。如果视频比允许的短,那么我认为你运气不好,因为我们只能在浏览器允许的情况下做这么多,而setTimeout并不是那么准确。我将用一个简短的例子更新我的答案。我们可以使用下面的代码来代替setTimeout,它对我来说工作正常。addEventListenertimeupdate,函数{//alertvideo\u count;dur\u time=parseInttime2,10+7;如果this.currentTime>=7 | time1>=dur\u time{this.pause;advanceVideo;time2=Math.round+new Date/1000;}time1=Math.round+new Date/1000;},false;我对此还有一个疑问,因为我们正在将所有视频存储在一个文件夹中,如果删除任何视频…播放列表将停止,并且不会跳到下一个…他们是否可以检查文件的可用性,如果没有,我们可以跳到下一个