我有一个让我发疯的问题 .
我有一个AVQueuePlayer,我正试图按下按钮,寻找5秒钟 .
我的代码如下:
func seekBack() {
guard let currentTime = self.player?.currentTime() else { return }
let currentTimeSeconds = CMTimeGetSeconds(currentTime)
let newTimeSeconds = max(currentTimeSeconds - 5, 0)
let newTime = CMTimeMakeWithSeconds(newTimeSeconds, currentTime.timescale)
self.player?.seek(to: newTime)
}
第一次按下搜索按钮时,它会寻找正确的时间(5秒),但是在每次后续按下时,它会从第一次搜索操作开始寻找新的时间 . 如果我让视频播放时间超过5秒并按下按钮,它将正确地寻找5秒钟,但之后会卡住 .
例如,我播放视频,在10秒标记处,我按下搜索按钮,播放器寻找回到5秒 . 然后让玩家再玩1秒,然后再次按下按钮,它只会回到5秒标记 . 如果我反复按下按钮,它将只会回到5秒标记 . 如果我让视频播放另外10秒(总时间~15秒),然后再次按下搜索按钮,播放器将回寻10秒并表现出相同的行为 .
我不确定这与它有什么关系,但是还有一个按钮可以在1.0,1.5和2.0之间切换播放速率 . 上述问题以所有3个播放速率展示 .
由于它是一个AVQueuePlayer,我也尝试了以下相同的结果(它使用currentItem而不仅仅是播放器):
func seekBack() {
guard let currentTime = self.player?.currentItem?.currentTime() else { return }
let currentTimeSeconds = CMTimeGetSeconds(currentTime)
let newTimeSeconds = max(currentTimeSeconds - 5, 0)
let newTime = CMTimeMakeWithSeconds(newTimeSeconds, currentTime.timescale)
self.player?.currentItem?.seek(to: newTime)
}
感谢先进的帮助 .
1 回答
乱搞之后,我想通了 . 由于某些原因,
似乎不起作用,但如果我使用
对于前后容差的
kCMTimeZero
函数,它工作正常 .