在结束前一秒使用 YouTube API 停止视频,或者只是停止将其重置回开头?这与视频本身的长度无关。
提前致谢
我不同意无法在视频结束之前停止视频的论点。具体而言,在 API 中,您可以访问:
https://developers.google.com/youtube/js_api_reference#Playback_status
Player.getCurrentTime();
Player.getDuration();
如果要监视播放器对象并比较这两者,则可以轻松地在视频结束之前停止视频。一个例子是(尽管在生产中可能不好):
setInterval(function() {
var player = getPlayer(); //retrieve the player object
if(player) {
var duration = player.getDuration();
var current = player.getCurrentTime();
if((duration - current) <= 1) {
player.stopVideo();
}
}
}, 1000); //every second
我遇到了一个问题,由于某种原因,iframe 播放器在视频结束之前停止了视频,因此没有触发ENDED
事件,并在尝试找到解决方案时遇到了这个问题。由于我的方法可以如前所述解决您的问题,因此我所做的是(我保留了console.log()
调试行,以使其他人更容易使用它):
var player_timeout;
function onPlayerStateChange(event) {
if (event.data == YT.PlayerState.PLAYING) {
console.log("PLAY [" + event.data + "]");
timeout_set();
}
if (event.data == YT.PlayerState.PAUSED) {
console.log("PAUSED [" + event.data + "]");
clearTimeout(player_timeout);
}
}
function timeout_func() {
console.log("timeout_func");
player.stopVideo(); // or whatever other thing you want to do 1 second before the end of the video
}
function timeout_set() {
console.log("timeout_set");
var almostEnd_ms = (player.getDuration() - player.getCurrentTime() - 1) * 1000;
console.log("almostEnd_ms: " + almostEnd_ms);
console.log("player.getCurrentTime(): " + player.getCurrentTime());
player_timeout = setTimeout(timeout_func, almostEnd_ms);
}