我已经编写了一个小型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秒,我试图进一步降低。我会尝试你放弃前几位的建议。谢谢。 –