2012-10-16 5 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 인) 트랙 종료 이벤트를 결합하고 유튜브 플레이어는 두 가지를 확인해야한다 : playVideoAt 메서드를 호출하여

  1. 정지
  2. 재생이 임의의 인덱스와 새로운 트랙을 재생합니다.

동일한 트랙을 여러 번 반복하지 않는 간단한 해결책은 재생 된 idx를 목록에 저장하는 것입니다.

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) 전화 : 그렇다면, 당신은 0과 큐 길이 사이의 임의의 정수를 생성 shuffle 같은 기능을 가져야한다.

1

명령을 조금 나중에 실행하면 setShuffle이 작동하는 것으로 나타났습니다. 이런 식으로 뭔가 : 당신이 직접 실행할 경우

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

, 그것은 확실히 작동하지 않습니다 (내 좌절에 발견했습니다).

관련 문제