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

发布于 2024-09-11 04:49:42 字数 289 浏览 4 评论 0原文

我需要一些帮助。 情况是这样的: 我可以获取媒体文件列表(mp3、m4as、m4vs 等)以及文件的链接(看起来像:

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

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

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

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

I need some help.
The situation looks like this:
I can get list of media files (mp3s, m4as, m4vs an so on) with link to the file (looks like:

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

So I get an array consisting of links to these files.

I need to display these items in UITableView with corresponding tags (Genre, Artist etc.) and most importantly, album art (it's embedded in file).

How can I fetch that information? If possible, without loading whole media file.
Thanks for any help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

老街孤人 2024-09-18 04:49:45

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

Check out the 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
べ繥欢鉨o。 2024-09-18 04:49:44

我为此编写了一个

它叫做metadataRetriever。 的数组

  • 它以 NSStrings 的形式返回艺术家、
  • 歌曲
  • 和专辑

(按此顺序)。

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

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

I wrote a class for this

It's called metadataRetriever. It returns an array of the

  • artist,
  • song,
  • and album

as NSStrings (in that order)

It's really fast and is safe for synchronous use.

One caveat, it doesn't work for .m4a's because the id3 info for .m4a's is different.

逐鹿 2024-09-18 04:49:44

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

另请注意,文档说

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

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

You'll want to use AVURLAsset along with the method -loadValuesAsynchronouslyForKeys:completionHandler:.

Also note that the docs say

AVAsset and other classes provide their metadata “lazily” (see AVAsynchronousKeyValueLoading), meaning that you can obtain objects from those arrays without incurring overhead for items you don’t ultimately inspect.

So I'm guessing you won't run into problems of loading the whole file.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文