Pet*_*sey 13 macos avfoundation avplayer osx-lion
我在Cocoa应用程序中使用AVPlayer,并且我实现了一个跳转到视频末尾的命令.
问题是,AVPlayer没有寻求我告诉它的地方.
例如,我有一个视频是4分14秒.当我寻求结束时,AVPlayer寻求4分12秒 - 两秒钟.如果我然后点击播放,播放器将播放两秒钟,然后到达结尾.
我的第一次尝试是这样的:
[self.player seekToTime:self.player.currentItem.duration];
Run Code Online (Sandbox Code Playgroud)
我把它换成了这个:
[self.player seekToTime:self.player.currentItem.duration
toleranceBefore:kCMTimePositiveInfinity
toleranceAfter:kCMTimeZero];
Run Code Online (Sandbox Code Playgroud)
两者都没有比另一个更好.
我也试过去寻求kCMTimePositiveInfinity.那时它只是忽略了我.
播放器是否已加载视频的那部分似乎并不重要.我甚至可以寻求不完全结束,玩到真正的结局,然后再次尝试寻求到最后,它将跳回到不完全结束.
缺口并不总是两秒钟.在我的一些视频中,它或多或少地完全正确地工作,如果不完全正确,则跳得非常接近真实的结束.在至少一个,它短至三秒钟.长度似乎不是一个因素; 所有这些都是大约相同的长度,除了一个,超过一个小时,并寻求短短两秒.
那么,为什么AVPlayer在我告诉它的地方跳了多达三秒钟,我怎么说服它跳到我要求的那一刻?
Pet*_*sey 26
我误解了宽容并将它们倒退了.
每个容差是AVPlayer在该方向上离开请求时间的距离.所以,传递正无穷大toleranceBefore就是说"你可以尽可能早地",并且传递零toleranceAfter就是说"只是不要迟到"(这在寻求结束时将是一个巧妙的把戏).
因此,解决方案是切换值:
[self.player seekToTime:self.player.currentItem.duration
toleranceBefore:kCMTimeZero
toleranceAfter:kCMTimePositiveInfinity];
Run Code Online (Sandbox Code Playgroud)
或者,用英语:"不要早,但你可以尽可能晚."
| 归档时间: |
|
| 查看次数: |
3614 次 |
| 最近记录: |