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 个字母键 (例如 TT1
、TAL
,但 AVMetadataKey
定义 4 个字母键 ,例如 AVMetadataKey.id3MetadataKeyAlbumTitle
= TALB
.
我找不到在 4 和 3 字母代码之间进行转换的方法。
如有任何帮助,我们将不胜感激。
标签有两个版本:ID3 2.2 的 3 字节标签和 2.3+ 的 4 字节标签。 AVMetadataKey 中声明的常量是 4 字节的标签。
如果您看到 3 字节标签作为键,那么它一定是一个标记有 21 年历史的 v2.2 标签的文件,并且 AVAsset 按原样将它们提供给您,所以您您只需要自己进行转换。标签不多,自己轻松制作一个转化列表。
我正在尝试使用 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 个字母键 (例如 TT1
、TAL
,但 AVMetadataKey
定义 4 个字母键 ,例如 AVMetadataKey.id3MetadataKeyAlbumTitle
= TALB
.
我找不到在 4 和 3 字母代码之间进行转换的方法。
如有任何帮助,我们将不胜感激。
标签有两个版本:ID3 2.2 的 3 字节标签和 2.3+ 的 4 字节标签。 AVMetadataKey 中声明的常量是 4 字节的标签。
如果您看到 3 字节标签作为键,那么它一定是一个标记有 21 年历史的 v2.2 标签的文件,并且 AVAsset 按原样将它们提供给您,所以您您只需要自己进行转换。标签不多,自己轻松制作一个转化列表。