【问题标题】:MPMoviePlayer - entering fullscreen on iOS5 leaves stops playing and leaves screen blackMP 电影播放器​​ - 在 iOS 5 上进入全屏模式会停止播放并让屏幕变黑
【发布时间】:2012-10-11 22:02:59
【问题描述】:

我在应用测试期间遇到了一个奇怪的行为。 该应用程序包含一个由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

处理播放按钮的代码:

-(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 未运行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;
    }
}

【问题讨论】:

  • 您是否在 viewWillDisappear 或 viewDidDisappear 中执行任何会导致视频停止的操作?这就是吸引我的原因。
  • 你是对的。当视图消失时,我正在释放电影播放器​​。
  • 因此,在放弃控制器之前将我的支票从 if(self.mpController) 更新为 if(self.mpController && !self.mpController.fullscreen) 确实解决了这个问题。我喜欢他们改变 stuf 的调用方式:p
  • 将我的评论升级为答案:)

标签: ios ios6 mpmovieplayercontroller


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多