Youtube播放器api与循环

Pri*_*tra 18 youtube video youtube-javascript-api

我正在努力使用youtube播放器api为youtube视频设置循环.

问题是视频没有在循环下运行.

这是我的代码

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: {
            'controls': 0,           
            'showinfo': 0,
            'rel': 0,
            'loop': 1

          },
          videoId: 'qzZuBWMnS08',
          events: {
            'onReady': onPlayerReady,
           // 'onStateChange': onPlayerStateChange
          }
        });
      }
function onPlayerReady(event) {
        //  event.target.setLoop(true);
        event.target.playVideo();
      }
Run Code Online (Sandbox Code Playgroud)

循环:1似乎不起作用.还有任何方法可以从视频顶部删除共享和视频标题.

提前致谢.

Dan*_*elM 44

如果视频没有改变,你可以这样做

onStateChange: 
    function(e) {
        if (e.data === YT.PlayerState.ENDED) {
            player.playVideo(); 
        }
    }
Run Code Online (Sandbox Code Playgroud)

这样可以防止不必要地重新加载视频

  • 好的解决方案 仅供参考,你也可以播放像这样的视频`e.target.playVideo()`,让它更具动感. (3认同)
  • 对于上述方法 +1,因为它会立即播放视频,避免使用 [Google](https://developers.google.com/youtube/player_parameters) 建议的“&playlist=VIDEO_ID”时发生的黑屏快速闪烁) (2认同)

小智 12

这就是我用于API IFrame视频循环的内容.我注意到你必须包含"播放列表:VIDEO_ID"参数.它的工作原理.这是我的榜样

<script>
  // Load the IFrame Player API code asynchronously.
  var tag = document.createElement('script');
  tag.src = "https://www.youtube.com/player_api";
  var firstScriptTag = document.getElementsByTagName('script')[0];
  firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

  // Replace the 'ytplayer' element with an <iframe> and
  // YouTube player after the API code downloads.
  var player;

  function onYouTubePlayerAPIReady() {
    player = new YT.Player('ytplayer', {
      height: '390',
      width: '640',
      videoId: 'VIDEO_ID',
      playerVars: {
        playlist: 'VIDEO_ID',
        loop: 1
      }
    });
  }
</script>
Run Code Online (Sandbox Code Playgroud)

  • 在 Android 上进行实验,我发现只有调用 javascript loadPlaylist() 方法而不是 loadVideo() 时,这才有效。副作用是,这会导致 YouTube Web UI 显示播放列表控件,该控件允许用户查看播放列表中视频的弹出列表。如果需要在单个视频上循环,这是一个不需要的副作用,因为单个视频播放列表的用户体验感觉很笨拙。 (2认同)

And*_*ore 10

文档中所述,您需要将播放列表参数设置为视频ID才能使循环生效.

你会希望showinfo参数隐藏标题等.

  • 这种方法的问题在于它会再次加载相同的视频作为新视频。 (2认同)

小智 9

在你的onPlayerStateChange中尝试这个,以某种方式Youtube希望你再次放入videoID.

onStateChange: function(e){
    var id = 'qzZuBWMnS08';

    if(e.data === YT.PlayerState.ENDED){
        player.loadVideoById(id);
    }
}
Run Code Online (Sandbox Code Playgroud)