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

Posted

技术标签:

【中文标题】节点 - 将 ID3 音乐元数据附加到音频流【英文标题】:Node - Attach ID3 music metadata to audio stream 【发布时间】:2017-03-08 23:49:13 【问题描述】:

我正在使用 node+express 使用 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】:

我发现的东西正在使用

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

但是,由于您要发送标头,并且您只能这样做一次,如果您在一个流中流式传输多首歌曲并且您希望在每首歌曲的开头都有定时元数据,您将遇到问题。 因为 headers 只能发送一个,并且必须在 body 之前,否则它不是 head。

这是我制作网络收音机的仓库(如果不整洁,请仅编码抱歉)> https://github.com/Hobgoblin101/Dj-Radio

【讨论】:

我想我有一个想法,我会尽快尝试 谢谢,我不需要更新同一个流中的数据

以上是关于节点 - 将 ID3 音乐元数据附加到音频流的主要内容,如果未能解决你的问题,请参考以下文章

Apple HTTP Live Streaming 中的实时流元数据读取

音频文件元数据的最佳库? [关闭]

MP3 ID3 元数据没有“标签”标签?

是否可以将自定义元数据标签添加到音乐文件?

从 firefox 插件中的本地音频文件解析 id3 数据

ID3 通过音频流?