首页 文章

从音频流中获取元数据

提问于
浏览
11

我想获取文件名,如果可能的话,从AVPlayerItem中的流媒体URL获取专辑图像,我正在使用AVQueuePlayer,但我不知道该怎么做 .

此外,如果事实证明我的流媒体网址没有任何元数据,我可以将元数据放入我的 NSURL* ,然后再将其传递给AVPlayerItem吗?

谢谢 .

2 回答

  • 2

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

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

    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 来异步加载数据 .

    希望对任何可能发现自己遇到同样问题的人有所帮助 .

  • 37

    检索特定项时,我将使用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;
    

相关问题