我在Cocoa应用程序中使用了AVPlayer,并且实现了跳转到视频结尾的命令。

问题是,AVPlayer并没有寻求我告诉的目的地。

例如,我拥有的一部视频长4分14秒。当我寻求结束时,AVPlayer寻求4分12秒-短2秒。如果我随后点击播放,播放器将播放两秒钟,然后到达结尾。

我的第一次尝试是:

[self.player seekToTime:self.player.currentItem.duration];


我将其切换为:

[self.player seekToTime:self.player.currentItem.duration
        toleranceBefore:kCMTimePositiveInfinity
         toleranceAfter:kCMTimeZero];


任何一个都不比另一个更好。

我也尝试过尝试kCMTimePositiveInfinity。那时它只是不理我。

播放器是否已加载视频的那一部分似乎并不重要。我什至可以寻找到不尽人意的地方,玩到真正的尽头,然后再次尝试寻找到尽头,然后它将跳回到不尽人意的地方。

短缺并不总是两秒钟。在我的某些视频中,它或多或少正确地起作用,如果不完全正确,则跳到非常接近真实的尽头。至少有一个,它缩短了三秒钟。长度似乎不是一个因素。所有这些长度都差不多,除了一个长度,它的长度超过一个小时,并且会缩短两秒钟。

那么,为什么AVPlayer会比我告诉的地方跳三秒之多,又如何说服它跳到我要求的那一刻呢?

最佳答案

我误解了容忍度,让它们倒退了。

每个公差是允许AVPlayer在该方向上偏离请求时间的距离。因此,为toleranceBefore传递正无穷大表示“您可以按需要尽早”,为toleranceAfter传递零为无条件表示“只是不要迟到”(这对于寻求结束)。

因此,解决方案是切换值:

[self.player seekToTime:self.player.currentItem.duration
        toleranceBefore:kCMTimeZero
         toleranceAfter:kCMTimePositiveInfinity];


或者,用英语:“不要早,但可以根据需要迟到。”

关于macos - 在AVPlayer中精确寻找,而不是短于两秒,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14168590/

10-10 23:24
查看更多