Следующий код не работает для больших плейлистов:
var player;
function onYouTubePlayerAPIReady() {
player = new YT.Player('ytplayer', {
height: '45vw',
width: '80vw',
playerVars: {
listType: 'playlist',
list: list,
loop: 1,
rel: 0
},
events: {
onError: playerError,
onReady: playerReady,
onStateChange: playerStateChange
}
});
}
function playerReady() {
player.setShuffle(true);
player.playVideoAt(0);
}
И это успешно, хотя это очень сильно зависит от браузера, поэтому не идеально:
var player;
function onYouTubePlayerAPIReady() {
player = new YT.Player('ytplayer', {
height: '45vw',
width: '80vw',
playerVars: {
listType: 'playlist',
list: list,
loop: 1,
rel: 0
},
events: {
onError: playerError,
onReady: playerReady,
onStateChange: playerStateChange
}
});
}
function playerReady() { setTimeout( function () {
player.setShuffle(true);
player.playVideoAt(0);},2000);
}
Плеер загружается, но когда список воспроизведения большой (кажется, более 200 видео), он сокращает список до 200 записей. Прежде чем это произойдет, срабатывает onReady
, который, в свою очередь, запускает playerReady()
в моем примере. К сожалению, проигрыватель на этом этапе не готов, поэтому функция ничего не делает, и об ошибках не сообщается. Задержка позволяет игроку на самом деле готовиться сам.
Для справки:
onReady: setTimeout( playerReady,2000 )
Это нарушает widgetapi, что бы это ни было, что похоже, срабатывает также, когда onReady вызывается и жалуется в журнале консоли.
Использование playeraddEventListener( "onReady", foo(bar) )
не работает по той же причине. Также кажется, что блокируется получение видеоинформации, потому что плеер не готов.