首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >连接'audio/x-wav‘缓冲区并使用'Transfer-Encoding':'chunked’

连接'audio/x-wav‘缓冲区并使用'Transfer-Encoding':'chunked’
EN

Stack Overflow用户
提问于 2011-12-02 18:29:36
回答 2查看 2.1K关注 0票数 2

这个问题是一个previous question的后续问题,这个问题是通过@thejh解决的。

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

代码语言:javascript
复制
res.writeHead(200, {
  'Content-Type': 'audio/wav',
   // I tried 'audio/x-wav' as well
  'Transfer-Encoding': 'chunked'
});

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

代码语言:javascript
复制
var src = Base64Audio.replace("data:audio/x-wav;base64,","");
var binAudio = new Buffer( src, 'base64');
res.write(binAudio);

所有的信息都被传输并发送到客户端,但由于某种原因,浏览器(我在Firefox7.0.1中测试它)正在播放它,并在第一个块之后停止。这是result/demo showing the premature end of the audio,这是github上的the code being run

为什么会这样呢?这是因为x-wav数据在报头/元数据中有像End或指定长度的元数据吗?如果是这样的话,这些元数据是什么?有没有什么方法可以编辑它,以便浏览器成功地连接收到的块?

我知道头'Content-Length': Buffer.length,但在这种情况下,我不知道整个流有多长。

有没有人能提点建议。有没有可能在发送缓冲区之前编辑它们,以便浏览器正确地连接它们?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-13 07:17:32

我认为你最好的办法是让它看起来像一个音频流,就像通过icecast/shoutcast发送的那样。我认为FireFox在默认情况下不会处理这个问题(老版本不会),这就是为什么有这么多可爱的flash插件来播放流。

您需要设置更多的headers以使其类似于流:

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2011-12-02 22:24:27

我不知道这个问题的答案,但看看Shoutcast流是如何传来的。它们是一个无限长的mp3文件,如果您看一看它是如何完成的,应该可以应用类似的概念。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8354936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档