我需要一些帮助。 情况如下: 我可以获得媒体文件列表(mp3s,m4as,m4vs等)以及文件链接(如下所示:
http://10.0.1.1/Media/Files%20Folder/File%20Itself.m4v
所以我得到一个包含这些文件链接的数组。
我需要在UITableView中显示这些项目以及相应的标签(流派,艺术家等),最重要的是,专辑封面(它嵌入文件中)。
我如何获取该信息?如果可能,不加载整个媒体文件。 谢谢你的帮助。
答案 0 :(得分:1)
它叫做metadataRetriever。它返回
的数组作为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