YouTube IFrame API 在结束前停止


是否可以

在结束前一秒使用 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);
    }

相关内容

  • 没有找到相关文章

最新更新