如何在 iPhone 上获取媒体文件的 ID3 标签

Posted

技术标签:

【中文标题】如何在 iPhone 上获取媒体文件的 ID3 标签【英文标题】:How to get ID3 tags for media files on iPhone 【发布时间】:2010-07-27 04:00:56 【问题描述】:

我需要一些帮助。 情况如下所示: 我可以获得带有文件链接的媒体文件列表(mp3s、m4as、m4vs 等等)(看起来像:

http://10.0.1.1/Media/Files%20Folder/File%20Itself.m4v

所以我得到了一个包含这些文件的链接的数组。

我需要在 UITableView 中显示这些项目以及相应的标签(流派、艺术家等),最重要的是,专辑封面(嵌入在文件中)。

如何获取这些信息?如果可能,不加载整个媒体文件。 感谢您的帮助。

【问题讨论】:

【参考方案1】:

我写了class for this

它被称为 metadataRetriever。它返回一个数组

艺术家, 歌曲, 和专辑

作为 NSStrings(按此顺序)

它非常快,并且可以安全地同步使用。

需要注意的是,它不适用于 .m4a's,因为 .m4a's 的 id3 信息不同。

【讨论】:

【参考方案2】:

您需要将AVURLAsset-loadValuesAsynchronouslyForKeys:completionHandler: 方法一起使用。

还要注意文档说

AVAsset 和其他类“延迟地”提供它们的元数据(请参阅 AVAsynchronousKeyValueLoading),这意味着您可以从这些数组中获取对象,而不会为您最终不检查的项目产生开销。

所以我猜你不会遇到加载整个文件的问题。

【讨论】:

好像只有ios4。我也在写 iPad 版本,我想我得另辟蹊径。感谢您展示简单的方法。【参考方案3】:

查看AVMetadataItem API:

let asset = AVAsset(url: url)

assert(asset.isReadable)

let artwork = AVMetadataItem.metadataItems(from: asset.metadata, filteredByIdentifier: .commonIdentifierArtwork).first?.dataValue
let artist = AVMetadataItem.metadataItems(from: asset.metadata, filteredByIdentifier: .commonIdentifierArtist).first?.stringValue
let title = AVMetadataItem.metadataItems(from: asset.metadata, filteredByIdentifier: .commonIdentifierTitle).first?.stringValue
let albumName = AVMetadataItem.metadataItems(from: asset.metadata, filteredByIdentifier: .commonIdentifierAlbumName).first?.stringValue
let duration = asset.duration.seconds

【讨论】:

以上是关于如何在 iPhone 上获取媒体文件的 ID3 标签的主要内容,如果未能解决你的问题,请参考以下文章

通过浏览器使用 javascript/jQuery 读取和写入 ID3 标签到本地文件?

iPhone 支持的 ID3 标签中的 APIC 格式都有哪些?

如何获取特定 URL 中音频文件的 ID3Tags 信息?

如何使用 php 获取我的 mp3 文件的 ID3 标签?

如何在文件副本之间同步音频元数据(例如 ID3)?

如何使用 taglib 将图片添加到 ID3 相册标签#