我刚刚在应用程序测试过程中遇到了奇怪的行为。
该应用程序包含一个由 MPMoviePlayer
播放的视频流,当在 iOS6 上进入全屏(通过播放器 Controller 上的按钮)时,屏幕会变成空白,电影会停止播放。在 iOS5 上,电影按预期继续播放。
我相信这将是 iOS6 中的一个错误,因此想知道:
- 还有其他人经历过这种行为吗?
- 这是我的代码中的错误还是操作系统中的错误?
- 对于如何处理有什么建议吗?
在这两款手机上,当视频包含在屏幕上的帧中(作为 View 的一部分)时,视频流会按预期播放。 然而,当进入全屏时,它们有所不同。我在两部手机上都拍摄了该行为。
在相对较新的 iPhone 4S(运行 iOS 5.1.1)上,出现以下(预期)行为: http://4340.no/ios5.mov
在 iPhone 3S(升级到 iOS 6.0)上出现以下(意外)行为: http://4340.no/ios6.mov
处理播放按钮的代码:
-(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
未运行全屏
。
我的新代码变成:
(注意 && !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;
}
}
最佳答案
确保您没有在 viewWillDisappear 或 viewDidDisappear 中停止或释放视频播放器。
关于ios - MPMoviePlayer - 在 iOS5 上进入全屏会导致停止播放并导致屏幕变黑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12839983/