MPMoviePlayer setCurrentPlaybackTime iOS

3
我使用 MPMoviePlayer 播放视频,但遇到了问题:当用户按设备上的home按钮时,我会保存视频的当前位置,然后当用户重新启动应用程序时,我希望能让他从离开的地方继续观看,所以我使用 setCurrentPlaybackTime 函数,在iOS 5 中它工作得很好,但在iOS 5.1中,视频会从开头开始播放。
有没有人有解决这种问题的方法?

你是如何存储时间的?也许这就是问题所在...而不是setCurrentPlaybackTime。检查一下你在5.1中存储的值。 - Bo.
我将其存储在一个具有单例模式的类的属性中,但是时间是正确的,我使用**NSLog()**来检查它,似乎有正确的值。 - Abu Romaïssae
3个回答

7
我的问题已经解决了,我会解释一下我目前所做的事情。
当我找不到这种行为的解决方案/说明时(我觉得很奇怪),我开始进行了大量的日志记录,所以我注意到的是,当我记录当前位置时,我总是得到(在iOS 5.1中)
  currentPlaybackTime = nan

但在iOS 5中,我得到了一个正常的值为0.00000。
所以我制作了一个定时器(重复自身),记录每次当前时间,所以我注意到它从nan变成0.00000后一段时间内发生了变化。
我的结论是,在设置PlaybackTime之前,我需要等待一会儿(不知道为什么),所以等待1毫秒(1/1000秒)后它就可以工作了。

2

我刚试了一下,但好像不知道函数seekToTime,在构建时出现错误,或者是我做错了什么? - Abu Romaïssae
这是我收到的复杂错误信息: “MPMoviePlayerController”没有声明选择器“seekToTime:”。 - Abu Romaïssae
我很抱歉一开始没有说明答案依赖于从MPMoviePlayer切换到AvPlayer(我检查了帖子,确实在最初阅读时不明显)。 - Bo.
嗯,好的,所以在这种情况下我不能使用它,我已经用MPMoviePlayer做了很多事情,我不想重复所有的工作,而且我也不确定是否能及时完成,无论如何,非常感谢你的帮助 :) 。最让我困扰的是,一切都在iOS 5上正常运行 :( - Abu Romaïssae

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;
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接