Pip*_*ipo 6 objective-c avfoundation ios
我正在尝试使用AVFoundation框架从mp3和m4a文件中提取元数据.
这是测试代码:
+ (void)printMetadataForFileAtPath:(NSString *)path
{
NSURL *url = [NSURL fileURLWithPath:path];
AVAsset *asset = [AVURLAsset assetWithURL:url];
NSArray *availableFormats = [asset availableMetadataFormats];
NSLog(@"Available formats: %@", availableFormats);
NSArray *iTunesMetadata = [asset metadataForFormat:AVMetadataFormatiTunesMetadata];
for (AVMetadataItem *item in iTunesMetadata)
{
NSLog(@"%@ %x", item.key, [(NSNumber *)item.key integerValue]);
if ([item.key isEqual:AVMetadataiTunesMetadataKeySongName])
{
NSLog(@"FOUND song name: %@", item.stringValue);
}
}
NSLog(@"====================");
NSLog(@"%@ %@ %@", AVMetadataiTunesMetadataKeySongName, AVMetadataiTunesMetadataKeyAlbum, AVMetadataiTunesMetadataKeyArtist);
}
Run Code Online (Sandbox Code Playgroud)
这是输出:
Available formats: (
"com.apple.itunes",
"com.apple.quicktime.udta"
)
-1452383891 a96e616d
-1455336876 a9415254
1631670868 61415254
-1451789708 a9777274
-1453233054 a9616c62
-1452838288 a9677270
-1452841618 a967656e
1953655662 74726b6e
1684632427 6469736b
-1453039239 a9646179
-1453101708 a9636d74
1668311404 6370696c
1885823344 70676170
1953329263 746d706f
-1451987089 a9746f6f
com.apple.iTunes.iTun
com.apple.iTunes.Enco
1668249202 636f7672
-1452508814 a96c7972
====================
@nam @alb @ART
Run Code Online (Sandbox Code Playgroud)
当解释为4个ASCII字符时:
© n a m
© A R T
a A R T
© w r t
© a l b
© g r p
© g e n
t r k n
d i s k
© d a y
© c m t
c p i l
p g a p
t m p o
© t o o
Run Code Online (Sandbox Code Playgroud)
所以它似乎item.key是一个NSNumber对象,但开头的常量AVMetadataiTunesMetadataKey...是NSString对象.获取元数据的正确方法是什么?当我使用[AVAsset commonMetadata]键也是NSString对象时,与AVMetadataCommonKey...常量的比较按预期工作.
小智 1
AVFoundation API 在处理元数据时相当混乱。
AVMetadataiTunesMetadataKey*值定义的键与 AVMetadataItem 的键属性值不同。AVMetadataiTunesMetadataKey* 密钥将与 API 一起使用,[AVMetadataItem metadataItemsFromArray:withKey:keySpace:AVMetadataKeySpaceiTunes]以过滤掉具有特定 iTunes 密钥的元数据项目。
AVMetadataItem 的键和值取决于资源文件的确切格式。除了使用上面的函数过滤掉键之外,我建议使用 item 的commonKey属性,它提供了比其他属性更通用的“key”属性。
更改示例代码以打印出commonKey以及项目的value。这里有些例子:
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
5315 次 |
| 最近记录: |