我需要一些帮助。情况如下所示:我可以获取带有文件链接的媒体文件列表(mp3s、m4as、m4vs 等)(如下所示:
http://10.0.1.1/Media/Files%20Folder/File%20Itself.m4v
所以我得到了一个包含这些文件的链接的数组。
我需要在 UITableView 中使用相应的标签(流派、艺术家等)显示这些项目,最重要的是,专辑封面(它嵌入在文件中)。
我怎样才能获取这些信息?如果可能,不加载整个媒体文件。谢谢你的帮助。
我需要一些帮助。情况如下所示:我可以获取带有文件链接的媒体文件列表(mp3s、m4as、m4vs 等)(如下所示:
http://10.0.1.1/Media/Files%20Folder/File%20Itself.m4v
所以我得到了一个包含这些文件的链接的数组。
我需要在 UITableView 中使用相应的标签(流派、艺术家等)显示这些项目,最重要的是,专辑封面(它嵌入在文件中)。
我怎样才能获取这些信息?如果可能,不加载整个媒体文件。谢谢你的帮助。
我为此写了一堂课
它称为元数据检索器。它返回一个数组
作为 NSStrings(按此顺序)
它非常快,并且对于同步使用是安全的。
需要注意的是,它不起作用,.m4a's
因为 id3 信息.m4a's
不同。
您将要AVURLAsset
与方法一起使用-loadValuesAsynchronouslyForKeys:completionHandler:
。
另请注意,文档说
AVAsset 和其他类“延迟”提供它们的元数据(请参阅 AVAsynchronousKeyValueLoading),这意味着您可以从这些数组中获取对象,而不会为您最终不检查的项目产生开销。
所以我猜你不会遇到加载整个文件的问题。
查看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