ios - MPMoviePlayerController 不在 iOS7 上播放视频

标签 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 和方法 swizzling,但没有发现任何可能导致此行为的东西。

我在此应用程序上运行了 Time Profiler,问题与绘制进度 slider 有关。我的项目中没有进度 View 子类或类别。 Instruments 分析看起来像这样:Instruments output . (抱歉,由于缺乏声誉,无法包含直接图像)。

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

最佳答案

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

关于ios - MPMoviePlayerController 不在 iOS7 上播放视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30299944/

相关文章:

ios - 除非先运行干净,否则运行 ibtool 会导致部分 iOS 构建中断构建

ios - WKWebView 在 StoryBoard 中还是以编程方式(Swift 4)?

html - 如何将嵌入的youtube视频放在图像上方(作为视频周围的框架)

android - 在 android 2.3 上通过 HTTPS 播放 .m3u8 文件

ios - 在react native中,如何将视频组件设置为页面背景?

iphone - 保存或序列化 AFNetworking 操作队列?

ios - 如何使用 Json 数组到 UITableview

iphone - 代码 4 : Problem deleting project files within a project

iphone - 它会影响 map 加载速度/性能吗? addAnnotation 与 addAnnotations

objective-c - runModalForWindow 时的 EXC_BAD_ACCESS(代码=1,地址=0x0)