Есть ли способ извлечь данные встроенного изображения из mp3 в IOS - PullRequest
3 голосов
/ 19 октября 2011

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

Ответы [ 3 ]

9 голосов
/ 14 марта 2012

MP3, включая подкасты, часто имеют встроенные метаданные, включая изображения.Самый простой способ получить встроенные метаданные (для MP3, которых нет в библиотеке iTunes) - это класс AVAsset.Если вы пытаетесь получить метаданные по сети, используйте вместо этого AVURLAsset, но доступ к метаданным одинаков с любым из них.

AVAsset имеет свойство NSArray с именем commonMetadata, которое содержит экземпляры класса AVMetadataItem.Вы можете выполнить итерацию по этому массиву, чтобы найти элемент с commonKey из (обычно) "artwork" Свойство value этого AVMetadataItem должно представлять собой NSDictionary данных об иллюстрации.В этом словаре вы найдете ключ "data", который должен содержать данные, которые вы можете использовать для построения UIImage.Это вполне вложено, и это описание, по общему признанию, сбивает с толку.Итак, вот пример кода.

NSURL *url = <# url of resource here #>;
AVAsset *asset = [AVAsset assetWithURL:url];
for (AVMetadataItem *metadataItem in asset.commonMetadata) {
    if ([metadataItem.commonKey isEqualToString:@"artwork"]){
        NSDictionary *imageDataDictionary = (NSDictionary *)metadataItem.value;
        NSData *imageData = [imageDataDictionary objectForKey:@"data"];
        UIImage *image = [UIImage imageWithData:imageData];
         // Display this image on my UIImageView property imageView
        self.imageView.image = image;
    }
}

Опять же, это очень простой пример загрузки из локального ресурса;Если вы загружаете это по сети, вы должны использовать AVURLAsset.Также будьте осторожны с блокирующим характером этого вызова.

0 голосов
/ 20 августа 2014
-(UIImage *)getMP3Pic:(NSURL *)url
{
    AVAsset *asset = [AVAsset assetWithURL:url];
    for (AVMetadataItem *metadataItem in asset.commonMetadata) {
       if ([metadataItem.commonKey isEqualToString:@"artwork"]){
            return [UIImage imageWithData:(NSData *)metadataItem.value];
       }
    }
}
0 голосов
/ 20 октября 2011

Посмотрите на пример Apple AddMusic проекта, и вы увидите, как они получают обложку альбома через MPMediaItem & MPMediaItemArtwork объекты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...