【问题标题】:HTML5 Play movie from multiple parts without flashing screenHTML5从多个部分播放电影而不闪烁屏幕
【发布时间】:2015-09-29 12:01:38
【问题描述】:

我有一个视频标签和一部电影,每个片段的剪辑时间为 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>

【问题讨论】:

    标签: javascript jquery html flash video


    【解决方案1】:

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

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

    参考这个sn-p:

    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');
    }
    .hidden {
      position: absolute;
      top: -10000px;
      left: -10000px;
    }
    video {
      background: black;
    }
    <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>

    【讨论】:

    • @MMPP,快乐编码
    【解决方案2】:

    这可能会帮助您我们制作两个视频标签,并在第一个视频标签上设置第一个 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);
    
            };
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多