gpt4 book ai didi

ios - AVQueuePlayer 寻求问题(至 :) and CMTime

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:02:35 27 4
gpt4 key购买 nike

我有一个 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)
}

最佳答案

胡思乱想后,我想通了。出于某种原因,

seek(to:)

似乎不起作用,但如果我使用

seek(to:toleranceBefore:toleranceAfter:)

使用 kCMTimeZero 前后公差的函数,它工作正常。

关于ios - AVQueuePlayer 寻求问题(至 :) and CMTime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50897101/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com