通过 nodejs 重新流式传输 icecast 流

Re-stream icecast stream through nodejs

通过 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);

'Content-Length': 1500

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

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

play our icecast stream through nodejs, so that I can read metadata and push another audio file at key parts.

这不是一件小事。 MP3 使用位库的概念,所以你不能任意 trim 流,即使在帧边界上,除非你禁用编码器上的位库,这会导致质量显着下降。

有关更多信息,请在此处查看我的回答: