如何解决将观察者添加到AVPlayer会导致崩溃,并且控制台中没有打印输出
我试图将观察者迅速添加到我的AVPlayer中,以允许在视频开始播放时进行读取以控制播放器上的其他功能。当我运行以下代码时:
func setUpPlayer() {
if let url = URL(string: urlString) {
player = AVPlayer(url: url)
let playerLayer = AVPlayerLayer(player: player)
self.layer.addSublayer(playerLayer)
playerLayer.frame = self.frame
player?.play()
player?.addObserver(self,forKeyPath: "currentItem.loadedTimeRanges",options: .new,context: nil)
}
}
override func observeValue(forKeyPath keyPath: String?,of object: Any?,change: [NSKeyValueChangeKey : Any]?,context: UnsafeMutableRawPointer?) {
if keyPath == "currentItem.loadedTimeRanges" {
print(change)
}
}
我的应用程序崩溃,控制台中没有任何说明。我找到了导致它的代码行:
player?.addObserver(self,context: nil)
但是我不确定为什么会崩溃。关于可能导致这种情况的任何想法?
解决方法
您可以尝试从Swift 4开始使用新的KVO方法。
要观察loadedTimeRanges
的{{1}}的{{1}}属性,您可以执行以下操作:
player
只要要观察属性,请保留返回的currentItem
参考。要手动停止观察,只需将observation = player?.currentItem?.observe(
\.loadedTimeRanges,options: .new
) { (item: AVPlayerItem,value: NSKeyValueObservedChange<[NSValue]>) in
print("loadedTimeRanges: \(value.newValue ?? [])")
}
的引用设置为observation
:
observation
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。