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
.Также будьте осторожны с блокирующим характером этого вызова.