我一直在尝试从 iPhone 应用程序的 .mp3 文件中提取元数据信息。我试过AVAsset
这样使用。它不起作用,常见的元数据是空的。但是 audacity 和来自应用商店的另一个 iOS 应用可以检索元数据详细信息。不知道为什么?。
所以,我尝试使用AudioToolBox
框架 提取下面的代码
CFDictionaryRef piDict = nil;
UInt32 piDataSize = sizeof(piDict);
// Populates a CFDictionary with the ID3 tag properties
err = AudioFileGetProperty(fileID, kAudioFilePropertyInfoDictionary, &piDataSize, &piDict);
if(err != noErr) {
NSLog(@"AudioFileGetProperty failed for property info dictionary");
return nil;
}
// Toll free bridge the CFDictionary so that we can interact with it via objc
NSMutableDictionary* nsDict = [(__bridge NSDictionary*)piDict mutableCopy];
这将返回除专辑封面之外的所有内容。当我尝试使用 提取专辑封面kAudioFilePropertyAlbumArtwork
时,出现osstatus
错误(操作无法完成)。
所以最后,我用ObjC
libId3 的包装器试试运气(在此处找到)。它工作得很好。我可以得到艺术品。
我的问题是,为什么AVAsset
无法检索数据?我在那里想念什么?有人设法让它工作吗?样品将不胜感激。
为什么kAudioFilePropertyAlbumArtwork
提取无法完成?这两个问题都发生在我拥有的所有 .mp3 文件中。
解决方案更新:
AVAsset
对我不起作用,因为我使用了我的网址
[NSURL URLWithString:[filePath stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]
而不是
NSURL *fileURL = [NSURL fileURLWithPath:filePath];