iOS - AVPlayer seekToTime重新开始播放currentItem

时间:2014-04-22 19:08:29

标签: ios objective-c cocoa-touch avplayer

我正在制作一款使用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传输音频:playerItemWithURL如果这有任何区别。

1 个答案:

答案 0 :(得分:2)

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

为了清楚起见:CMTimeMake定义了一个有理数。你给的是分子和分母。如果你的分母很大,那么有理数就会很小。