我想获取文件名,如果可能的话,从AVPlayerItem中的流媒体URL获取专辑图像,我正在使用AVQueuePlayer,但我不知道该怎么做 .
此外,如果事实证明我的流媒体网址没有任何元数据,我可以将元数据放入我的 NSURL* ,然后再将其传递给AVPlayerItem吗?
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 的 AVMetadataItem (例如, title ) . 然后,当我发现 AVMetadataItem 刚从中获取 value 属性时 .
NSArray
commonKey
AVMetadataItem
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;
2 回答
我很惊讶没有人回答这个问题 . 事实上,没有人回答我的任何其他问题 . 让我想知道这里的人们真正拥有多少知识 .
无论如何,我会继续回答我自己的问题 . 我通过执行以下操作找到了如何获取元数据:
这给了我一个如下列表:
现在,通过该列表,我知道如何从我的音频流中访问元数据 . 只需简单地浏览
NSArray
并查找具有我想要的commonKey
的AVMetadataItem
(例如,title
) . 然后,当我发现AVMetadataItem
刚从中获取value
属性时 .现在,这很好用但是当你试图获取数据时可能需要一段时间 . 您可以通过将
loadValuesAsynchronouslyForKeys:completionHandler:
发送到刚刚找到的AVMetadataItem
来异步加载数据 .希望对任何可能发现自己遇到同样问题的人有所帮助 .
检索特定项时,我将使用AVMetadataFormat.h中声明的元数据公共密钥常量,即: AVMetadataCommonKeyTitle .