的Video.js - loadeddata事件永远不会触发(Video.js - loaded

2019-09-01 01:31发布

我整合了Video.js到项目中,有几个问题。

我有它在我的HTML如下:

<video id="vidView" class="video-js vjs-default-skin" width="320" height="320" 
   poster="/siteImages/Dummy.png" preload="auto">
   <source type="video/mp4" src="" \>
</video>

而在我的javascript我打开一个源和管理,以发挥它。

var vidPlayer = _V_("vidView");
vidPlayer.src({ type: "video/mp4", src: vidlink });

vidPlayer.play();

只有这样做编程是有问题 - 源的每一秒负载和发挥会工作。 我以为我是想打的Video.js准备过,所以试图利用监听器在适当的时候推出的发挥。

我发现,某些事件永远不会触发的。 我无法摆脱“loadedalldata”事件或“loadeddata”任何东西。 该“loadstart”事件触发至少,所以我把我的.play()命令在那里。

vidPlayer.addEvent("loadstart", function(){ console.log("LOAD START Fired" );
  var myPlayer = this;
  myPlayer.play(); 
} );

但它仍然是不可靠的。 我看到的消息我的控制台上“试图恢复!” 几次。 它起到了一些影片,但有时得到越陷越深。

我失去了在获得“loadeddata”事件发生些什么呢?

此外,相关的Q - 注意到文档说去除事件侦听器的语法是:

myPlayer.removeEvent( “eventName的”,myFunc的);

是对的吗? 这似乎是“myFunc的”部分是多余的,我想知道,如果这是一个复制/粘贴错误的文档 ,或者如果这是正确的语法。

THX提前。

Answer 1:

我怀疑你遇到了我也做了同样的问题。 如果你的浏览器使用HTML5视频(而不是Flash后备)一些事件,如loadedmetadataloadeddata ,结合了Video.js事件侦听器之前可能会闪光。

如果你正在做一些预加载,这是特别真实的,有当视频开始加载,当你初始化的Video.js之间的延迟。 它似乎也时有缓存副本,这就是为什么它的工作原理上的每一秒刷新(无效缓存)发生。

解决的办法是,就把你的视频initlisation东西在<head> ,而不是在文档的底部。 如果这是不理想(这是不是我们),我们添加了一个事件侦听器<head>然后检查之后我们初始化播放器。 例如

<head>

<script>
var loadedmetadata = false;
if (window.addEventListener) {
    window.addEventListener('loadedmetadata', function(ev) {
            loadedmetadata = true;
    }, true);
}
</script>

再后来在你的脚本:

if (loadedmetadata === true && videoPlayer.techName === 'html5') {
    // call the callback you would have attached to
    // the event listener.
} else {
    // add event listener here
]

window.addEventListener没有在IE7 / 8的支持,但是那没关系,因为它们不支持HTML5视频无论如何,所以它永远不会火。 IE9支持window.addEventListener和HTML5视频,所以预期它会奏效。

我们还检查techNamehtml5 ,因为当我们初始化的Video.js对象被创建的Flash播放器,因此事件不应该预先焙烧。



Answer 2:

loadeddata不会开始播放前,一定火。 在Flash它从来不会与HTML5事件从视频元素中继所以它依赖于浏览器的行为。

loadedalldata是整个视频下载的时候,所以是不可能开始播放之前发生。

您可以指定哪些工作以从活动中删除,因为你可能会束缚一个以上功能的情况下,如

vidPlayer.addEvent("play", onPlay1 );
vidPlayer.addEvent("play", onPlay2 );
vidPlayer.removeEvent("play", onPlay1 ); // onPlay2() would still be executed


文章来源: Video.js - loadeddata event never fires