首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AVPlayer seek之后的当前时间不正确

AVPlayer seek之后的当前时间不正确
EN

Stack Overflow用户
提问于 2020-03-17 18:44:07
回答 1查看 428关注 0票数 1
代码语言:javascript
复制
func seekFullRead(seconds: Float64, completion: (() -> ())? = nil) {
    let targetTime:CMTime = CMTimeMakeWithSeconds(seconds, preferredTimescale: 60000)
    fullReadPlayer?.currentItem?.seek(to: targetTime, toleranceBefore: .zero, toleranceAfter: .zero, completi[enter image description here][1]onHandler: { (finish) in
        if finish {
            completion?()
        }
    })
}

fullReadTimeObserver = fullReadPlayer?.addPeriodicTimeObserver(forInterval: CMTimeMake(value: 1, timescale: 10), queue: DispatchQueue.main, using: { [weak self](time) in
        guard let self = self else { return }
        if self.fullReadPlayer?.status == .readyToPlay {
            self.delegate?.audioPlayer(self, didUpdateCurrentTime: time.seconds, teach: nil)
        }
    })

当我搜索到4.57秒时,将首先显示正确的当前时间,然后将当前时间向前移动0.2秒,但将在当前时间向前移动0.2秒后开始播放。

日志:

当前时间: 1.30104062

当前时间: 1.401042787

寻求: 4.579999923706055

当前时间: 1.498295786

当前时间: 4.579983333333334

当前时间: 4.319330793

当前时间: 4.319642834

当前时间: 4.401050459

当前时间: 4.501045084

当前时间: 4.601038959

EN

回答 1

Stack Overflow用户

发布于 2021-05-03 07:05:25

我想NSGangster说对了。观察者计时器和寻道在不同的进程上。这对我来说意味着我将不得不自己处理这些差异。

我没有在互联网上找到答案,也没有幸运地找到正确的方法,但我确实设法找到了一个变通办法:我可以使用像'isSeekInProgress‘这样的变量来标记是否更新进度条UI。如下图所示:

代码语言:javascript
复制
var isSeekInProgress: Bool = false  // Marker  

let targetTime:CMTime = CMTimeMakeWithSeconds(seconds, preferredTimescale: 60000)
isSeekInProgress = true // Mark
fullReadPlayer?.currentItem?.seek(to: targetTime, toleranceBefore: .zero, toleranceAfter: .zero, completi[enter image description here][1]onHandler: { (finish) in
    if finish {
        isSeekInProgress = false // Unmark
        completion?()
    }
})

有些人在搜索时暂停播放器,然后在完成块中恢复播放,但这不会在您希望播放在擦除时继续进行的情况下工作。上面的例子非常简单,您所要做的就是检查:

代码语言:javascript
复制
if !playbackManager.isSeekInProgress {
    progressSlider.value = playbackManager.progress
}

在下一次定期的观察者通知期间,您的进度将被更新。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60720714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档