javascript - 当页面上的所有视频都已完全加载时执行 JavaScript

标签 javascript jquery video html5-video

我已修改此脚本以接受视频而不是图像:

http://www.catchmyfame.com/catchmyfame-jquery-plugins/jquery-beforeafter-plugin/

在本地,它工作正常,但是当我上传到服务器时,视频不同步。第一个视频比另一个视频开始得早。检查一下:

http://amarsyla.com/sandbox/beforeafter/

HTML:

<div id="container">
    <div>
        <video alt="before" autoplay="true" loop="true" width="600" height="366">
            <source src="before.mp4" type="video/mp4;">
        </video>
    </div>
    <div>
        <video alt="after" autoplay="true" loop="true" width="600" height="366">
            <source src="after.mp4" type="video/mp4;">
        </video>
    </div>
</div>

我使用以下代码初始化插件:

$(window).load(function() {
    $('#container').beforeAfter();
});

显然,window.load 并不能完成这项工作。我需要一个 JavaScript 事件或类似的事件,两个视频都已加载并且可以开始同时播放时,将触发该事件。我希望视频彼此完美同步,因此每个视频同时开始,并且我认为通过在两个视频完全加载后初始化插件可以实现这一点。我试过这个:

var vid = document.getElementById("myVideo");
vid.oncanplaythrough = function() {
    alert("Can play through video without stopping");
};

这并不像我预期的那样工作。它并不总是会火。任何帮助将不胜感激。

最佳答案

您问题中的代码与链接中的代码不同,因此我将使用后者,因为那是实际运行的代码。

看起来发生的情况是,即使视频正在播放,几秒钟后它们也会失去同步,因为它们必须等待来自网络的更多数据。人们可能认为“oncanplaythrough”足以假设视频有足够的缓冲,可以在不暂停的情况下一直播放,但情况并非总是如此。

理论上,当浏览器猜测数据进入的速度比您播放数据的速度快时,“canplaythrough”就会触发,而“canplay”则在有足够的数据来显示当前的一两帧时触发时间。但 Chrome 触发了“canplaythrough”immediately在“canplay”之后,所以你不能指望它。即使在其他表现更好的浏览器上,数据传输仍然可能会快速启动,然后在事件触发后减慢。

因此,这意味着您必须持续观看任一视频上的任何“等待”事件,并暂停它们,直到它们再次 catch 。

以下是一个示例,您可以将其用作入门引用: http://code.chirls.com/whiteknuckles/

这是非常旧的代码,不是我最好的作品。如果我今天写的话,我会采取不同的做法,但它似乎工作得相当不错。

关于javascript - 当页面上的所有视频都已完全加载时执行 JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28382195/

相关文章:

Javascript 继承和对象字面量

javascript - Tablesort 在 IE 中无法正常工作

javascript - 从另一个嵌套 Controller 调用函数

javascript - 从响应文本中提取字符串

javascript - 进行 AJAX 调用时出现 500 内部服务器错误

video - mp3 音频 + background.jpg = ffmpeg 中的 result.mp4

android - ffmpeg 混合以排除热门视频背景

javascript - 使用 Javascript/Jquery 在单击按钮时更改 div 中的文本

javascript - jQuery 版本冲突 - 同时加载两个版本

ios - 如何在 iOS 中从相机流式传输实时视频