【问题标题】:Re-stream icecast stream through nodejs通过nodejs重新流式传输icecast流
【发布时间】:2019-09-23 10:04:09
【问题描述】:

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

【问题讨论】:

    标签: node.js icecast


    【解决方案1】:

    “内容长度”:1500

    这是你的主要问题。您需要保留 Content-Length 未指定,因为它对于您的信息流是无限期的。

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

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

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

    欲了解更多信息,请在此处查看我的回答:Is it possible to splice advertisements or messages dynamically into an MP3 file via a standard GET request?

    【讨论】:

    • 任何机会您都可以帮助获取上述代码,因为它目前根本不播放音频
    • @RussellHarrower 您删除了Content-Length 响应标头?而且,具体发生了什么?你用什么播放器试试?
    • 没什么,就是没玩。我通过更改以下 var remoteUrl = remote + req.url; to var remoteUrl = remote+"?=Player" + req.url;
    猜你喜欢
    • 1970-01-01
    • 2020-05-01
    • 1970-01-01
    • 2019-06-02
    • 2011-03-21
    • 2020-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多