Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何从mp3文件中提取唱片封面而不下载整个文件_C++_Mp3_Gstreamer_Taglib - Fatal编程技术网

C++ 如何从mp3文件中提取唱片封面而不下载整个文件

C++ 如何从mp3文件中提取唱片封面而不下载整个文件,c++,mp3,gstreamer,taglib,C++,Mp3,Gstreamer,Taglib,我正在使用TabLib进行提取,但我需要知道我应该从mp3文件下载多少字节才能提取TabLib 我查看了mp3规范,但没有发现任何相关信息。mp3规范实际上没有诸如歌曲名称或专辑艺术之类的元数据。它是文件的一部分,通常放在文件的末尾。在99%的情况下,如果先下拉前10个字节,就会得到ID3v2头,其中最后4个字节将是ID3v2标记的大小,其中包含封面 ID3v2大小是“同步安全整数”,但TagLib具有将其解码为正常整数的功能: TagLib::ID3v2::SynchData::toUInt(

我正在使用TabLib进行提取,但我需要知道我应该从mp3文件下载多少字节才能提取TabLib


我查看了mp3规范,但没有发现任何相关信息。

mp3规范实际上没有诸如歌曲名称或专辑艺术之类的元数据。它是文件的一部分,通常放在文件的末尾。

在99%的情况下,如果先下拉前10个字节,就会得到ID3v2头,其中最后4个字节将是ID3v2标记的大小,其中包含封面

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

TagLib::ID3v2::SynchData::toUInt(const ByteVector &data)
因此,基本上算法是:

  • 抓取前10个字节
  • 健全性检查以“ID3”开头的字节
  • 读取这10个字节中的最后4个字节,并通过上面的函数传递它们以获得ID3v2标记长度
  • 从流中获取那么多额外的数据
  • 将该数据块传递给TagLib
  • 提取封面艺术

错误。ID3v2标签是能够包含相册艺术的标签,几乎都位于文件的开头。