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

时间:2010-07-27 04:00:57

标签: iphone uitableview mp3 id3-tag

我需要一些帮助。 情况如下: 我可以获得媒体文件列表(mp3s,m4as,m4vs等)以及文件链接(如下所示:

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

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

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

我如何获取该信息?如果可能,不加载整个媒体文件。 谢谢你的帮助。

3 个答案:

答案 0 :(得分:1)

我写了class for this

它叫做metadataRetriever。它返回

的数组
  • 艺术家,
  • song,
  • 和专辑

作为NSStrings(按此顺序)

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

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

答案 1 :(得分:0)

您需要使用AVURLAsset以及方法-loadValuesAsynchronouslyForKeys:completionHandler:

另请注意,文档说

  

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

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

答案 2 :(得分:0)

查看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