我在 TableView 中有一个音频 URL 列表,所以每次我点击每个单元格时didSelectRowAt
这个方法将被调用
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
// Prepare Audio URL
let audioUrl = URL(string: (channelSelected.audioUrl?.addingPercentEncoding(withAllowedCharacters: .urlFragmentAllowed))!)
let playerItem = AVPlayerItem(url: audioUrl!)
playerItem.addObserver(self, forKeyPath: "timedMetadata", options: .new, context: nil)
player = AVPlayer(playerItem: playerItem)
playerViewController = AVPlayerViewController()
playerViewController.player = player
present(playerViewController, animated: true, completion: {
self.playerViewController.player?.play()
})
}
根据教程,我实现了观察值侦听器
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
print("keypath = \(keyPath!)")
let avPlayerItem: AVPlayerItem = object as! AVPlayerItem
if let timedMetadata = avPlayerItem.timedMetadata {
print("Timed metadata = \(timedMetadata)")
} else {
print("Timed metadata nil")
}
}
问题是timedMetadata
始终为零。如有帮助,将不胜感激。
您的代码工作正常,此问题的原因是由服务器端的问题引起的。
你可以使用这个工具mp3tag https://www.mp3tag.de/en/编辑音频文件 - 添加元数据标签并将其上传到服务器。
作为示例,您可以尝试包含元数据标签的这些音频:
http://ice1.somafm.com/groovesalad-128-mp3 http://ice1.somafm.com/groovesalad-128-mp3
https://developer.jwplayer.com/jw-player/demos/basic/audio-metadata/assets/index.m3u8 https://developer.jwplayer.com/jw-player/demos/basic/audio-metadata/assets/index.m3u8
为了确认,上述文件应该可以很好地与您的代码配合使用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)