MPMoviePlayer setCurrentPlaybackTime iOS

时间:2012-05-17 12:41:10

标签: ios objective-c audio mpmovieplayercontroller playback

我使用 MPMoviePlayer 播放我的视频,我遇到的问题是当用户按下设备的 主页 按钮时,我保存视频的当前位置,比他再次午餐申请时我希望他从他离开的地方开始,所以我使用 setCurrentPlaybackTime 功能,它在 iOS 5中完美运行 但不在 iOS 5.1 中,视频从头开始。

是否有任何机构可以解决此类问题?

3 个答案:

答案 0 :(得分:7)

我的问题已经解决了,我将解释到目前为止我所做的事情。

当我找不到该行为的解决方案/解释时(我发现它很奇怪)我开始制作大量的日志记录,所以我注意到当我记录当前位置时我总是(在iOS 5.1中) )

  currentPlaybackTime = nan

但是在iOS 5中,我的正常值为0.00000

所以我做了一个计时器(重复自己)每次记录当前的时间,所以我注意到它从 nan 变为 0.00000 过了一会儿

我做的结论是在设置PlaybackTime之前我需要稍等一下(不明白为什么),所以在等待1 ms后(1/1000 s )并且有效。

答案 1 :(得分:2)

您是否尝试使用seekToTime(仅限AvPlayer)而不是setCurrentPlaybackTime?

如此处所示:
Why does MPMoviePlayerController setCurrentPlaybackTime goes to the wrong time?

注意:此解决方案适用于AvPlayer而非MPMoviePlayer(即使很难在列出的链接中指出)。但在切换到AvPlayer之前,我会等待其他答案。

答案 2 :(得分:0)

我们应该在获取MPMoviePlayerLoadStateDidChangeNotification通知后设置currentPlaybackTime。

要知道是否已加载moviePLayer,首先需要注册MPMoviePlayerLoadStateDidChangeNotification

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieLoadStateDidChange:) name:MPMoviePlayerLoadStateDidChangeNotification object:nil];

一旦加载了电影播放器​​,将调用movieLoadStateDidChange:,然后检查MPMovieLoadStatePlaythroughOK加载状态并设置currentPlaybackTime。

- (void)movieLoadStateDidChange:(NSNotification *)notification
{
    MPMoviePlayerController *player = notification.object;
    MPMovieLoadState loadState = player.loadState;

    /* Enough data has been buffered for playback to continue uninterrupted. */
    if (loadState & MPMovieLoadStatePlaythroughOK)
    {
        //should be called only once , so using self.videoLoaded - only for  first time  movie loaded , if required. This function wil be called multiple times after stalled
        if(!self.videoLoaded)
        {
            self.moviePlayerController.currentPlaybackTime = self.currentPlaybackTime;
            self.videoLoaded = YES;
        }
    }
}