通过nodejs重新流式传输Icecast流



通过 Nodejs 播放我们的 icecast 流,这样我就可以读取元数据并在关键部分推送另一个音频文件。

我想知道的是为什么以下脚本不允许用户听到流。

var http = require('http'),
request = require('request'),
remote = 'http://stream.radiomedia.com.au:8003/stream';
http.createServer(function (req, res) {
res.writeHead(200, {
'Content-Type': 'audio/mpeg',
'Content-Length': 1500
});
// http://somewhere.com/noo.bin
var remoteUrl = remote + req.url;
request(remoteUrl).pipe(res);
}).listen(8080);

"内容长度":1500

这是你的主要问题。 您需要将Content-Length保留为未指定状态,因为它对您的流是不确定的。

此外,这将导致服务器使用分块传输编码,如今许多客户端都可以很好地处理。 有些不能,因此如果旧客户端兼容性对您很重要,则必须禁用分块传输编码。

通过 Nodejs 播放我们的 icecast 流,这样我就可以读取元数据并在关键部分推送另一个音频文件。

这不是一件小事。 MP3 使用位存储的概念,因此即使在帧边界上,您也不能任意修剪流,除非您禁用编码器上的位存储器,这会导致质量显着下降。

有关更多信息,请参阅我的答案:是否可以通过标准 GET 请求将广告或消息动态拼接到 MP3 文件中?

最新更新