MPMoviePlayer setCurrentPlaybackTime的iOS(MPMoviePl

2019-09-17 06:58发布

我用MPMoviePlayer发挥我的视频,我的问题是,当用户按设备的屏幕按钮,我保存视频的当前位置,比他吃午饭应用程序再次,我想他从他离开的地方开始,所以我用setCurrentPlaybackTime功能,它完美的作品在iOS 5中 ,但不是在的iOS 5.1在视频从头开始。

是否有任何身体有这样的问题的解决方案?

Answer 1:

我的问题是解决了,我会解释一下我到目前为止已经完成。

当我找不到这种行为的解决方案/解释(我觉得很奇怪),我开始做很多和批次记录的,所以我注意到的是,当我记录当前位置我总是得到(在iOS版5.1)

  currentPlaybackTime = nan

但在iOS 5中我得到了正常值为0.00000

所以我做了一个定时器(重演)当前时间记录每一次,所以我注意到,它从到改变0.00000一段时间后,

我得出的结论是,我需要设置PlaybackTime之前等待一个位(不明白为什么),所以它是,等待1 毫秒 (1/1000 )后,和它的作品。



Answer 2:

你尝试使用seekToTime(仅AvPlayer),而不是setCurrentPlaybackTime?

如下建议:
为什么的MPMoviePlayerController setCurrentPlaybackTime去错误的时间?

注意:此解决方案是AvPlayer而非MPMoviePlayer(即使辛苦也没有在上市环节表示)。 不过,我想切换到AvPlayer之前等待的解答。



Answer 3:

我们应该设置currentPlaybackTime后,我们得到了MPMoviePlayerLoadStateDidChangeNotification通知。

要知道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;
        }
    }
}


文章来源: MPMoviePlayer setCurrentPlaybackTime iOS