当我创建自己的播放器时,会发生此问题。 我使用滑块控制视频的进度,处理程序代码如下:
@objc func handlerSlide() {
if let dur = player?.currentItem?.duration {
let total = Float(CMTimeGetSeconds(dur))
let toPos = (total) * slider.value
player?.seek(to: CMTime(value: Int64(toPos), timescale: CMTimeScale(1)), completionHandler: { (completeSeek) in
print("seeked")
})
}
}
和addPeriodicTimeObserver方法调用:
let interval = CMTime(value: 1, timescale: 10)
player?.addPeriodicTimeObserver(forInterval: interval, queue: DispatchQueue.main, using: { (progressTime) in
let seconds = CMTimeGetSeconds(progressTime)
print("-----" ,seconds)
self.currentLengthLabel.text = Util.secondsToString(seconds: Float(seconds))
if let dur = self.player?.currentItem?.duration {
let total = CMTimeGetSeconds(dur)
let ratio = seconds / total
self.slider.value = Float(ratio)
}
})
问题是当我拖动滑块时,控制台无法按预期方式打印,但如下所示:
----- 0.0
----- 3.033333333333333
----- 6.066666666666666
----- 9.1
----- 12.133333333333333
//drag backward and forward again
----- 9.1
----- 6.066666666666666
----- 9.1
----- 12.133333333333333
寻找完成处理程序经常执行命令,但是视频帧仅跳到第3秒,第6秒,第9秒,等等。
有什么想法吗?我应该怎么做才能解决这个问题?我希望每次玩家执行寻道操作时都调用addPeriodic ...方法,或者以CMTime间隔调用该方法。非常感谢! ;-)