【问题标题】:Get metadata from MP3 HTTP stream从 MP3 HTTP 流中获取元数据
【发布时间】:2017-09-10 20:37:02
【问题描述】:

我想从 MP3 HTTP 流中获取元数据。使用 AVPlayer 播放流。

我已经使用 AVPlayerItemMetadataCollector 进行了尝试,但它返回 nil。

另一种方法是获取流的网站上显示当前标题的特定部分。

这是我的播放器代码:

let playerItem = AVPlayerItem(url: URL(string: "stream.p4.no/p5trondheim_mp3_hq")!)
player = AVPlayer(playerItem: playerItem)
player.rate = 1.0;
player.play()

我能做什么?

【问题讨论】:

  • 您能否在您的问题中添加更多示例代码?
  • 这是我的播放器代码
  • 让 playerItem = AVPlayerItem(url: URL(string: "stream.p4.no/p5trondheim_mp3_hq")!) player = AVPlayer(playerItem: playerItem) player.rate = 1.0; player.play()

标签: swift http mp3 avplayer


【解决方案1】:

您可以在 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)'")
    }
  }
}

【讨论】:

  • 感谢您的回答。到目前为止它工作但我如何从字符串中过滤特定部分?它返回:歌曲名称是 '{"artist":"Alan Walker feat. Gavin James","duration":179041,"imageUrl":"trondheim.p5.no/mmo/MusicLibrary/…"}'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-10
  • 1970-01-01
  • 2016-03-19
  • 1970-01-01
  • 1970-01-01
  • 2012-07-07
相关资源
最近更新 更多