JW Player 7 在精确时间暂停

JW Player 7 pause on precise time

我正在玩弄 YouTube 嵌入视频。我希望播放器在第三秒暂停。代码如下:

playerInstance.on('time', function(x) {
    if (x.position === 3){
        playerInstance.pause();
    }
});

但并不是每次都有效。有时有效,有时无效。这完全是随机的。为什么?

在将我的 jwplayer 对象放入变量之前,我 运行 遇到过问题。我没有解释,但我敢打赌,如果您继续使用 jwplayer(); ,您可能会有更好的运气;显式调用。希望这能给你带来更一致的结果。也可以尝试使用“==”而不是“===”。你能告诉我们你是如何声明 playerInstance 的吗?

我使用了推荐的声明 - JW Player website Api

"We encourage developers to stop using the jwplayer() syntax, and instead keep a reference to the player instance. Based on how JW Player 7 is engineered, this will actually save a few ms of time during player setup."

var playerInstance = jwplayer('container'); //jwplayer('container').pause(); // BAD! :( playerInstance.pause(); // Good :)

我刚刚使用 jwplayer() 声明以及“==”和“===”测试了您的解决方案。但它仍然不起作用。

我用我们的 2 声明为您准备了 fiddle。

http://jsfiddle.net/slk500/rftbtzpr/

感谢您的帮助!

根据正在播放的媒体类型和挂接到 JW 播放器实例的其他事件,"onTime" 事件每秒触发多次,并报告到小数点后的许多位。

因此,"position" 不太可能恰好为 3(这就是您用以下内容有效表达的意思:'==' & '===')。

使用'>='会更稳健:

playerInstance.on('time', function(x) {
    if (x.position >= 3){
        playerInstance.pause();
    }
});

然而,这意味着玩家将无法玩超过 3 秒,因此根据您的要求,您可能还需要包含额外的逻辑来满足以下需求:

  • 暂停点后继续播放
  • 如果用户搜索超过 3 秒怎么办
  • 向后搜索然后第二次到达暂停点
  • 等...

可能更好的解决方案是将 "position" 转换为整数值并进行直接比较。这意味着您不需要逻辑来处理超过暂停点的进展。但是,您需要逻辑来确保它只在暂停点暂停一次。以下内容适用于此:

playerInstance.on('time', function(x){
    if(parseInt(x.position,10)===3){
        if(!playerInstance["pauseOnce"]){
            playerInstance["pauseOnce"]=true;
            playerInstance.pause();
        }
    }else{
        playerInstance["pauseOnce"]=false;
    }
});