最近我在下载时使用AVPlayer播放,一切似乎都很好。错误我发现有关AVPlayerLayer的崩溃。
这样的错误信息:
类AVPlayerLayer的实例0x170038f60被释放,而键值观察者仍在注册。当前观察信息:NSKeyValueObservationInfo 0x174e38040>(NSKeyValueObservance 0x17465ec90:观察者:0x170a62c40,关键路径: operationCount ,选项:新建:否,旧:否,优先级:否>上下文:0x0,属性:0x17465ede0>)
我无法繁殖,也不知道如何解决。你能帮我么 ?谢谢。
答案 0 :(得分:0)
这种情况发生在播放器层被释放但观察者仍然附着的情况下。
您应删除先前已添加到 AVPlayerLayer 和 AVPlayerItem 实例的 playerLayerObserver 和 PlayerItemObservers 在viewController的 deinit 方法中。
deinit {
guard videoPlayer != nil else { return }
self.playerLayer.removeObserver(self, forKeyPath: PlayerReadyForDisplayKey, context: &PlayerLayerObserverContext)
removePlayerItemObservers(item: self.avPlayerItem)
videoPlayer?.replaceCurrentItem(with: nil)
}
这样您可以删除观察者
internal func removePlayerItemObservers(item: AVPlayerItem) {
if (item.observationInfo != nil) {
//NOTE:- REMOVE ONLY FOR THE OBSERVERS THAT YOU HAVE ADDED PREVIOUSLY ON ITEM
item.removeObserver(self, forKeyPath: "status")
item.removeObserver(self, forKeyPath: "loadedTimeRanges")
item.removeObserver(self, forKeyPath: "playbackBufferEmpty")
item.removeObserver(self, forKeyPath: "playbackLikelyToKeepUp")
item.removeObserver(self, forKeyPath: "isPlaybackBufferFull")
}
}
尝试并分享结果。