YouTube Player API:getDuration(),getCurrentTime(),getVideoData()不起作用

问题描述:

对于我的应用程序,我正在尝试使用YouTube Iframe播放器API播放视频,并允许用户无需重新加载页面即可更改视频.

For my application, I am trying to use the YouTube Iframe player API to play videos, and allow the user to change videos without reloading the page.

我通过使用 player.loadVideoById(video_id)方法完成此操作.通过YouTube视频ID加载视频后,我还想捕获有关该视频的所有相关信息.但是,我注意到没有任何get函数可以立即使用,包括 getDuration() getCurrentTime() getVideoData().

I accomplish this by using the player.loadVideoById(video_id) method. After loading the video via YouTube video id, I also want to capture all relevant information about the video. However, I notice that none of the get functions work right away, including getDuration(), getCurrentTime() and getVideoData().

我发现了一种使用 setTimout 来获取使用 player.loadVideoById(video_id)后大约1-2秒的信息的解决方案,但是,我没有认为这是正确的解决方案.

I have found a scrappy solution of using a setTimout to get the information about 1-2 seconds after using player.loadVideoById(video_id), however, I do not think this is the proper solution.

在我看来, loadVideoById(video_id)正在从YouTube异步获取数据.是否有可用的回调函数?我在文档中找不到一个.请帮忙.

It seems to me that loadVideoById(video_id) is asynchronously fetching the data from YouTube. Is there a callback function available to use? I could not find one in the docs. Please help.

谢谢!

有很多

There are quite a few Events available that you can utilise I think.

这是一个跟踪 YT.PlayerState.PLAYING 状态的示例,该状态属于 onStateChange 事件,该事件基本上是在说明当前正在播放视频.>

Here is an example of tracking YT.PlayerState.PLAYING state, falling within the onStateChange event, which is basically saying that the video is currently being played.

player.addEventListener(YT.PlayerState.PLAYING, onVideoPlaying, false);

function onVideoPlaying() {
  console.log('currentTime:', player.getCurrentTime(), 'duration:', player.getDuration());
}

希望这会有所帮助.