我想从我正在使用 AVQueuePlayer 播放的 AVPlayerItem 中的流 URL 中获取文件名和专辑图像,但我不知道该怎么做。
此外,如果事实证明我的流式 URL 没有任何元数据,我可以在将元数据NSURL*
传递给 AVPlayerItem 之前将元数据放入其中吗?
谢谢。
我想从我正在使用 AVQueuePlayer 播放的 AVPlayerItem 中的流 URL 中获取文件名和专辑图像,但我不知道该怎么做。
此外,如果事实证明我的流式 URL 没有任何元数据,我可以在将元数据NSURL*
传递给 AVPlayerItem 之前将元数据放入其中吗?
谢谢。
好吧,我很惊讶没有人回答这个问题。事实上,没有人回答我的任何其他问题。让我想知道这里的人真正拥有多少知识。
无论如何,我会继续回答我自己的问题。我通过执行以下操作了解了如何获取元数据:
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
财产的时候。
现在,这很好用,但是当您尝试获取数据时可能需要一段时间。loadValuesAsynchronouslyForKeys:completionHandler:
您可以通过发送到AVMetadataItem
您刚刚找到的数据来异步加载数据。
希望对任何可能遇到同样问题的人有所帮助。
检索特定项目时,我将使用在 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;