我使用MPMoviePlayer播放我的视频,我遇到的问题是当用户按下设备的主页按钮时,我保存了视频的当前位置,而不是当他再次午餐应用程序时我希望他从他离开的地方开始,所以我使用setCurrentPlaybackTime函数,它在iOS 5中完美运行,但在视频从头开始的iOS 5.1中却不行。
有没有机构可以解决此类问题?
我使用MPMoviePlayer播放我的视频,我遇到的问题是当用户按下设备的主页按钮时,我保存了视频的当前位置,而不是当他再次午餐应用程序时我希望他从他离开的地方开始,所以我使用setCurrentPlaybackTime函数,它在iOS 5中完美运行,但在视频从头开始的iOS 5.1中却不行。
有没有机构可以解决此类问题?
我的问题已经解决了,我将解释我到目前为止所做的事情。
当我找不到该行为的解决方案/解释时(我觉得很奇怪),我开始大量记录日志,所以我注意到当我记录当前位置时,我总是得到(在 iOS 5.1 中)
currentPlaybackTime = nan
但在 iOS 5 中,我得到了一个正常值为 0.00000
所以我做了一个计时器(它会重复自己)来记录每次当前时间,所以我注意到它在一段时间后从nan变为0.00000
我得出的结论是,在设置 PlaybackTime 之前,我需要稍等片刻(不明白为什么),因此,在等待 1毫秒(1/1000秒)之后,它就可以工作了。
您是否尝试使用 seekToTime(仅限 AvPlayer)而不是 setCurrentPlaybackTime?
正如这里所建议的:
为什么 MPMoviePlayerController setCurrentPlaybackTime 去错了时间?
注意:此解决方案适用于 AvPlayer 而不是 MPMoviePlayer(即使很难在列出的链接中指出)。但在切换到 AvPlayer 之前,我会等待其他答案。
我们应该在收到 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;
}
}
}