iOS – AVPlayer seekToTime重新开始播放currentItem

我正在制作一个使用AVPlayer的应用程序。 在我的一个观点中,我有一个用户应该能够向前和向后擦洗的UISlider。 我有一些麻烦让seekToTime工作,因为我想要的。 当我尝试改变时间播放从0开始,我不知道如何解决这个问题。 我目前的实现是这样的:

 [self.progressSlider addTarget:self action:@selector(sliderValueChanged) forControlEvents:UIControlEventValueChanged]; [self.progressSlider addTarget:self action:@selector(sliderReleased) forControlEvents:UIControlEventTouchUpInside]; - (void)sliderValueChanged { [...] [player pause]; } - (void)sliderReleased { float timeInSecond = self.progressSlider.value; timeInSecond *= 1000; // I have trie to hard code this value, but I get the same result. CMTime cmTime = CMTimeMake(timeInSecond, NSEC_PER_SEC); [player.currentItem seekToTime:cmTime toleranceBefore:kCMTimeZero toleranceAfter:kCMTimeZero completionHandler:^(BOOL finished) { if (finished) { [player play]; } }]; } 

任何想法,我做错了什么?

可以提到,我使用AVPlayer的: playerItemWithURLstream式audio,如果有任何区别。

一个问题是NSEC_PER_SEC是10亿,所以CMTimeMake(timeInSecond, NSEC_PER_SEC)将是一个非常小的数字(除非timeInSecond是非常大的),事实上,它将会被任意地接近零,这正是你正在经历的。

要明确: CMTimeMake定义了一个有理数。 你给一个分子和一个分母。 如果你的分母很大,那么理性的数字就会很小。