我在应用程序测试期间遇到了一个奇怪的行为。该应用程序包含一个由 a 播放的视频流,MPMoviePlayer
当在 iOS6 上进入全屏(通过播放器控制器上的按钮)时,屏幕变为空白并且电影停止播放。在 iOS5 上,电影按预期继续。
我相信这将是 iOS6 中的一个错误,因此想知道:
- 还有其他人经历过这种行为吗?
- 这是我的代码中的错误,还是操作系统中的错误?- 关于如何处理它的任何建议?
在两部手机上,当视频包含在屏幕上的帧中(作为视图的一部分)时,视频流会按预期播放。但是,当进入全屏时,它们会有所不同。我已经在两部手机上拍摄了这种行为。
在相对较新的 iPhone 4S(运行 iOS 5.1.1)上,以下(预期)行为:http: //4340.no/ios5.mov
在 iPhone 3S(升级到 iOS 6.0)上,出现以下(意外)行为:http: //4340.no/ios6.mov
处理 playButton 的代码:
-(IBAction) playButtonClicked:(id)sender
{
NSURL* url = [NSURL URLWithString:self.experiment.videoPath];
self.mpController = [[MPMoviePlayerController alloc] initWithContentURL:url];
[self.mpController prepareToPlay];
self.mpController.view.frame = CGRectMake(0, 0, 320, 214);
[self.view addSubview:self.mpController.view];
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(movieFinishedCallback:)
name:MPMoviePlayerPlaybackDidFinishNotification
object:self.mpController];
[self.mpController play];
}
任何有关如何解决此问题的提示或建议将不胜感激。
验尸 - 代码和解释:
当电影在iOS6 (而不是 iOS5)上进入全屏时,结果会被调用viewWillDisapear
。viewDidDisappear
解决方案是确保在以这两种方法中的任何一种关闭视频播放器之前MPMovieplayerController
都没有运行。fullscreen
然后我的新代码变成
了:(注意&& !self.mpController.fullscreen
-(void)viewDidDisappear:(BOOL)animated
{
if(self.mpController && !self.mpController.fullscreen){
[[NSNotificationCenter defaultCenter]
removeObserver:self
name:MPMoviePlayerPlaybackDidFinishNotification
object:self.mpController];
[self.mpController.view removeFromSuperview];
self.mpController = nil;
}
}