Ios 在AVPlayer seekToTime中使用秒数

Ios 在AVPlayer seekToTime中使用秒数,ios,avplayer,cmtime,Ios,Avplayer,Cmtime,这应该是一个简单的问题。我有一个AVPlayer播放视频文件,我希望能够跳到特定的时间,但我在理解CMTime的工作原理时遇到了一些困难 我需要以秒为单位指定时间。例如:如果我想跳到第二个10.8,我想这样做: [self.avPlayer.currentItem seekToTime:CMTimeMakeWithSeconds(10.8, 1]; 但是我没有得到我想要的结果。 可能会让你对时间有一个更清晰的概念 如果你把台词改成 [self.avPlayer.currentItem seek

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

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

[self.avPlayer.currentItem seekToTime:CMTimeMakeWithSeconds(10.8, 1];
但是我没有得到我想要的结果。

可能会让你对时间有一个更清晰的概念

如果你把台词改成

[self.avPlayer.currentItem seekToTime:CMTimeMakeWithSeconds(10.8, 60000)];
你可能会得到更好的结果。60000是指一秒钟内有多少个项目。如果你用1来表示这个值,那么你每秒只能跳到一个地方——在第10秒和第11秒之间加60000就等于给自己60000个地方。

Swift版本

avPlayer.seek(to:CMTimeMakeWithSeconds(10.8,1000))

如果您需要寻找一个非常特定的时间,我建议您使用此方法,并允许:

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

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

Swift 5.1版

player?.seek(to: CMTime(value: CMTimeValue(10.8), timescale: 1000))

非常感谢。我终于明白了NSTime的概念,我可以看到:Swift 5.1版本在这篇文章中给出了一些解决方案之后,我不再需要使用seek的Preference和Tolerance After参数来正常工作。