连接“audio/ x-wav”缓冲区并使用“传输编码”服务:“分块”

这个问题是对前一个问题的跟进,由于@thejh而解决了。

我试图将文本转换为audio,并将数据作为“分块”数据提供给客户端。 到目前为止我的头像是这样的:

res.writeHead(200, { 'Content-Type': 'audio/wav', // I tried 'audio/x-wav' as well 'Transfer-Encoding': 'chunked' }); 

然后,我将文本片段转换为队列中的audio(我将其作为base64编码数据获取),然后像这样提供它们:

 var src = Base64Audio.replace("data:audio/x-wav;base64,",""); var binAudio = new Buffer( src, 'base64'); res.write(binAudio); 

所有的信息都被传输到客户端,但由于某种原因,浏览器(我正在Firefox 7.0.1中testing)正在播放它,并在第一个块之后停止。 这是结果/演示显示audio提前结束 ,这是在github 上运行的代码 。

为什么是这样? 这是因为x-wav数据在头部/元数据中是否具有像End或指定长度的元数据? 如果是这样的元数据是什么,是否有某种方式来编辑它,使浏览器成功连接接收到的块?

我知道Header的'Content-Length': Buffer.length但在这种情况下,我不知道整个stream将会持续多久。

任何人都可以提供build议 是否有可能编辑缓冲区发送之前,让浏览器连接他们正确?

我认为你最好的select就是让它看起来像一个audiostream,就像icecast / shoutcast一样。 我不认为FireFox会默认处理(旧版本不会),这就是为什么有这么多可爱的Flash插件播放stream。

您需要设置更多的标题来模拟stream:

 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 

我不知道这个答案,但看看Shoutcaststream是如何通过电线。 他们是一个无限长的mp3文件,如果你看看它是如何完成的,那么类似的概念应该适用。