我一直在使用node-icy包从icecast流中获取元数据。
所做的是从流中获取元数据。然后,使用lame解码该流并在Speaker上播放。
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 ',...)。
我在服务器上处理streamer,然后把它发送到Angular 5上的客户端。有没有一种方法可以不使用Speaker()来保持icy.get(...)监听。我对streams还是个新手。任何帮助都将不胜感激。
发布于 2018-04-12 22:06:53
我能够通过使用以下命令来解决这个问题
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://stackoverflow.com/questions/49743402
复制相似问题