swift - 试图从 URL 中提取元数据
问题描述
我正在为 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 & Dua Lipa f./Diplo - 03:39
该值具有歌曲标题、歌曲艺术家和歌曲持续时间。我想要的是只获得歌曲艺术家作为价值。元数据会更改当前正在播放的每首歌曲的值。
解决方案
终于找到了解决这个问题的方法..
我得到的值由一个通用字符 (-) 分隔。我所做的是将这个单个字符串转换为字符串数组。
let stringValueArray = stringValue.components(separatedBy: "-")
let title = stringValueArray[0]
let author = stringValueArray[1]
let duration = stringValueArray[2]
我知道这可能不是正确的方法,但它仍然有效..
推荐阅读
- javascript - 如何在 javascript 中使用 Loop 复制 HTML 元素
- mysql - Spring Boot + JPA [Hibernate backed] + mysql = 数据截断:第 1 行的列“ATTRIBUTE_NAME”的数据太长
- amazon-web-services - 如何解决从 Amazon lex 获得的 424 (Failed Dependency) (python)?
- rpa - 通过 Automation Anywhere 访问 500 次后,SAP 运行速度变慢
- php - MySQL:当日期计数超过给定数量时选择日期范围内的数据
- linkedin - LinkedIn Api 从所有者错误中获取帖子/共享
- python - 一个可以收发消息的mqtt客户端如何实现多线程
- c# - 在 C# 中使用具有 websocket 端点的 api
- r - R中这个函数的逻辑是什么?
- python - 使用python获取树莓派本地IP地址的位置