节点 - 将ID3音乐元数据附加到音频流

时间:2017-03-08 23:49:13

标签: node.js audio-streaming id3

我正在使用节点+使用stream.pipe(res)函数向浏览器表达音频流。我想为正在流式传输的音乐添加元数据,例如艺术家姓名或专辑封面。是否使用响应标头发送此信息?我该怎么办?

var url = 'https://www.youtube.com/watch?v='+videoId;

var audio = ytdl(url, {
    filter: 'audioonly'
});

audio.on('response', function(data) {

    ...

    res.writeHead(206, {
        'Content-Type': 'audio/mpeg',
        'Content-Range': ...,
        'Content-Length': ...,
        'Content-Disposition': 'inline; filename="' + req.query.track + ' - ' + req.query.artist + '.mp3"',
        'Accept-Ranges': 'bytes',

        // Add data like this?
        'Content-???': 'Artist=' + artist + ',Album=' + album
    });
});

audio.pipe(res);

我正在使用node-ytdl-core模块作为音频源。

1 个答案:

答案 0 :(得分:2)

我找到的东西是使用

res.writeHead(200, {
  'Content-Type': 'audio/mpeg3',
  'Transfer-Encoding': 'chuncked',
  'icy-br': '##',
  'ice-audio-info': 'bitrate=128;samplerate=22050',
  'icy-genre': 'Alternative',
  'icy-name': "Dj-Radio",
  'icy-description': "A NodeJS mp3 audio streamer",
  'icy-url': "http://localhost:8080",
  'Cache-Control': "no-cache",
  'Connection': 'Keep-Alive'
});

但是,由于您正在发送标题,并且您只能执行一次,如果您在一个流中流式传输多首歌曲并且您希望在每个部分的开头都有定时元数据,则会遇到问题。 因为标题只能发送一个,并且必须在主体之前,否则它不是头。

这是我制作互联网广播的回购(只有代码对不起,如果它不整洁)> https://github.com/Hobgoblin101/Dj-Radio