我想获取文件名,如果可能的话,从AVPlayerItem中的流媒体网址获取专辑图片,我正在玩AVQueuePlayer,但我不知道如何去做。
另外,如果我的流媒体网址没有任何元数据,我可以将元数据放入NSURL*
,然后再传递给AVPlayerItem吗?
感谢。
答案 0 :(得分:37)
我很惊讶没有人回答这个问题。 事实上,没有人回答我的任何其他问题。 让我想知道这里的人们真正拥有多少知识。
无论如何,我会继续回答我自己的问题。 我通过执行以下操作找到了如何获取元数据:
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
的{{1}}(例如commonKey
)。然后,当我发现title
只是从中获取AVMetadataItem
属性时。
现在,这很有效但是当你尝试获取数据时可能需要一段时间。您可以通过将value
发送到刚刚找到的loadValuesAsynchronouslyForKeys:completionHandler:
来异步加载数据。
希望对可能发现自己遇到同样问题的人有所帮助。
答案 1 :(得分:2)
检索特定项目时,我将使用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;