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

Node - Attach ID3 music metadata to audio stream

我正在使用 node+express 通过 stream.pipe(res) 函数向浏览器发送音频流。我想为正在流式传输的音乐添加元数据,例如艺术家姓名或专辑封面。是否使用 response headers 发送此信息?我该怎么做?

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 模块作为音频源。

我发现的东西正在使用

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'
});

然而,由于您发送的是 header,并且您只能发送一次,如果您在一个流中播放多首歌曲并且您希望在每首歌曲的开头都有定时元数据,您将 运行 成问题。 因为 headers 只能发送一个,而且必须在 body 之前,否则它不是 head.

这是我制作网络收音机的回购协议(只有代码,如果不整洁请见谅)> https://github.com/Hobgoblin101/Dj-Radio