在iOS6中进入全屏后,MPMoviePlayerController会中断/停止

sno*_*nod 26 fullscreen mpmovieplayercontroller ios ios6

我有一个MPMoviewPlayerViewController嵌入到UIView对象中.当我在嵌入模式下启动播放器时,一切正常并且符合预期.如果用户然后点击全屏切换(或者如果我以编程方式使用更改为全屏setFullscreen:animated),则播放器全屏播放,电影播放另一秒,之后屏幕变黑,只有" 正在加载... "消息.

此行为仅在使用iOS 6(也是iPad 6.0模拟器)时出现,在运行iOS 5的设备上,一切都按预期工作.

电影源是​​应用程序包中的本地文件.

播放和进入全屏时,调试输出如下:

2012-09-26 15:24:48.251 [39895:c07] [MPAVController] Autoplay: Disabling autoplay for pause
2012-09-26 15:24:48.252 [39895:c07] [MPAVController] Autoplay: Disabling autoplay
2012-09-26 15:24:48.262 [39895:c07] [MPAVController] Autoplay: Enabling autoplay
2012-09-26 15:24:48.265 [39895:c07] [MPAVController] Autoplay: Likely to keep up or full buffer: 0
2012-09-26 15:24:48.266 [39895:c07] [MPAVController] Autoplay: Skipping autoplay, not enough buffered to keep up.
2012-09-26 15:24:48.267 [39895:c07] [MPAVController] Autoplay: Likely to keep up or full buffer: 0
2012-09-26 15:24:48.268 [39895:c07] [MPAVController] Autoplay: Skipping autoplay, not enough buffered to keep up.
2012-09-26 15:24:48.276 [39895:c07] [MPAVController] Autoplay: Skipping autoplay, disabled (for current item: 0, on player: 1)
2012-09-26 15:24:48.286 [39895:c07] [MPCloudAssetDownloadController] Prioritization requested for media item ID: 0
2012-09-26 15:24:48.938 [39895:c07] [MPAVController] Autoplay: Enabling autoplay
2012-09-26 15:24:48.940 [39895:c07] [MPAVController] Autoplay: Enabling autoplay
2012-09-26 15:24:48.954 [39895:c07] [MPAVController] Autoplay: Skipping autoplay, disabled (for current item: 0, on player: 1)
2012-09-26 15:24:49.006 [39895:c07] [MPAVController] Autoplay: Enabling autoplay
2012-09-26 15:24:49.012 [39895:c07] [MPAVController] Autoplay: Skipping autoplay, disabled (for current item: 0, on player: 1)

有人知道为什么玩家停止工作?

编辑:在github上 添加了一个示例项目

Ant*_*ony 45

你是在停止视频viewWillDisappear:还是viewDidDisappear:?当视频在iOS 6上进入全屏时会调用这些方法,但在任何早期版本的iOS上都不会调用这些方法(在Open Radar中已经提交了一个报告来说明这个"错误").我在类似的问题上发布了这个临时解决方案:

在修复错误之前我的临时解决方案是检查玩家的fullscreen布尔值viewWillDisappear:和/或viewDidDisappear:.如果它返回YES,则电影正在进入全屏模式,您应该避免做任何可能会中断它的事情.


Yil*_*ric 8

我用不同的方法解决了这个问题.由于问题的主要原因是iOS 6调用viewWillDisappear:和/或viewDidDisappear:方法.我想也许iOS也调用了MPMoviePlayerViewController的相同方法.所以我为MPMoviePlayerViewController创建了一个Category,并实现了viewWillDisappear:和/或viewDidDisappear:方法.有趣的是它有效.(顺便说一下苹果不推荐)

这是代码;

标题(MPMoviePlayerViewController_FullscreenFix.h)

#import <MediaPlayer/MediaPlayer.h>

@interface MPMoviePlayerViewController (MPMoviePlayerViewController_FullscreenFix)
- (void)viewDidDisappear:(BOOL)animated;
- (void)viewWillDisappear:(BOOL)animated;
@end
Run Code Online (Sandbox Code Playgroud)

实现(MPMoviePlayerViewController_FullscreenFix.m)

#import "MPMoviePlayerViewController_FullscreenFix.h"

@implementation MPMoviePlayerViewController (MPMoviePlayerViewController_FullscreenFix)

-(void)viewDidDisappear:(BOOL)animated
{
    [super viewDidDisappear:animated];
}

- (void)viewWillDisappear:(BOOL)animated{
    [super viewWillDisappear:animated];
}

@end
Run Code Online (Sandbox Code Playgroud)

现在我的代码正在处理iOS 6.1.3,5.5.1和4.3.5版本,具有完全相同的行为.


sno*_*nod 3

我自己解决了。当我将电影播放器​​作为子视图添加到容器视图中时,我不需要使用使用创建的实际视图控制器,该视图控制器旨在用于MPMoviePlayerViewController以模态方式或在其他一些 vc 层次结构中呈现它。

对于拥有可以作为子视图添加到其他视图的电影播放器​​视图的单一目的, 的MPMoviePlayerControllerview 属性就足够了。

在 iOS 6 之前,两者都可以工作,但 iOS 6 似乎在资源管理/生命周期方面有所不同。

示例项目已使用工作代码进行更新。