2011-03-11 192 views
2

我想讓我的node.js服務器爲HTML5音頻標記的音頻文件服務器。目前,我通過一個明確的靜態提供程序來引用音頻文件,但是這會讓聲音播放一次,然後永遠不會再播放。Node.js和HTML5音頻

從我已經能夠收集的聲音爲了正常工作與尋找或循環我需要提供「Content-Range」標題,當我的音頻文件被請求。我非常懷疑表達式staticProvider是爲我做的,所以看起來我需要使用自定義代碼來提供文件。不幸的是,我對node.js相當陌生,像服務文件這樣的東西仍然超出了我的想象。任何人都可以提供一些建議,說明如何爲音頻文件提供適當的元數據?

[編輯](刪除舊的服務器的代碼,因爲它不會做任何人好!)

對不起,我通常不會問問題這一廣泛的,但我真的很不知所措從這個開始到哪裏。有什麼建議麼?

[解決方法]

這樣看來,解決的辦法是隻使用更新的軟件。我試圖表達而不是內置的連接HTTP中間件,因爲我認爲連接不是在執行靜態文件服務。事實證明,我只是在查看一個更新版本的連接文檔,而節點附帶的版本比較老。有一次,我更新了我的連接庫(我只是用NPM安裝最新的,對於那些好奇的),下面精美的工作:

var connect = require('connect'); 
var server = connect.createServer(
    // If your server errors on this line, saying it doesn't know what 
    // "static" is you need to get the latest connect! 
    connect.static(__dirname + '/public') 
); 
server.listen(PORT); 

回答

2

靜態服務邏輯由底層連接服務器(使用其靜態完成中間件)。有'Content-Range'標頭的代碼(請參見here,關於第148行),但只有當底層客戶端(在您的情況下,瀏覽器的HTML5實現)發送正確的請求標頭時,纔會設置這些標頭。

也許谷歌集團this post可以幫助你。主題略有不同(視頻流),但我認爲問題的核心是相同的。

+0

我一直在閱讀這篇文章,並將我可以基於它的東西拼湊在一起。儘管如此,進展緩慢。不過謝謝你指點我的靜態中間件!我甚至沒有想過要去那裏看,這回想起來似乎很愚蠢。 – Toji 2011-03-11 14:41:35

+0

啊哈!解決方案就在於此!包含在node.js中的連接中間件是舊的,並且沒有您指出的Content-Range代碼。通過安裝更新​​版本的連接,我能夠正常工作!謝謝! – Toji 2011-03-11 14:56:22

+0

這就是在像node.js這樣快節奏的環境中開發的詛咒/祝福;)我很高興我指出你正確的方向! – schaermu 2011-03-11 15:13:28