使用Youtube IFrame API时,getPlaylist返回一个仅包含一个视频的数组

我正在尝试制作一个将加载给定Youtube播放列表并从中播放随机视频的网页.

在我运行时,我正在努力从API获取播放列表信息

player.getPlaylist()

API每次都会返回一个元素数组(当前提示的视频),无论提示的视频或播放列表如何.
我的JavaScript是API文档中几乎100%的复制/粘贴内容,我无法弄清楚为什么无法在播放列表中获得完整的视频列表.

<script>

  var tag = document.createElement('script');

  tag.src = "https://www.youtube.com/iframe_api";
  var firstScriptTag = document.getElementsByTagName('script')[0];
  firstScriptTag.parentNode
    .insertBefore(tag, firstScriptTag);

  var player;
  function onYouTubeIframeAPIReady() {
    player = new YT.Player('player', {
      height: '390',
      width: '640',
      playerVars: {
        listType: 'playlist',
        list: 'PLbIZ6k-SE9SiarIg09JXUdK2kDX5_OB25',
        autoplay: 0,
        controls: 1
      },
      events: {
        'onReady': onPlayerReady,
        'onStateChange': onPlayerStateChange
      }
    });
  }

  function onPlayerReady(event) {
    console.log(event.target.getPlaylist());
  }

  var done = false;
  function onPlayerStateChange(event) {
    if (event.data == YT.PlayerState.ENDED && !done) {
      done = true;
      console.log('Video Finished');
      stopVideo();
    }
  }
  function stopVideo() {
    player.stopVideo();
  }
</script>

有人可以伸出援手指出我的错误或正确的方向吗?

解决方法:

以这种方式加载时,播放列表似乎并没有提示,只有第一个视频提示. getPlaylist()仅返回一个视频,并且播放器加载后不会触发onStateChange事件来确认这一点.

但是,我们可以使用cuePlaylist()强制播放器提示播放列表.在此JSFiddle中可以看到以下内容.

我们修改构造函数以不加载任何内容:

playerVars: {
    autoplay: 0,
    controls: 1
},

我们修改onPlayerReady()来提示播放列表:

function onPlayerReady(event) {
    event.target.cuePlaylist({
        listType: 'playlist',
        list: 'PLbIZ6k-SE9SiarIg09JXUdK2kDX5_OB25',
    });
}

我们修改onPlayerStateChange()以检查CUED状态并在触发时获取播放列表:

function onPlayerStateChange(event) {

    if (event.data == YT.PlayerState.CUED) {
        console.log(event.target.getPlaylist());
    }

    if (event.data == YT.PlayerState.ENDED && !done) {
        done = true;
        console.log('Video Finished');
        stopVideo();
    }
}

之后控制台输出以下内容:

Array [ "j_OyHUqIIOU", "PK8dsAeMmPk", "lfvceHUBWnU", "Xz5z1hBxejg",
        "OubvTOHWTms", "5WKU7gG_ApU", "XjwO9InuFJk", "lNqChN3WHh8" ]
上一篇:在c#中上传视频后自动获利(YouTube API)


下一篇:JavaScript-从iframe视频获取youtube视频ID