我正在使用TabLib进行提取,但是我需要知道我应该从mp3文件中下载多少个字节,以便能够提取TagLib。

我研究了mp3规范,但没有发现任何相关内容。

最佳答案

在99%的情况下,如果首先拉低前10个字节,则将具有ID3v2 header ,其中后4个字节将是ID3v2标签的大小,其中将包含封面。

ID3v2的大小是“同步安全整数”,但是TagLib具有将其解码为普通整数的功能:

TagLib::ID3v2::SynchData::toUInt(const ByteVector &data)

因此,基本上该算法将是:
  • 抓取前10个字节
  • 完整性检查以“ID3”开头的那些字节
  • 读取这10个字节的最后4个字节,并将其通过上面的函数,以获取ID3v2标签长度
  • 流中获取更多数据
  • 将该数据块传递给TagLib
  • 提取封面
  • 10-08 11:24