我整合了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提前。
我怀疑你遇到了我也做了同样的问题。 如果你的浏览器使用HTML5视频(而不是Flash后备)一些事件,如loadedmetadata
和loadeddata
,结合了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视频,所以预期它会奏效。
我们还检查techName
是html5
,因为当我们初始化的Video.js对象被创建的Flash播放器,因此事件不应该预先焙烧。
loadeddata
不会开始播放前,一定火。 在Flash它从来不会与HTML5事件从视频元素中继所以它依赖于浏览器的行为。
loadedalldata
是整个视频下载的时候,所以是不可能开始播放之前发生。
您可以指定哪些工作以从活动中删除,因为你可能会束缚一个以上功能的情况下,如
vidPlayer.addEvent("play", onPlay1 );
vidPlayer.addEvent("play", onPlay2 );
vidPlayer.removeEvent("play", onPlay1 ); // onPlay2() would still be executed