首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Icecast元数据捕获

Icecast元数据捕获
EN

Stack Overflow用户
提问于 2018-04-10 08:12:46
回答 1查看 699关注 0票数 0

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

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

代码语言:javascript
复制
   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}`);
    });

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

代码语言:javascript
复制
Metadata event
{ StreamTitle: 'ruby the hatchet - planetary space child - killer' }

如果我删除

代码语言:javascript
复制
 res.pipe(new lame.Decoder())
            .pipe(new Speaker());

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

我在服务器上处理streamer,然后把它发送到Angular 5上的客户端。有没有一种方法可以不使用Speaker()来保持icy.get(...)监听。我对streams还是个新手。任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2018-04-12 22:06:53

我能够通过使用以下命令来解决这个问题

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49743402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档