首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在AVPlayer中精确地搜索,而不是短2秒

在AVPlayer中精确地搜索,而不是短2秒
EN

Stack Overflow用户
提问于 2013-01-05 04:30:38
回答 2查看 5.3K关注 0票数 14

我在Cocoa应用程序中使用AVPlayer,并实现了一个命令,该命令跳到视频的末尾。

问题是,AVPlayer并没有去我告诉它的地方。

例如,我有一个视频是4分14秒长。当我寻求结束的时候,AVPlayer的目标是4分12秒--短2秒。如果我点击播放,玩家将玩两秒钟,然后到达终点。

我的第一次尝试是:

代码语言:javascript
复制
[self.player seekToTime:self.player.currentItem.duration];

我把它换成了这个:

代码语言:javascript
复制
[self.player seekToTime:self.player.currentItem.duration
        toleranceBefore:kCMTimePositiveInfinity
         toleranceAfter:kCMTimeZero];

哪一个比另一个更好。

我还试着去找kCMTimePositiveInfinity。那时候就忽略了我。

这似乎并不重要,播放器是否已经加载了该部分的视频。我甚至可以找到不完全的结局,一直玩到真正的终点,然后再试着去寻找终点,然后它会跳回不完全的终点。

短缺的时间并不总是两秒。在我的一些视频中,它或多或少地准确地工作了,跳得离真正的终点很近,如果不是完全正确的话。至少在1秒内,时间缩短了3秒。长度似乎不是一个因素,所有这些都是大约相同的长度,除了一个小时以上的长度,并试图缩短2秒。

那么,为什么AVPlayer比我告诉它的时间少了3秒,我如何说服它跳到我要求的那一刻呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-05 04:30:38

我误解了容忍度,把它们倒过来了。

每个公差都是允许AVPlayer偏离所请求的时间的距离。因此,将正无穷大传递给toleranceBefore表示“您可以尽早到达”,而toleranceAfter传递零表示“只是不要迟到”(这将是寻求结束时的一个巧妙的技巧)。

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

代码语言:javascript
复制
[self.player seekToTime:self.player.currentItem.duration
        toleranceBefore:kCMTimeZero
         toleranceAfter:kCMTimePositiveInfinity];

或者,用英语说:“不要来得早,但你可以想迟到就迟到。”

票数 32
EN

Stack Overflow用户

发布于 2015-08-14 23:21:47

以下是@Peter Hosey的快速答案:

代码语言:javascript
复制
self.player.seekToTime(self.player.currentItem.duration,
            toleranceBefore: kCMTimeZero,
            toleranceAfter: kCMTimePositiveInfinity)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14168590

复制
相关文章

相似问题

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