Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/109.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
Objective c AVFoundation获得歌曲的专辑图像_Objective C_Ios_Avfoundation_Avplayer - Fatal编程技术网

Objective c AVFoundation获得歌曲的专辑图像

Objective c AVFoundation获得歌曲的专辑图像,objective-c,ios,avfoundation,avplayer,Objective C,Ios,Avfoundation,Avplayer,我想得到这首歌的专辑图像/封面。可能吗?我正在使用AVPlayer进行音频流传输,如果歌曲包含,我需要获得专辑封面。就像在iTunes中一样 解决方案: UIImage *img = nil; NSArray *metadata = _avplayer.currentItem.asset.commonMetadata; for(AVMetadataItem *item in metadata){ if([item.commonKey isEqualToString:@"artwork"]

我想得到这首歌的专辑图像/封面。可能吗?我正在使用AVPlayer进行音频流传输,如果歌曲包含,我需要获得专辑封面。就像在iTunes中一样

解决方案:

UIImage *img = nil;
NSArray *metadata = _avplayer.currentItem.asset.commonMetadata;
for(AVMetadataItem *item in metadata){
    if([item.commonKey isEqualToString:@"artwork"]){
       NSData *data = item.value[@"data"];
       img = [UIImage imageWithData:data];
       return img;
    }
}
return img;

如果您的文件是正确的格式,即MP3,您可以将文件的数据加载到ID3标记解析器中。它是为OS X设计的,但看起来应该可以很容易地移植到iOS。

您应该试试这个,但我使用的是MPMusicLayer:

musicPlayer = [MPMusicPlayerController iPodMusicPlayer];
currentItem = [musicPlayer nowPlayingItem];
if (currentItem == nil) {
    //Not playing
}
else 
{
    NSString *name = [currentItem valueForProperty:@"title"];
    int length = [name length];
    if (length > 30) {
        name = [name substringWithRange:NSMakeRange(0, 30)];
        name = [name stringByAppendingString:@"..."];
    }
    NSString *album = [currentItem valueForProperty:@"albumTitle"];
    int lengthAl = [album length];
    if (lengthAl > 30) {
        album = [album substringWithRange:NSMakeRange(0, 30)];
        album = [album stringByAppendingString:@"..."];
    }
    NSString *artist = [currentItem valueForProperty:@"artist"];
    int lengthAr = [artist length];
    if (lengthAr > 30) {
        artist = [artist substringWithRange:NSMakeRange(0, 30)];
        artist = [artist stringByAppendingString:@"..."];
    }
    MPMediaItemArtwork *artworkPrev = [currentItem valueForProperty:@"artwork"];
    if (artworkPrev != nil)
    {
        UIImage *img = [artworkPrev imageWithSize:CGSizeMake(65, 65)];
        UIImageView *imgNew = [[UIImageView alloc] initWithImage:img];
        imgNew.frame = CGRectMake(-15,-20, 65, 65);
    }
}

正如您所看到的,我使用NSMakerRange,只是为了不在应用程序中留下空间。我希望这对您有所帮助

这只供本地玩家使用。我需要在流媒体播放时获得图像:)但谢谢,这将有助于某些时候还需要流媒体音乐的专辑封面!你好,你知道如何获得专辑封面了吗?我试图使用上一个调频服务,但我的收音机里的歌手不受欢迎,所以我无法得到专辑封面((