在AVPlayer.play()之前使用AVPlayer.seek()时更新AVPlayer的显示帧



我有一个AVPlayer,当我到达持续时间结束时,我想回到开始,但我不想重新启动AVPlayer

//Do something when video ended
NotificationCenter.default.addObserver(self, selector: #selector(playerDidFinishPlaying(note:)), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: nil)
@objc func playerDidFinishPlaying(note: Notification) {
self.restartVideo()
}

func restartVideo() {
self.player.seek(to: .zero, toleranceBefore: .zero, toleranceAfter: .zero)
}

从这里,我可以简单地.play()AVPlayer,它将从一开始播放。但是,在.play()之前,.seek()函数并没有向用户表明它已被重置回开始。在我执行.play()之前,AVPlayer帧实际上不会转换回第一帧。

问题:当使用.seek()功能时,我如何才能让AVPlayer改变它显示给用户的实际帧?

这部分代码是正确的。也可能是别的什么东西在呼唤它寻求结束??可以使用完成处理程序来查看查找是否被中断。同时设置一个断点来查看你在哪个队列上,确保你在主线程上。如果发生第二次查找操作,您将在完成处理程序中获得假结果。另外,尝试在seek之后设置一个断点来检查UI是否响应。

self.player.seek(to: .zero, toleranceBefore: .zero, toleranceAfter: .zero) { success in
print("seek finished success = ", success)
}

设置如下

self.player.seek(to: .zero) // it will update the player slider to 0:00

如果你想设置一个特定的时间,使用

// Seek to the 2 minute mark
let time = CMTime(value: 120, timescale: 1)
self.player.seek(to: time)

最新更新