搜寻视频的某个点时,视频只会在第X秒跳到该帧,X始终是3的倍数

时间:2019-09-16 01:47:12

标签: ios avplayer

当我创建自己的播放器时,会发生此问题。 我使用滑块控制视频的进度,处理程序代码如下:

@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间隔调用该方法。非常感谢! ;-)

0 个答案:

没有答案