【发布时间】: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