通过nodejs重新流播Icecast流

时间:2019-09-23 10:04:09

标签: node.js 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);

1 个答案:

答案 0 :(得分:0)

  

“内容长度”:1500

这是您的主要问题。您无需指定Content-Length,因为它对于您的流是不确定的。

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

  

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

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

有关更多信息,请在这里查看我的答案:Is it possible to splice advertisements or messages dynamically into an MP3 file via a standard GET request?