使用时
AVPlayer
,
我知道检测视频是否已结束的唯一方法,
是使用通知,就像从视图控制器检测视频结束时一样。例如,
class FancyAVPlayer: AVQueuePlayer {
override init() {
super.init()
NotificationCenter.default.addObserver(self,
selector: #selector(innerEnd),
name: .AVPlayerItemDidPlayToEndTime, object: nil)
}
@objc func innerEnd() {
print("AVPlayer subclass, tape ended")
}
override func insert ..etc
override func remove ..etc
}
我一直想知道,必须有一种更明智的方法来做到这一点,通过覆盖 AVPlayer 中的某些内容。
有人解决这个问题了吗?
不幸的是,没有。
在
AVFoundation
中,通知AVPlayerItemDidPlayToEndTime
确实是检测视频播放何时结束的常见且推荐的方法。
API 不直接支持在不使用键值观察 (KVO) 或通知的情况下重写
AVPlayer
或 AVQueuePlayer
中的方法来检测播放结束。