【问题标题】:MPMoviePlayerController not playing video on iOS7MPMoviePlayerController 不在 iOS7 上播放视频
【发布时间】:2015-05-18 09:47:57
【问题描述】:

我有一个播放视频的基本 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 设置器和方法调配,但没有发现任何可能导致这种行为的东西。

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

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

【问题讨论】:

    标签: ios objective-c video mpmovieplayercontroller mpmovieplayer


    【解决方案1】:

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

    【讨论】:

    • 这是一个很好的例子,说明为什么给你该死的类别方法加上前缀总是一个好主意!
    猜你喜欢
    • 2012-11-29
    • 2013-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多