【问题标题】:Trying to extract metaData from URL试图从 URL 中提取元数据
【发布时间】:2018-10-31 09:26:36
【问题描述】:

我正在为 iOS 开发一个现场音乐流媒体应用程序。我想要做的是,提取当前正在播放的音乐的元数据值。元数据存储在 URL 中。现在写,我可以将其提取为元数据。

 Optional([<AVMetadataItem: 0x600001c69860, identifier=common/title, keySpace=comn, key class = __NSCFConstantString, key=title,
 commonKey=title, extendedLanguageTag=(null), dataType=(null),
 time={19392/22050 = 0.879}, duration={INVALID}, startDate=(null),
 extras={ }, value class=__NSCFString, value=Electricity - Silk City &
 Dua Lipa f./Diplo - 03:39 >])

问题是元数据项中只有一个通用键,即“标题”。这个公共键的值由歌曲标题、艺术家和歌曲持续时间组成。如何从这个公用键中仅提取艺术家值..

这就是我提取元数据的方式。

我为关键路径“timedMetadata”向 AVPlayerItem 添加了一个观察者

playerItem.addObserver(self, forKeyPath: "timedMetadata", options: [], context: nil)




 override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {


    if keyPath != "timedMetadata" { return }

    var data: AVPlayerItem = object as! AVPlayerItem

    for item in data.timedMetadata as! [AVMetadataItem] {


        if let stringValue = item.value as? String {
            //print(item.commonKey)
            if item.commonKey!.rawValue == "title" {
                print(stringValue.description)
            }



        }

    }


}

将此作为值:Electricity - Silk City &amp; Dua Lipa f./Diplo - 03:39

此值包含歌曲名称、歌曲艺术家和歌曲持续时间。我想要的是只获得歌曲艺术家作为价值。元数据会针对当前正在播放的每首歌曲更改其值。

【问题讨论】:

标签: swift metadata avasset avplayeritem


【解决方案1】:

终于找到了解决这个问题的方法..

我得到的值被一个通用字符 (-) 分隔。我所做的是将这个单个字符串转换为字符串数组。

let stringValueArray = stringValue.components(separatedBy: "-")

                let title = stringValueArray[0]

                let author = stringValueArray[1]

                let duration = stringValueArray[2]

我知道这可能不是正确的方法,但它仍然有效..

【讨论】:

    猜你喜欢
    • 2020-08-20
    • 1970-01-01
    • 2016-12-18
    • 1970-01-01
    • 2022-12-06
    • 2016-04-06
    • 2013-01-09
    • 2013-05-14
    相关资源
    最近更新 更多