ios - Avmetadatataitem 在 iOS 上从 iTunes 或 ID3 元数据获取 trackNumber

标签 ios avmetadataitem

我正在尝试获取 aac、mp3 或 mp4 文件的 trackNumber。它不在 commonMetadata 中,所以我开始探索其他元数据键。我找到了一些看起来像它的东西,但我还无法阅读,也无法理解它。即使是原始数据对我来说也毫无意义。

目前,我只是尝试使用以下基本代码获取它:

    NSArray *meta = [asset metadataForFormat:AVMetadataFormatiTunesMetadata];
    for ( AVMetadataItem* item in meta ) {
        id key = [item key];
        NSString *value = [item stringValue];
        NSLog(@"key = %@, value = %@", key, value);
    }

知道我正在寻找 AVMetadataTunesMetadataKeyTrackNumber。

最佳答案

我意识到这个话题已经很老了,但我最近自己也遇到了这个问题。我需要我能收集到的所有元数据,并提出了以下解决方案。这不是最优雅的解决方案,但效果很好。用 Swift 编写。

func processFile(url:NSURL) {
    let yearKey = -1453039239
    let genreKey = -1452841618
    let encoderKey = -1451987089
    let trackKey = "com.apple.iTunes.iTunes_CDDB_TrackNumber"
    let CDDBKey = "com.apple.iTunes.iTunes_CDDB_1"
    let path:String = url.absoluteString
    let asset = AVURLAsset(URL: url, options: nil)
    let format = AVMetadataFormatiTunesMetadata


    for item:AVMetadataItem in asset.metadataForFormat(format) as Array<AVMetadataItem> {

        if let key = item.commonKey { if key == "title" { println(item.value()) } }
        if let key = item.commonKey { if key == "artist" { println(item.value()) } }
        if let key = item.commonKey { if key == "albumName" { println(item.value()) } }
        if let key = item.commonKey { if key == "creationDate" { println(item.value()) } }
        if let key = item.commonKey { if key == "artwork" { println( "art" ) } }

        if item.key().isKindOfClass(NSNumber) {
            if item.key() as NSNumber == yearKey { println("year: \(item.numberValue)") }
            if item.key() as NSNumber == genreKey { println("genre: \(item.stringValue)") }
            if item.key() as NSNumber == encoderKey { println("encoder: \(item.stringValue)") }
        }

        if item.key().isKindOfClass(NSString) {
            if item.key() as String == trackKey { println("track: \(item.stringValue)") }
            if item.key() as String == CDDBKey { println("CDDB: \(item.stringValue)") }
        }
    }
}

关于ios - Avmetadatataitem 在 iOS 上从 iTunes 或 ID3 元数据获取 trackNumber,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10292913/

相关文章:

ios - 使用条码角创建 CGRect?

ios - ARC , stringWithUTF8String 内存稳步增加 “Live Bytes”

objective-c - 如何为 AVMetadataFormatiTunesMetadata 创建 AVMutableMetadataItem

ios - 阻止 CALayer 阴影影响 subview ?

ios - 什么比实际图像或绘制图像消耗更少的内存?

ios - 二维码 ios 7 AVMetadataObject

ios - AVMetadataObject 类型 PDF417 代码无法读取马里兰州驾照

swift - 使用 AVMetadataItem.value 快速获取媒体标题

iOS:通过 splitViewController 模态(表单/页面)呈现 UIViewController

iphone指南针根据方向旋转