我很惊讶没有人回答这个问题。 事实上,没有人回答我的任何其他问题。 让我想知道这里的人们真正拥有多少知识。
无论如何,我会继续回答我自己的问题。 我通过执行以下操作找到了如何获取元数据:
AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:url]; NSArray *metadataList = [playerItem.asset commonMetadata]; for (AVMetadataItem *metaItem in metadataList) { NSLog(@"%@",[metaItem commonKey]); }
这给了我一个如下列表:
title creationDate artwork albumName artist
现在,通过该列表,我知道如何从我的音频流中访问元数据。只是简单地通过 NSArray 并寻找一个 AVMetadataItem 那有 commonKey 我想要的(例如, title )。然后当我找到了 AVMetadataItem 得到的 value 它的财产。
NSArray
AVMetadataItem
commonKey
title
value
现在,这很好用但是当你试图获取数据时可能需要一段时间。您可以通过发送异步加载数据 loadValuesAsynchronouslyForKeys:completionHandler: 到了 AVMetadataItem 你才刚刚找到
loadValuesAsynchronouslyForKeys:completionHandler:
希望对任何可能发现自己遇到同样问题的人有所帮助。
检索特定项时,我将使用AVMetadataFormat.h中声明的元数据公共密钥常量,即: 的 AVMetadataCommonKeyTitle 强> 。
NSUInteger titleIndex = [avItem.asset.commonMetadata indexOfObjectPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) { AVMutableMetadataItem *metaItem = (AVMutableMetadataItem *)obj; if ([metaItem.commonKey isEqualToString:AVMetadataCommonKeyTitle]) { return YES; } return NO; }]; AVMutableMetadataItem *item = [avItem.asset.commonMetadata objectAtIndex:titleIndex]; NSString *title = (NSString *)item.value;