Node.js 串联';音频/x-wav';缓冲区和服务于';传输编码';:';分块';

Node.js 串联';音频/x-wav';缓冲区和服务于';传输编码';:';分块';,node.js,buffer,wav,audio-streaming,chunked-encoding,Node.js,Buffer,Wav,Audio Streaming,Chunked Encoding,这个问题是a的后续问题,这是由于@thejh解决的 我正在尝试将文本转换为音频,并将数据作为“分块”数据提供给客户端。 到目前为止,我的标题看起来是这样的: res.writeHead(200, { 'Content-Type': 'audio/wav', // I tried 'audio/x-wav' as well 'Transfer-Encoding': 'chunked' }); 然后我将文本片段转换为队列中的音频(我将其作为base64编码数据返回),并像这样为它们提

这个问题是a的后续问题,这是由于@thejh解决的

我正在尝试将文本转换为音频,并将数据作为“分块”数据提供给客户端。 到目前为止,我的标题看起来是这样的:

res.writeHead(200, {
  'Content-Type': 'audio/wav',
   // I tried 'audio/x-wav' as well
  'Transfer-Encoding': 'chunked'
});
然后我将文本片段转换为队列中的音频(我将其作为base64编码数据返回),并像这样为它们提供服务:

var src = Base64Audio.replace("data:audio/x-wav;base64,","");
var binAudio = new Buffer( src, 'base64');
res.write(binAudio);
所有信息都被传输并发送到客户端,但出于某种原因,浏览器(我正在Firefox 7.0.1中测试)正在播放这些信息,并在第一个块之后停止。这是,这是github上的

为什么会这样?这是因为x-wav数据在Is头/元数据中具有诸如结束或指定长度之类的元数据吗?如果是这样的话,这个元数据是什么?是否有某种方法可以编辑它,以便浏览器成功地连接收到的块

我知道头
“Content-Length”:Buffer.Length
,但在这个例子中,我不知道整个流将有多长


有人能提出建议吗。是否可以在发送缓冲区之前对其进行编辑,以便浏览器将它们正确地连接起来?

我不知道这个问题的答案,但请看一下Shoutcast流是如何通过网络传输的。它们是一个无限长的mp3文件,如果你看一下它是如何完成的,类似的概念应该适用。

我认为你最好的办法是让它类似于音频流,就像icecast/shoutcast发送的一样。我认为FireFox默认不会处理这个问题(旧版本不会),这就是为什么有这么多可爱的flash插件来播放流

您需要再设置几个标题以类似于流:

HTTP/1.0 200 OK
Content-Type: audio/wav
Transfer-Encoding: chunked
icy-br: ##
ice-audio-info:bitrate=##;samplerate=#####
icy-description:Some Name
icy-genre:Alternative
icy-name:Name
icy-pub:0
icy-url:http://yoursite.com
Server:Whatever you want
Cache-Control: no-cache
Connection: Keep-Alive

演示中的音频元素指向ec2-46-137-25-111.eu-west-1.compute.amazonaws.com,它似乎已关闭。@r代码演示/示例故障应再次启动/联机。