2012-10-16 41 views
1

我在我的网站添加了这个脚本来重现视频播放列表。youtube API - setShuffle不工作

<script type="text/javascript" src="swfobject.js"></script> 
<div id="ytapiplayer"> 
You need Flash player 8+ and JavaScript enabled to view this video. 
</div> 
<script type="text/javascript"> 
var params = { allowScriptAccess: 'always', 
allowFullScreen: 'true' }; 
var atts = { id: 'myytplayer' }; 
swfobject.embedSWF("https://www.youtube.com/v/videoseries?listType=playlist&list=PLBA9E733B5C8314DE&autoplay=1&modestbranding=1&enablejsapi=1&playerapiid=ytplayer&version=3", "ytapiplayer", "640", "360", "8", null, null, params, atts); 
function onYouTubePlayerReady(myytplayer) { 
     ytSwfPlayer = document.getElementById('myytplayer'); 
     ytSwfPlayer.setShuffle(1); 
} 
</script> 

setShuffle函数不工作!!! 你可以给我一个解决方案吗?

回答

4

这似乎是玩家的错误。我向团队报告了这个错误。在将来你可以报告错误https://code.google.com/p/gdata-issues/issues/entry?template=YouTube%20(Defect%20Report)

作为一个工作,你可以使用JS api来自己洗牌。当视频结束时,您可以拨打playVideoAt并传递一个随机数。

+0

谢谢!我尝试这个解决方案,但这并不简单! – karmax

+0

我遇到同样的错误,而我实施随机数解决方案时,它不是最佳的,因为它可以通过选择相同的随机数重复一个视频。我还与playVideoAt函数有不一致的结果。有没有人知道更强大的解决方案或知道什么时候该错误将被修复? –

+0

该错误似乎现在已经修复。 注意:每次您设置新的视频或播放列表时,都需要再次调用setShuffle()。我认为同样适用于其他一些设置,如setLoop() – Sean

1

问题是,如果您已经在Youtube播放器中加载播放列表队列,则下一首歌曲将在当前播放结束时自动启动。

所以,你应该绑定跟踪结束事件(这是event.data = 0),然后让YouTube播放器做两件事情:通过调用playVideoAt方法

  1. 停止播放
  2. 玩出新轨道上的随机指数。

避免多次重复播放相同音轨的简单方法是将播放的idx存储在列表中。然后,你应该有一个功能,如shuffle生成0和队列长度之间的随机整数:

function getRandomId() { 
    var random_id = 0 
    while(played_idx.indexOf(random_id) != -1) { 
     random_id = Math.floor(Math.random * playlist.length) 
    } 
    return random_id 
} 

然后,只需调用playVideoAt(random_id)

1

我注意到,如果稍后启动该命令,setShuffle会起作用。这样的事情:

function onPlayerReady(event) { 
    event.target.mute(); 
    setTimeout(function() { 
     event.target.setShuffle(true); 
     event.target.setLoop(true); 
    }, 2000); 
} 

如果你直接启动它,它绝对不会工作(我已经注意到,对我的沮丧)。