从 MP3 HTTP 流中获取元数据
Get metadata from MP3 HTTP stream
我想从 MP3 HTTP 流中获取元数据。使用 AVPlayer 播放流。
我已经用 AVPlayerItemMetadataCollector 试过了,但它 returns 没有。
另一种方法是获取流网站上显示当前标题的特定部分。
这是我的播放器代码:
let playerItem = AVPlayerItem(url: URL(string: "stream.p4.no/p5trondheim_mp3_hq")!)
player = AVPlayer(playerItem: playerItem)
player.rate = 1.0;
player.play()
我能做什么?
您可以在 AVPlayerItem 上观察 timedMetadata :
{
...
// Add observer
playerItem.addObserver(self, forKeyPath: "timedMetadata", options: .new, context: nil)
...
}
// Observe
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
guard keyPath == "timedMetadata" else { return }
guard let meta = playerItem.timedMetadata else { return }
for metadata in meta {
if let songName = metadata.value(forKey: "value") as? String {
print("song name is '\(songName)'")
}
}
}
我想从 MP3 HTTP 流中获取元数据。使用 AVPlayer 播放流。
我已经用 AVPlayerItemMetadataCollector 试过了,但它 returns 没有。
另一种方法是获取流网站上显示当前标题的特定部分。
这是我的播放器代码:
let playerItem = AVPlayerItem(url: URL(string: "stream.p4.no/p5trondheim_mp3_hq")!)
player = AVPlayer(playerItem: playerItem)
player.rate = 1.0;
player.play()
我能做什么?
您可以在 AVPlayerItem 上观察 timedMetadata :
{
...
// Add observer
playerItem.addObserver(self, forKeyPath: "timedMetadata", options: .new, context: nil)
...
}
// Observe
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
guard keyPath == "timedMetadata" else { return }
guard let meta = playerItem.timedMetadata else { return }
for metadata in meta {
if let songName = metadata.value(forKey: "value") as? String {
print("song name is '\(songName)'")
}
}
}