MPMoviePlayer - 在iOS5上进入全屏时停止播放并使屏幕变黑

时间:2012-10-11 12:51:58

标签: ios ios6 mpmovieplayercontroller

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

解决方案是确保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;
    }
}

1 个答案:

答案 0 :(得分:1)

确保您没有在viewWillDisappear或viewDidDisappear中停止或释放视频播放器。