【问题标题】:Concatenating 'audio/x-wav' buffer and serving with 'Transfer-Encoding': 'chunked'连接 'audio/x-wav' 缓冲区并使用 'Transfer-Encoding': 'chunked'
【发布时间】:2012-01-11 09:36:21
【问题描述】:

这个问题是previous question 的后续问题,感谢@thejh。

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

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

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

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

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

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

我知道标头 'Content-Length': Buffer.length,但在这种情况下,我不知道整个流将持续多长时间。

谁能提供建议。是否可以在发送缓冲区之前对其进行编辑,以便浏览器正确连接它们?

【问题讨论】:

  • 演示中的音频元素指向似乎已关闭的 ec2-46-137-25-111.eu-west-1.compute.amazonaws.com。
  • @rcode 演示/示例故障应该再次上线/上线。

标签: node.js buffer wav audio-streaming chunked-encoding


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我认为最好的办法是让它类似于一个音频流,就像由 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
    

    【讨论】:

      猜你喜欢
      • 2018-09-12
      • 2019-05-15
      • 1970-01-01
      • 1970-01-01
      • 2021-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多