Как извлечь обложку альбома из mp3 файла без скачивания всего файла - PullRequest
1 голос
/ 14 ноября 2011

Я использую TabLib для извлечения, но мне нужно знать, сколько байтов я должен загрузить из mp3-файла, чтобы иметь возможность извлечь TagLib.

Я посмотрел на спецификации mp3но я не нашел ничего подходящего.

Ответы [ 2 ]

2 голосов
/ 07 декабря 2011

В 99% случаев, если вы опустите первые 10 байтов, у вас будет заголовок ID3v2, из которых последние 4 байта будут размером тега ID3v2, который будет содержать обложку.

Размер ID3v2 является "безопасным от синхронизации целым числом", но TagLib имеет функцию для его декодирования в нормальное целое число:

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

Итак, в основном алгоритм будет:

  • Получите первые 10 байтов
  • Разумность проверяет те байты, которые начинаются с "ID3"
  • Считайте последние 4 байта этих 10 и пропустите их через функцию выше, чтобы получить длину тега ID3v2
  • Получите столько дополнительных данных из потока
  • Передать этот блок данных в TagLib
  • Извлечь обложку
1 голос
/ 14 ноября 2011

В спецификации mp3 нет метаданных, таких как название песни или обложка альбома. Он является частью id3 и обычно помещается в конец файла.

...