我想从我正在使用AVQueuePlayer播放的AVPlayerItem的流媒体 URL 中获取文件名和(如果可能)专辑封面图片,但我不知道如何处理。
此外,如果我的流媒体URL没有任何元数据,我是否可以在将其传递给AVPlayerItem之前在我的
谢谢。
此外,如果我的流媒体URL没有任何元数据,我是否可以在将其传递给AVPlayerItem之前在我的
NSURL*
中放入元数据?谢谢。
NSURL*
中放入元数据?我惊讶地发现没有人回答这个问题。实际上,我的其他问题都没有得到回答。 这让我怀疑在这里的人们真正拥有多少知识。
无论如何,我将自己的问题回答了。 我找到了以下方法来获取元数据:
AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:url];
NSArray *metadataList = [playerItem.asset commonMetadata];
for (AVMetadataItem *metaItem in metadataList) {
NSLog(@"%@",[metaItem commonKey]);
}
这给了我以下的列表:
title
creationDate
artwork
albumName
artist
现在我有了一个列表,知道如何访问音频流的元数据。只需遍历 NSArray
并查找具有所需commonKey
(例如title
)的AVMetadataItem
。找到AVMetadataItem
后,只需从中获取value
属性即可。
现在,这样做非常好,但是获取数据可能需要一段时间。您可以通过向刚刚找到的AVMetadataItem
发送loadValuesAsynchronouslyForKeys: completionHandler:
来异步加载数据。
希望这对于面临相同问题的任何人都有所帮助。
当检索特定项目时,我会使用在AVMetadataFormat.h中声明的Metadata常见键常量,例如: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;