第一個視頻播放,但不是我列表中的下一個視頻。我已經複製了YouTube API example的初始代碼。也使用this SO answer的onPlayerStateChange(event)的想法。無法獲取YouTube視頻的自定義播放列表
第一個視頻播放正常。使用Firebug,我也可以看到它進入playnextvideo()函數。但是,下一個視頻不播放。我也嘗試在該函數的最後一行添加
player.playVideo()
,但我得到一個錯誤說「player.playVideo()不是一個函數」。以下是我的整個<body>
部分。此頁面中沒有其他腳本。
<div id="container">
<div id="content">
<div class="fixedwidthlower">
<?php
require 'dbconn.inc'; //database connection code
echo "<div id=\"SongList\"><ul id = \"songs\">";
$list = explode(" ", $_POST['playlist']);
$hlist = array();
for($i=0; $i<count($list); $i++){
$sql = "SELECT * FROM songs where aikey = " . $list[$i] . ";";
$result = $conn->query($sql);
$row = $result->fetch_assoc();
if ($i==0)
$liclass = " class=\"active\"";
else
$liclass = "";
echo "<li" . $liclass . "><a href=\"" . $row["URL"] . "\">" . $row["Song"] . " (" . substr($row["URL"], stripos($row["URL"], "=") + 1) . ")</a></li>";
$hlist[] = substr($row["URL"], stripos($row["URL"], "=") + 1);
}
echo "</ul></div>";
echo "<div id=\"Player\">";
for($i=0; $i<count($hlist); $i++){
echo $hlist[$i] . " ";
} // This loop puts the raw videoids into the Player Div
// which are then read by the first line in javascript below
// Example: "usNsCeOV4GM 8pPvNqOb6RA cwqhdRs4jyA XcATvu5f9vE WANNqr-vcx0 t-iJ47in9YQ OMOGaugKpzs l3LFML_pxlY mLDDxfFKd9Y 9Z4rmlyuH-s "
echo "</div>";
$conn->close();
?>
</div>
</div>
<script type="text/javascript">
var videolist = document.getElementById("Player").innerHTML.split(" ");
var i =0;
var video = videolist[i];
function playnextvideo(){
i++;
video = videolist[i];
playmyvideo();
player.playVideo();
}
var tag = document.createElement('script');
tag.src = "https://www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
var player;
function onYouTubeIframeAPIReady() {
playmyvideo();
}
function playmyvideo() {
player = new YT.Player('Player', {
height: '390',
width: '640',
videoId: video,
events: {
'onReady': onPlayerReady,
'onStateChange': onPlayerStateChange
}
});
}
function onPlayerReady(event) {
event.target.playVideo();
}
function onPlayerStateChange(event) {
if (event.data === 0) {
playnextvideo();
}
}
console.log(i);
console.log(video);
</script>
該php代碼可能不相關,但我已經表明它的完整性。我沒有包括CSS,因爲它可能不相關(沒有顯示:沒有 divs,因爲我看到在其他問題中導致問題)。如果你想要一個鏈接到這個頁面,我可以提供這個...
謝謝你的幫助!
我會嘗試這一點,但是這不利於大局。我希望能夠播放來自其他網站的視頻。因此,我將切換到另一個使用不同的API實例化不同玩家的函數。 Vimeo當Vimeo視頻出現時。 – Chiwda
Thanx!它的工作,所以我已經接受你的答案。但是,我現在意識到我的架構是錯誤的。我必須將循環放在YouTube API(和其他API)之外。咄! – Chiwda