Ios 错误代码1886681407 AudioFileGetProperty给出了什么?
我想得到mp3文件中的相册图片,这是我代码的一部分Ios 错误代码1886681407 AudioFileGetProperty给出了什么?,ios,audio,error-handling,Ios,Audio,Error Handling,我想得到mp3文件中的相册图片,这是我代码的一部分 //the Chinese is music name NSURL *fileURL = [NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:@"安和桥" ofType:@"mp3"]]; AudioFileTypeID fileTypeHint = kAudioFileMP3Type; AudioFileID fileID = nil;
//the Chinese is music name
NSURL *fileURL = [NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:@"安和桥" ofType:@"mp3"]];
AudioFileTypeID fileTypeHint = kAudioFileMP3Type;
AudioFileID fileID = nil;
OSStatus err = noErr;
err = AudioFileOpenURL((__bridge CFURLRef)fileURL, kAudioFileReadPermission, 0, &fileID);
UInt32 id3DataSize = 0;
err = AudioFileGetPropertyInfo(fileID, kAudioFilePropertyID3Tag, &id3DataSize, NULL);
NSDictionary *piDict = nil;
UInt32 piDataSize = sizeof(piDict);
err = AudioFileGetProperty(fileID, kAudioFilePropertyInfoDictionary, &piDataSize, &piDict);
CFDataRef AlbumPic = nil;
UInt32 picDataSize = sizeof(picDataSize);
err = AudioFileGetProperty(fileID, kAudioFilePropertyAlbumArtwork, &picDataSize, &AlbumPic);
NSError *error = [NSError errorWithDomain:NSOSStatusErrorDomain code:err userInfo:nil];
NSLog(@"Error: %@", [error description]);
NSData *imgdata = (__bridge NSData *)AlbumPic
我可以正确获取相册名称,但图像数据为零。我打印了错误信息
2014-09-09 20:07:05.129 Music_Player[2792:60b] Error: Error Domain=NSOSStatusErrorDomain Code=1886681407 "The operation couldn’t be completed. (OSStatus error 1886681407.)"
在另一个问题中,有人说这可能是许可问题,但它是set属性,然而,我得到了属性,所以我认为这不可能是那个原因。但我真的不知道为什么?
有时,使用AudioFile无法从音频文件中获取所有信息。改用avurlast
- (void)getAlbumArtworkInfo
{
NSURL *fileUrl = [NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:@"abc" ofType:@"mp3"]];
AVURLAsset *avURLAsset = [AVURLAsset URLAssetWithURL:fileUrl options:nil];
for (NSString *format in [avURLAsset availableMetadataFormats]) {
for (AVMetadataItem *metadataItem in [avURLAsset metadataForFormat:format]) {
if ([metadataItem.commonKey isEqualToString:@"artwork"]) {
UIImage *artImageInMp3 = [UIImage imageWithData:[(NSDictionary*)metadataItem.value objectForKey:@"data"]];
NSLog(@"artImageInMp3 %@",artImageInMp3);
break;
}
}
}
}
它就像你说的那样工作,但我还是不太清楚,通常我们使用这个方法AudioFile来获得什么信息?使用AudioFile你通常可以获得诸如标题、艺术家、持续时间和专辑等信息。使用AVURLAsset,我可以获得所有这些信息?有时使用AVURLAsset你无法获得ID3信息,你可以查看这些信息