gpt4 book ai didi

api - 指定时间的 Youtube API 事件

转载 作者:行者123 更新时间:2023-12-03 23:37:03 27 4
gpt4 key购买 nike

是否可以通过 YouTube API 在视频到达指定时间时触发事件?例如当视频达到 20 秒时。触发事件。

谢谢,
毛罗

最佳答案

不确定您是否仍然需要对此的答案(因为我在 4 个月后才发现),但这是我使用 youtube 的 iframe embed api 完成此任务的方法。它的丑陋之处在于它需要一个 setInterval,但在 YouTube API 中确实没有任何类型的“timeupdate”事件(至少在 iframe API 中没有),所以你必须通过检查视频时间来伪造它很经常。它似乎运行得很好。

假设您要启动播放器 as shown here使用 YT.Player(),并且您想实现自己的 onProgress()每当视频时间改变时调用的函数:

在 HTML 中:

<div id="myPlayer"></div>

在JS中:
// first, load the YouTube Iframe API:
var tag = document.createElement('script');
tag.src = "//www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

// some variables (global here, but they don't have to be)
var player;
var videoId = 'SomeYoutubeIdHere';
var videotime = 0;
var timeupdater = null;

// load your player when the API becomes ready
function onYoutubeIframeAPIReady() {
player = new YT.Player('myPlayer', {
width: '640',
height: '390',
videoId: videoId,
events: {
'onReady': onPlayerReady
}
});
}

// when the player is ready, start checking the current time every 100 ms.
function onPlayerReady() {
function updateTime() {
var oldTime = videotime;
if(player && player.getCurrentTime) {
videotime = player.getCurrentTime();
}
if(videotime !== oldTime) {
onProgress(videotime);
}
}
timeupdater = setInterval(updateTime, 100);
}

// when the time changes, this will be called.
function onProgress(currentTime) {
if(currentTime > 20) {
console.log("the video reached 20 seconds!");
}
}

这有点草率,需要一些全局变量,但是您可以轻松地将其重构为闭包和/或通过在初始化播放器时还包含 onStateChange 事件并编写 onPlayerStateChange 使间隔停止并在播放/暂停时自行启动检查播放和暂停的函数。您只需要将 updateTime() 函数与 onPlayerReady 分开,并有策略地调用 timeupdater = setInterval(updateTime, 100);clearInterval(timeupdater);在正确的事件处理程序中。 See here有关在 YouTube 上使用事件的更多信息。

关于api - 指定时间的 Youtube API 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10175367/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com