13

这应该是一个简单的。我有一个AVPlayer正在播放的视频文件,我希望能够跳到一个特定的时间,但我在理解如何CMTime工作时遇到了一些麻烦。

我需要以秒为单位指定时间。例如:如果我想跳到第二个 10.8 我想做这样的事情:

[self.avPlayer.currentItem seekToTime:CMTimeMakeWithSeconds(10.8, 1];

但我没有得到我想要的结果。

4

4 回答 4

23

http://warrenmoore.net/understanding-cmtime

可能会让您更清楚地了解 CMTime。

如果您将行更改为阅读...

[self.avPlayer.currentItem seekToTime:CMTimeMakeWithSeconds(10.8, 60000)];

你可能会得到更好的结果。60000 是一秒钟内有多少个项目。如果你使用 1 作为这个值,那么你每秒只能跳到一个位置 - 通过输入 60000,你在第 10 秒和第 11 秒之间给了自己 60000 个位置。

于 2014-03-27T20:59:36.950 回答
7

如果您需要寻找一个非常具体的时间,我建议您使用此方法并保持宽容:

let myTime = CMTime(seconds: 10.8, preferredTimescale: 60000)    
player.seek(to: myTime, toleranceBefore: .zero, toleranceAfter: .zero)

文档:链接。苹果建议使用它来获得高精度。

于 2019-03-04T00:44:05.973 回答
2

斯威夫特版本

avPlayer.seek(to:CMTimeMakeWithSeconds(10.8,1000))
于 2017-06-20T16:36:25.340 回答
1

斯威夫特 5.1 版本

player?.seek(to: CMTime(value: CMTimeValue(10.8), timescale: 1000))
于 2020-01-21T10:27:33.603 回答