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)
有人知道为什么玩家停止工作?
我用不同的方法解决了这个问题.由于问题的主要原因是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版本,具有完全相同的行为.
我自己解决了。当我将电影播放器作为子视图添加到容器视图中时,我不需要使用使用创建的实际视图控制器,该视图控制器旨在用于MPMoviePlayerViewController
以模态方式或在其他一些 vc 层次结构中呈现它。
对于拥有可以作为子视图添加到其他视图的电影播放器视图的单一目的, 的MPMoviePlayerController
view 属性就足够了。
在 iOS 6 之前,两者都可以工作,但 iOS 6 似乎在资源管理/生命周期方面有所不同。
示例项目已使用工作代码进行更新。