我在应用测试期间遇到了一种奇怪的行为。
该应用程序包含一个由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];
}
如何解决此问题的任何提示或建议将不胜感激。
Post Mortem - 代码和解释:
当电影在iOS6上(而不是在iOS5上)进入全屏时,会调出viewWillDisapear
和viewDidDisappear
。
解决方案是确保MPMovieplayerController
在{1}}中没有运行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;
}
}
答案 0 :(得分:1)
确保您没有在viewWillDisappear或viewDidDisappear中停止或释放视频播放器。