【问题标题】:Getting metadata from an audio stream从音频流中获取元数据
【发布时间】:2011-10-10 00:24:00
【问题描述】:

我想从我正在使用 AVQueuePlayer 播放的 AVPlayerItem 中的流 URL 中获取文件名和专辑图像,但我不知道该怎么做。

另外,如果我的流媒体 URL 没有任何元数据,我可以在将元数据传递给 AVPlayerItem 之前将元数据放入我的NSURL* 吗?

谢谢。

【问题讨论】:

  • 我使用 Dropbox API 来获取流 URL
  • 音频是的。但我认为无论是音频还是视频都没有关系。它们都由同一个 AVPlayerItem 处理
  • stackoverflow.com/questions/44535465/… 帮帮我,谢谢你提前......

标签: ios ios4 metadata audio-streaming avqueueplayer


【解决方案1】:

我很惊讶没有人回答这个问题。 事实上,没有人回答我的任何其他问题。 让我想知道这里的人真正拥有多少知识。

无论如何,我会继续回答我自己的问题。 我通过执行以下操作了解了如何获取元数据:

AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:url];
NSArray *metadataList = [playerItem.asset commonMetadata];
for (AVMetadataItem *metaItem in metadataList) {
    NSLog(@"%@",[metaItem commonKey]);
}

这给了我一个如下列表:

title
creationDate
artwork
albumName
artist

现在有了这个列表,我就知道如何从我的音频流中访问元数据了。只需简单地浏览NSArray 并查找具有我想要的commonKeyAVMetadataItem(例如title)。然后,当我找到 AVMetadataItem 时,只需从中获取 value 属性。

现在,这很有效,但是当您尝试获取数据时可能需要一段时间。您可以通过将loadValuesAsynchronouslyForKeys:completionHandler: 发送到您刚刚找到的AVMetadataItem 来异步加载数据。

希望对遇到同样问题的人有所帮助。

【讨论】:

  • 出于某种原因,我的通用元数据是 0 值。而 timedmetadata 有一个值 ["title"]
  • 做好自己的研究并找到答案。荣誉:)
【解决方案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;

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2021-01-30
  • 2013-11-17
  • 1970-01-01
  • 1970-01-01
  • 2012-11-18
  • 2019-12-10
  • 2016-09-14
  • 2012-07-26
相关资源
最近更新 更多