【问题标题】:Icecast metadata captureIcecast 元数据捕获
【发布时间】:2018-09-19 11:15:58
【问题描述】:

我一直在使用 node-icy 包从 icecast 流中获取元数据。

所做的是从流中获取元数据。然后,使用 lame 解码流并在扬声器上播放。

   server.listen(port, ()=>{

        icy.get(url, (res)=> {
            // log HTTP responses headers
            console.error(res.headers);

            //log any "metadata" events that happen
            res.on('metadata', (metadata)=>{
                var parsed = icy.parse(metadata);
                console.log('Metadata event');
                console.error(parsed);
            });

            // Let's play the music (assuming MP3 data). 
            // lame decodes and Speaker sends to speakers! 
            res.pipe(new lame.Decoder())
                .pipe(new Speaker());
        });


        console.log(`Server on port: ${port}`);
    });

这将为我提供歌曲标题的输出:

Metadata event
{ StreamTitle: 'ruby the hatchet - planetary space child - killer' }

如果我删除

 res.pipe(new lame.Decoder())
            .pipe(new Speaker());

然后元数据只被抓取一次。我的猜测是 Speaker() 函数会继续运行,当元数据发生变化时,icy.get 将运行 res.on('metadata', ...)。

我正在处理服务器上的流媒体,然后将其发送到 Angular 5 上的客户端。有没有办法在不使用 Speaker() 的情况下保持icy.get(...) 监听。我对流相当陌生。任何帮助,将不胜感激。

【问题讨论】:

    标签: node.js angular stream metadata icecast


    【解决方案1】:

    我能够通过使用来解决这个问题

    var icy = require('icy');
    var devnull = require('dev-null');
    
    icy.get(url, function (res) {
    
        // log any "metadata" events that happen
        res.on('metadata', function (metadata) {
          const parsed = icy.parse(metadata);
          console.log('metadata', parsed);
        });
    
        res.pipe(devnull());
    });
    

    你可以在这里看到它: https://github.com/TooTallNate/node-icy/issues/16

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-11
      • 2015-04-21
      • 1970-01-01
      • 1970-01-01
      • 2011-09-01
      • 2018-10-07
      • 2012-03-05
      相关资源
      最近更新 更多