我在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。那时候就忽略了我。
这似乎并不重要,播放器是否已经加载了该部分的视频。我甚至可以找到不完全的结局,一直玩到真正的终点,然后再试着去寻找终点,然后它会跳回不完全的终点。
短缺的时间并不总是两秒。在我的一些视频中,它或多或少地准确地工作了,跳得离真正的终点很近,如果不是完全正确的话。至少在1秒内,时间缩短了3秒。长度似乎不是一个因素,所有这些都是大约相同的长度,除了一个小时以上的长度,并试图缩短2秒。
那么,为什么AVPlayer比我告诉它的时间少了3秒,我如何说服它跳到我要求的那一刻呢?
发布于 2013-01-05 04:30:38
我误解了容忍度,把它们倒过来了。
每个公差都是允许AVPlayer偏离所请求的时间的距离。因此,将正无穷大传递给toleranceBefore表示“您可以尽早到达”,而toleranceAfter传递零表示“只是不要迟到”(这将是寻求结束时的一个巧妙的技巧)。
因此,解决方案是切换值:
[self.player seekToTime:self.player.currentItem.duration
toleranceBefore:kCMTimeZero
toleranceAfter:kCMTimePositiveInfinity];或者,用英语说:“不要来得早,但你可以想迟到就迟到。”
发布于 2015-08-14 23:21:47
以下是@Peter Hosey的快速答案:
self.player.seekToTime(self.player.currentItem.duration,
toleranceBefore: kCMTimeZero,
toleranceAfter: kCMTimePositiveInfinity)https://stackoverflow.com/questions/14168590
复制相似问题