使用Youtube API播放YouTube视频直到特定时间并暂停。

6

有没有一种方法可以使用YouTube API播放视频并在视频的某一点暂停它?

2个回答

11

我已修改了来自YouTube播放器API参考的代码,以在一定时间后暂停播放。

演示

该代码通过等待 onPlayerStateChange 事件来工作。当事件触发时,它会检查事件,以查看它是否是 PLAYING 事件。如果是,它将从当前时间( getCurrentTime()方法)到期望的暂停点的剩余时间进行计算(硬编码为 stopPlayAt 变量)。它设置一个Javascript定时器,等待该差异然后传递API命令以暂停视频。


这太棒了。非常感谢。 - Mason
只有在用户没有乱按按钮的情况下,这才有效,请在编码时考虑这一点 ;) - Nippey
1
@Nippey,不确定我理解你的意思...我编写的代码会在每次用户交互时自动清除超时。然后,如果操作是播放,它会重新计算下一次停止所需的超时时间。这应该足以解决任何用户交互问题,并使计时器始终在正确的时间停止。 - thirdender
如果用户没有做任何操作,但带宽限制导致视频在您的 JS 计数器运行时花费任何时间进行缓冲,那么您将会停顿或提前结束。这是需要考虑的一点。 - jinglesthula
它应该可以在缓冲时工作(未经测试,结果可能会有所不同:-p)。YouTube API 有一个单独的状态用于缓冲(YT.PlayerState.BUFFERING,请参阅 onStateChange 文档)。我编写的代码方式是当播放器状态改变为除 playing 以外的任何状态时,停止计时器将被清除。当状态再次更改为 YT.PlayerState.PLAYING 时,计时器将从当前播放位置重新启动,并计算新的超时时间。 - thirdender

3
您可以使用对象语法中的cueVideoById命令来实现这一点。
请参见: https://developers.google.com/youtube/iframe_api_reference#cueVideoById 以下是启动视频的样子。
//Minimal Example
player.cueVideoById({videoId:String, endSeconds:Number});
player.playVideo();

编辑:上面的示例停止了视频播放。如果您想要暂停它,JavaScript代码需要更多操作。

具体来说,您需要轮询正确的时间。

function checkTime() {
   if ( player.getCurrentTime() == finishTime )
      player.pauseVideo()
   else
      setInterval(checkTime, 500);
}

checkTime();

或者使用JS来跟踪时间:

var duration = finishTime - player.getCurrentTime();
player.playVideo()
setInterval("player.pauseVideo();", duration*1000);

很不错,这是朝着正确方向迈出的一步。但是,我希望它暂停在那个点,而不是结束视频。有什么办法可以做到这一点吗?(我说“暂停”,因为我不想看到其他视频建议) - Mason

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接