HTML5从多个部分播放电影而不闪烁屏幕

时间:2015-09-29 12:01:39

标签: javascript jquery html5 flash video

我有一个视频标签和一部电影,每部分都是10秒钟,部分名称为:1.webm,2.webm ....... 1535.webm。我试着制作一个js代码,找到视频结束时播放下一个,但我有一个问题:屏幕闪烁,电影没有连续播放。我需要像电影一样播放,连续视频。

有没有选择呢?如果它不在JavaScript中,或者它是许多脚本和代码的组合,则无关紧要。

<video id="my_video" width="640" height="480" autoplay>
    <source src="files/1.webm" type="video/webm">
</video>

<script>
var src = 0;
var video = document.getElementById("my_video");

document.querySelector("#my_video").addEventListener("ended", nextVideo, false);

function nextVideo() {
    src = src + 1;
    video.src = "files/" + src + ".webm";
    video.play();
}
</script>

2 个答案:

答案 0 :(得分:1)

如果您要更改视频的src,则会变得非常困难,因为一旦src更改,它将加载整个视频,因此您将面临闪烁的屏幕效果。使用视频部件似乎无法获得无缝视频,但您可以这样尝试:

为每个视频使用不同的elements预加载所有视频,并将preload="auto"属性设置为所有元素。您需要以一种一次播放一个视频的方式播放元素的可见性。第一个视频将是autoplayed。当ended事件触发时,只需将下一个元素的可见性更改为true,将前一个元素更改为false(不要使用dispay:block/display:none,因为我观察到在某些移动设备中,视频标签具有样式display:none未被浏览器预先加载。同时为视频保留一些background,以避免白色背景闪光效果。

请参阅此代码段:

&#13;
&#13;
var my_video = document.getElementById("my_video");
var my_video2 = document.getElementById("my_video2");
document.querySelector("#my_video").addEventListener("ended", nextVideo, false);

function nextVideo() {
  my_video2.play();
  my_video2.setAttribute('class', '');
  my_video.setAttribute('class', 'hidden');
}
&#13;
.hidden {
  position: absolute;
  top: -10000px;
  left: -10000px;
}
video {
  background: black;
}
&#13;
<video id="my_video" width="640" height="480" preload="auto" autoplay controls>
  <source src="test.mp4" type="video/mp4">
</video>
<video id="my_video2" width="640" height="480" preload="auto" controls class="hidden">
  <source src="test2.mp4" type="video/mp4">
</video>
<button type="button" onclick="nextVideo()">Next</button>
&#13;
&#13;
&#13;

答案 1 :(得分:1)

这可能会帮助我们制作两个视频标签,并在第一个视频标签上设置前10秒电影,在第二个视频标签上设置第二个电影,第三个再次在第一个视频标签上设置此过程逐个完成。

检查我的链接http://jsfiddle.net/qoch687a/2/

有timeupdate事件每秒触发,我们检查持续时间

video.ontimeupdate = function timeUp(e){

    if(parseInt(e.originalTarget.duration - e.originalTarget.currentTime)==1){
        document.getElementById("my_video1").src=videos[1];
        document.getElementById("my_video1").play();
        document.getElementById("my_video1").onloadeddata = function(){
            clearInterval('intTime');
            intTime = setTimeout(function(){document.getElementById("my_video").style.display="none";
            document.getElementById("my_video1").style.display="block";},1000);

        };
    }

}