Skip to content

IOS:AVMetadataItem

An AVMetadataItem object represents an item of metadata associated with an audiovisual asset or with one of its tracks. To create metadata items for your own assets, you use the mutable subclass, AVMutableMetadataItem.

Extracting MP3 Album artwork

MP3파일의 앨범 이미지를 추출하여, 출력하는 방법은 아래와 같다.

- (void)loadImage:(MPMediaItem*)item
{
    if (item == nil) {
        return;
    }

    NSURL * songUrl = [item valueForProperty:MPMediaItemPropertyAssetURL];

    // NSString *filePath = [[NSBundle mainBundle] pathForResource:@"filename" ofType:@"mp3"];
    // NSURL *fileURL = [NSURL fileURLWithPath:filePath];
    AVAsset *asset = [AVURLAsset URLAssetWithURL:songUrl options:nil];

    NSArray *keys = [NSArray arrayWithObjects:@"commonMetadata", nil];
    [asset loadValuesAsynchronouslyForKeys:keys completionHandler:^{
        NSArray *artworks = [AVMetadataItem metadataItemsFromArray:asset.commonMetadata
                                                           withKey:AVMetadataCommonKeyArtwork
                                                          keySpace:AVMetadataKeySpaceCommon];

        UIImage * img = nil;
        for (AVMetadataItem *metadata in artworks) {
            if ([metadata.keySpace isEqualToString:AVMetadataKeySpaceID3]) {
                NSDictionary *dict = [metadata.value copyWithZone:nil];
                img = [UIImage imageWithData:[dict objectForKey:@"data"]];
            } else if ([metadata.keySpace isEqualToString:AVMetadataKeySpaceiTunes]) {
                img = [UIImage imageWithData:[metadata.value copyWithZone:nil]];
            }
        }

        [self performSelectorOnMainThread:@selector(setArtwork:) withObject:img waitUntilDone:NO];
    }];
}

- (void)setArtwork:(UIImage*)img
{
    if (img != nil) {
        self.selectAblumImageView.image = img;
    } else {
        self.selectAblumImageView.image = [UIImage imageNamed:@"icon_music_listdefault.png"];
    }
}

Favorite site