我已經編寫了一個小型nodeJS服務器,它將Windows上使用DirectShow捕獲的ffmpeg的系統音頻作爲流媒體MP3文件輸出到瀏覽器。音頻需要儘可能的生動,最小/無緩衝,並且音頻中的「跳過」效果是完全可以接受的。Node.js Live Streaming:避免緩存
當我使用HTML5音頻標籤在Chrome中播放音頻時,低延時LAN連接延遲了大約8-10秒。我懷疑這是客戶端緩衝區,並在客戶端使用了Flash MP3播放器,從而延遲了2-3秒。
現在,緩衝似乎發生在服務器端。 NodeJS的response.write文件提到數據被寫入內核緩衝區。我該如何避免完全緩衝或至少繞過它,以便客戶端始終獲取最新的音頻數據?處理「流失」事件以始終推送實時數據的策略?
在請求對象上,我用setNoDelay(true)來避免使用Nagle的算法。以下是生成的ffmpeg進程發出數據時如何寫入數據的一段代碼。
var clients = []; //List of client connections currently being served
ffmpeg.stdout.on('data', function(data) {
for(var i = 0; i < clients.length; i++){
clients[i].res.write(data);
}
});
ffmpeg似乎不是我設置中的主要瓶頸。目前局域網的延遲時間約爲2-3秒,我試圖進一步降低。我會嘗試你放棄前幾位的建議。謝謝。 –