MPMoviePlayerController不在iOS7上播放视频

时间:2015-05-18 09:47:57

标签: ios objective-c video mpmovieplayercontroller mpmovieplayer

我有一个播放视频的基本MPMoviePlayerController代码。它在iOS8上完美运行,但它在iOS7上冻结了应用程序。

以下是代码:

 - (void)playURL:(NSURL *)URL fromView:(UIView *)view
 {
     NSParameterAssert(URL);
     NSParameterAssert(view);
     NSParameterAssert(view.superview);

     self.moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:URL];
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayBackDidFinish:) name:MPMoviePlayerPlaybackDidFinishNotification object:self.moviePlayer];
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieControllerDidCollapse:) name:MPMoviePlayerDidExitFullscreenNotification object:self.moviePlayer];
     self.moviePlayer.shouldAutoplay = YES;

     self.moviePlayer.view.frame = view.frame;
     [view.superview addSubview:self.moviePlayer.view];
     [self.moviePlayer setFullscreen:YES animated:YES];
 }

 - (void)moviePlayBackDidFinish:(NSNotification *)notification
 {
     [self.moviePlayer setFullscreen:NO animated:YES];
 }

 - (void)movieControllerDidCollapse:(NSNotification *)note
 {
     [[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:self.moviePlayer];
     [[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerDidExitFullscreenNotification object:self.moviePlayer];

     [self.moviePlayer.view removeFromSuperview];
     self.moviePlayer = nil;
 }

我在其他应用程序中运行相同的代码,并且运行良好,但在这个特定的应用程序中,它会冻结iOS7。启动时,它开始在循环中吐出大量CGContext错误,表示上下文为0x0。我试图创建一个虚拟CGContext并消除错误,但在这种情况下,它将CPU旋转到100%,大概是因为它试图在具有错误范围或smth的上下文中绘制内容。

我也尝试使用MPMoviePlayerViewController而不是MPMoviePlayerController,但它做了同样的事情。模态演示动画甚至没有出现。

我还在我的项目中搜索了一些UIAppearance setter和方法的混合,但没有发现任何可能导致这种行为的事情。

我在这款应用上运行了Time Profiler,问题与绘制Progress Sliders有关。我的项目中没有进度视图子类或类别。仪器配置文件如下所示:Instruments output。 (抱歉,由于声誉不足,无法包含直接图片。)

我也尝试用我的整套cocoapods运行一个干净的项目,它在不同的项目中完美运行。

1 个答案:

答案 0 :(得分:1)

好的,我的某个类别存在问题。我定义了一个方法[UIImage imageNamed:inBundle:],它显然与其中一个私有API冲突。但我没有得到任何警告。重命名方法解决了这个问题。