2012-10-16 73 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); 
} 

如果你直接啓動它,它絕對不會工作(我已經注意到,對我的沮喪)。