【问题标题】:Is there a way to extract embedded image data from an mp3 in ios有没有办法从ios中的mp3中提取嵌入的图像数据
【发布时间】:2011-10-18 21:58:24
【问题描述】:

我了解 mp3 有时包含专辑插图(在我的情况下,我正在处理播客文件)。 iOS 中有没有办法从 mp3 文件中提取图像数据?

【问题讨论】:

标签: iphone objective-c ios image mp3


【解决方案1】:

MP3(包括播客)通常具有嵌入的元数据,包括艺术作品。获取嵌入元数据(对于不在 iTunes 库中的 MP3)的最简单方法是通过 AVAsset 类。如果您尝试通过网络获取元数据,请改用AVURLAsset,但访问元数据与任何一个都相同。

AVAsset 有一个名为commonMetadata 的NSArray 属性,其中包含AVMetadataItem 类的实例。您可以遍历此数组以找到具有(通常)“artwork”的commonKey 的元素此AVMetadataItem 的value 属性应该是有关艺术品数据的NSDictionary。在此字典中,您将找到键“data”,其中应包含可用于构造UIImage 的数据。这是非常嵌套的,这种描述无疑是令人困惑的。所以这里是一个代码示例。

NSURL *url = <# url of resource here #>;
AVAsset *asset = [AVAsset assetWithURL:url];
for (AVMetadataItem *metadataItem in asset.commonMetadata) {
    if ([metadataItem.commonKey isEqualToString:@"artwork"]){
        NSDictionary *imageDataDictionary = (NSDictionary *)metadataItem.value;
        NSData *imageData = [imageDataDictionary objectForKey:@"data"];
        UIImage *image = [UIImage imageWithData:imageData];
         // Display this image on my UIImageView property imageView
        self.imageView.image = image;
    }
}

这又是一个如何从本地资源加载的非常简单的示例;如果您通过网络加载它,您应该使用AVURLAsset。还要注意此调用的阻塞性质。

【讨论】:

  • +1 NSURL *fileURL1 = [NSURL fileURLWithPath:str];其中str是文件的路径..我卡住了,因为我正在使用[NSURL URLWithString:str]..我发布了..也许可以帮助其他人:)
【解决方案2】:

看看 Apple 的示例 AddMusic 项目,您将了解他们如何通过 MPMediaItem 和 MPMediaItemArtwork 对象获取专辑插图。

【讨论】:

  • 谢谢迈克尔,但如果我错了,请纠正我,我的理解是 MPMediaItems 仅指用户 iPod 库中的项目。我正在为用户未在 iTunes 中订阅的播客解析播客的 rss 提要和流式音频。有什么想法吗?
  • 啊,出于某种原因,我认为播客已经在您的 iTunes 资料库中。让我回到绘图板上。现在,我无法想象艺术品以某种方式嵌入到 .mp3 文件中。也许在 .m3u 播放列表或 RSS 提要中,但在 .mp3 文件中?
【解决方案3】:
-(UIImage *)getMP3Pic:(NSURL *)url
{
    AVAsset *asset = [AVAsset assetWithURL:url];
    for (AVMetadataItem *metadataItem in asset.commonMetadata) {
       if ([metadataItem.commonKey isEqualToString:@"artwork"]){
            return [UIImage imageWithData:(NSData *)metadataItem.value];
       }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-26
    • 2017-02-23
    • 2011-01-09
    • 2020-08-28
    • 2023-04-04
    • 2020-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多