解决这个问题的一种方法是使用AVPlayer的addPeriodicTimeObserver方法来观察播放器的当前时间,并确保它在seek之后保持正确。
首先,您需要创建一个时间观察者对象:
var timeObserverToken: Any?
func addTimeObserver() {
let interval = CMTime(seconds: 1, preferredTimescale: CMTimeScale(NSEC_PER_SEC))
timeObserverToken = player.addPeriodicTimeObserver(forInterval: interval, queue: DispatchQueue.main) { [weak self] time in
// 更新当前时间的显示或执行其他操作
// 检查当前时间是否正确,如果不正确,则进行适当的处理
}
}
然后,在进行seek操作之前,您需要先移除时间观察者:
func removeTimeObserver() {
if let token = timeObserverToken {
player.removeTimeObserver(token)
timeObserverToken = nil
}
}
最后,在进行seek操作之后,重新添加时间观察者:
func seekToTime(time: CMTime) {
player.seek(to: time) { [weak self] success in
if success {
self?.addTimeObserver()
}
}
}
通过这种方法,您可以确保在进行seek操作之后,AVPlayer的当前时间将保持正确。您可以在时间观察者中执行其他操作,例如更新当前时间的显示。