为什么MPMoviePlayerController setCurrentPlaybackTime进入错误的时间?

时间:2011-09-09 15:42:29

标签: iphone objective-c mpmovieplayercontroller

我对MPMoviePlayerController感到有点古怪。

我正在尝试在播放时设置视频的currentPlaybackTime(文件来源)。 以下是发生的事情的一个例子

  1. 播放视频
  2. 点击按钮跳转到视频的9.3秒
  3. 播放状态更改如下:
  4. a)播放状态= 5(MPMoviePlaybackStateSeekingBackward)。 currentPlaybackTime = 15.74(这是我按下按钮时的时间)

    b)播放状态= 1(MPMoviePlaybackStatePlaying)。 currentPlaybackTime = 7.32

    似乎并不重要我尝试将currentPlaybackTime设置为最终为7.32。

    一些额外信息: 即使使用MPMoviePlayerController上的内置控件,我也会遇到此行为。例如如果我向前滚动到15秒,它会跳回到7.32

    有什么想法吗?它与媒体文件有关吗?

4 个答案:

答案 0 :(得分:6)

您应该使用seekToTime或seekToTimeWithSeconds。

 CMTime npt = CMTimeMake(9,1);
 [self.player seekToTime:npt];

  CMTime npt = CMTimeMakeWithSeconds(9.3, 600);
   [self.player seekToTime:npt toleranceBefore:kCMTimeZero toleranceAfter:kCMTimeZero];

答案 1 :(得分:3)

这是一个迟到的回复,但我找到了类似的问题的解决方案。 您可以按如下方式修改播放:

#define START_TIME 50.0f
#define END_TIME   START_TIME + 20.0f  //play for 20 seconds

MPMoviePlayerController *player = [self moviePlayerController];
[player stop];
[player setInitialPlaybackTime:START_TIME];
[player setEndPlaybackTime:END_TIME];
[player play];

答案 2 :(得分:1)

cdasher指出了我正确的方向,但这是你应该做的:

使用seekToTime寻求:toleranceBefore:toleranceAfter用于样本准确搜索。为此,您必须使用AVPlayer而不是MPMediaPlayerController

CMTime npt = CMTimeMakeWithSeconds(9.3, 600);
[self.player seekToTime:npt toleranceBefore:kCMTimeZero toleranceAfter:kCMTimeZero];

答案 3 :(得分:1)

我想分享我对MPMoviePlayerController mediaPlayer播放MP3的经验。

[mediaPlayer setCurrentPlaybackTime:currentPlayBackTime]; //它不适用于MP3文件。这仅适用于视频。

我用于MP3,它适用于IOS 11及更高版本。

[mediaPlayer setInitialPlaybackTime:currentPlayBackTime]; //从最后位置播放MP3文件