2017-03-17 67 views
0

我有一个数组中的视频列表,我希望能够让播放器在当前播放结束后播放列表中的另一个视频。我遇到的问题是它重复播放同一个视频,而不是选择新的视频播放。我一直在寻找类似的问题,并没有找到任何可以使其工作的东西。任何意见,将不胜感激!如何从列表中播放随机视频?

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

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

// 3. This function creates an <iframe> (and YouTube player) 
// after the API code downloads. 
function rotateYT() { 
    var videos = [ 
     'be0T_owA1PU', 
     'Kp7eSUU9oy8', 
     'Th0V-fxo9CE', 
    ]; 

    var index=Math.floor(Math.random() * videos.length); 
    return videos[index]; 
} 

var player; 
function onYouTubeIframeAPIReady() { 
    var videoID = rotateYT(); 
    player = new YT.Player('player', { 
     height: '300', 
     width: '300', 
     videoId: videoID, 
     events: { 
      'onReady': onPlayerReady, 
      'onStateChange': onPlayerStateChange 
     } 
    }); 
} 

// 4. The API will call this function when the video player is ready. 
function onPlayerReady(event) { 
    player.setPlaybackRate(1); 
    event.target.playVideo(); 
} 

// 5. This should play another random video 
function onPlayerStateChange(event) {   
    if(event.data === 0) { 
     event.target.setShuffle(true); 
     event.target.playVideo(); 
    } 
} 

我可能把代码中的错误所以这里的的jsfiddle香港专业教育学院一直在努力

https://jsfiddle.net/bbasham/L20k7x1o/2/

+0

问题是什么'javascript'问题? – guest271314

回答

0

你的问题是,你讲的不是YT玩家使用的视频的播放列表。相反,您一次只能设置一个视频ID,因此shuffle方法不起作用。你需要更新你的方法,让你在重启之前交换的视频ID:

// 5. This should play another random video 
function onPlayerStateChange(event) {   
    if(event.data === 0) { 
     //event.target.setShuffle(true); //useless unless the player has a playlist 
     event.target.loadVideoById(rotateYT()); 
     event.target.playVideo(); 
    } 
} 

这将导致玩家抢一个新的视频,并将其设置为重新启动播放器之前源。或者,您可以提供播放列表,然后使用随机播放。

Documentation

+0

感谢您的回复。如果我提供播放列表并向播放列表添加更多视频,则代码能够抓取新视频,或者每次添加视频时都必须更新代码? 最终,我希望能够创建视频播放列表并让它抓取随机播放列表,我只是不知道这是否是最好的方式。 –