这个问题是前一个问题的后续问题,感谢@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 数据具有像 End 这样的元数据或在标头/元数据中指定长度吗?如果是这样,这个元数据是什么,是否有某种方法可以编辑它以便浏览器成功连接接收到的块?
我知道标头'Content-Length': Buffer.length
,但在这种情况下,我不知道整个流将持续多长时间。
任何人都可以提供建议。是否可以在发送缓冲区之前编辑缓冲区,以便浏览器正确连接它们?