AVKit 和 ID3 元数据密钥

AVKit and ID3 metadata keys

我正在尝试使用 AVKit 框架从 mp3 文件(以及其他文件)中提取所有可用的元数据。

我首先得到 "common" 元数据,例如:

    let asset = AVAsset(url: URL(fileURLWithPath: path))
    for item in asset.commonMetadata {
        if let commonKey = item.commonKey {
            if let storageKey = stringValueKeys[commonKey] {

而且效果很好。

请注意,我查找存储在 stringValueKeys 哈希中的 storageKey 以确定我是否对此项目感兴趣,然后将其存储到内部数据库中进行缓存。

然后我单独处理 id3 标签(asset.commonKey 不返回它们)使用:

        for item in asset.metadata(forFormat: .id3Metadata) {

        if let key = item.key as? AVMetadataKey {
            if let storageKey = stringValueKeys[key] {

我可以正确获取数据,但是返回的key和框架定义的key不匹配!?

item.key 包含 ID3 标准定义的 3 个字母键 (例如 TT1TAL,但 AVMetadataKey 定义 4 个字母键 ,例如 AVMetadataKey.id3MetadataKeyAlbumTitle = TALB.

我找不到在 4 和 3 字母代码之间进行转换的方法。

如有任何帮助,我们将不胜感激。

标签有两个版本:ID3 2.2 的 3 字节标签和 2.3+ 的 4 字节标签。 AVMetadataKey 中声明的常量是 4 字节的标签。

如果您看到 3 字节标签作为键,那么它一定是一个标记有 21 年历史的 v2.2 标签的文件,并且 AVAsset 按原样将它们提供给您,所以您您只需要自己进行转换。标签不多,自己轻松制作一个转化列表。