2011-02-23 36 views
1

我正在計劃一個非常簡單的音頻流式播放器的項目,該項目需要在本地服務器上託管的歌曲的mysql數據庫列表,然後在整個一天中隨機播放列表中的歌曲。這將附加到一個非常簡單的前端頁面,該頁面將顯示當前正在播放的歌曲的名稱。從數據庫連續流式隨機音頻

我知道如何從數據庫中獲取一個隨機文件,並使用Javascript/HTML前端進行流式處理,但是我在迷失於如何檢測歌曲何時結束 - 然後加載下一首歌曲。有沒有簡單的方法來做到這一點?有人能指引我朝着正確的方向嗎?爲了詳細說明前端,我很可能會通過PHP提供文件名/位置到HTML5音頻標籤(我希望這樣做盡可能簡單)。我想最簡單的方法是播放音頻文件,然後刷新頁面,並使用相同的音頻標籤和新文件名播放下一個文件 - 我只是不知道如何導致該事件發生在這首歌。或者,如果需要,我可以使用基於Javascript的播放器,如JPlayer(http://www.jplayer.org/)。

我猜是有一種回調函數可以與JQuery一起使用?

+0

我們幫不了你,除非你告訴我們你是如何「使用的JavaScript/HTML前端流呢」。增加了提供代碼的要點。 – spender 2011-02-23 21:26:07

+0

這樣的東西已經存在了,它叫做mpd http://mpd.wikia.com/wiki/Music_Player_Daemon_Wiki有各種各樣的mpd前端,你可以通過網絡訪問。 – 2011-02-23 21:26:41

+0

幸運的傢伙,如果你有一個上傳速度的連接,使你能夠從家裏流音樂(超過4-5人) – 2011-02-23 21:58:40

回答

1

HTML5音頻標籤中有一個事件在媒體到達結束時運行,但由於您希望繼續播放,您應該使用「等待中」事件,該媒體在媒體到達時也會觸發,但是隨時準備接受新的曲目/數據。

然後,您可以使用XMLHttpRequest對象查詢下一個要播放的曲目,例如。

<script type="text/javascript"> 
    function getNextTrack(e) { 
    var xhttp = new XMLHttpRequest(); 
    xhttp.open("GET", "next_track.php", false); 
    xhttp.send(""); 

    var playback = xhttp.responseXML.childNodes[0]; 
    for(i = 0; i < playback.childNodes.length; ++i) { 
     if (playback.childNodes[i].nodeName != 'track') continue; 
     var value = playback.childNodes[i].childNodes[0].nodeValue; 
     e.currentTarget.src = value; 
     break; 
    } 
    } 
</script> 
<audio id="player" onwaiting="javascript: getNextTrack(e)" src="first_track.ogg"></audio> 

XML配置將是以下形式:

<?xml version="1.0" encoding="UTF-8" ?> 
<playback> 
    <track>next_song.ogg</track> 
</playback>