ios - MPMoviePlayer - 在 iOS5 上进入全屏会导致停止播放并导致屏幕变黑

标签 ios ios6 mpmovieplayercontroller

我刚刚在应用程序测试过程中遇到了奇怪的行为。 该应用程序包含一个由 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)上进入全屏时,会调用 viewWillDisapearviewDidDisappear

解决方案是在使用这些方法之一关闭视频播放器之前确保 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/

相关文章:

ios - 运行时错误 : __NSAutoreleaseNoPool(): . ..autoreleased 没有适当的池 - 只是泄漏

ios - MailCore 如何删除邮件

ios - UITabBarController 未显示其内容的所有大小(UIViewController)

iphone - 如何从 View 和 View Controller 中删除关联?

iphone - MPMoviePlayerController 不工作,也没有通知

ios - MPMoviePlayerController 多个视频播放

uiwebview - iOS7 UIWebivew Youtube MPMediaPlayer无法正常工作

ios - 无法自动更新 TableView

ios - dispatch_async什么时候真正调度?

iphone - iOS 当应用程序位于前台时,我可以使用本地通知播放声音吗