MPMoviePlayerController - 黑屏,音频工程

时间:2013-11-03 22:08:05

标签: video ios7 mpmovieplayercontroller

我知道有类似的问题已被提出,但我的其他问题略有不同,而我自己也无法找到解决方案。

我有一个应用程序,可以在整个应用程序中有意阻止界面轮换。但是,该应用程序确实播放视频,并在该视图上允许旋转。

该应用程序已经在商店中存在了一段时间,按预期运行,但我收到了一些视频,说明该视频无法播放运行iOS 7的设备(音频播放)。讨厌的部分是我无法复制问题(我已经在4s,5和5s上测试过)。视频和音频在我的所有设备上都能正常工作。

在“详细视图”屏幕上,有一个播放按钮,可以启动一个新视图的segue,允许全屏视频和旋转 -

“全屏视频”屏幕是一个UIViewController,带有MPMoviePlayerController * moviePlayer和一个(IBAction)playMovie; - 自动调用操作,以便在出现新视图时立即开始视频播放。

viewDidLoad看起来像

[super viewDidLoad];
NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle]
                                     pathForResource:[[self.detailItem valueForKey:@"exerciseVideo"] description] ofType:@"mov"]];
moviePlayer =  [[MPMoviePlayerController alloc]
                initWithContentURL:url];
self.moviePlayer.contentURL = url;
NSError *_error = nil;
[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error: &_error];

[moviePlayer stop];
[moviePlayer setShouldAutoplay:NO];
[NSTimer scheduledTimerWithTimeInterval:0.5
                                 target:self
                               selector:@selector(playMovie)
                               userInfo:nil
                                repeats:NO];

并且playMovie动作看起来像

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(moviePlayBackDidFinish:)
                                             name:MPMoviePlayerPlaybackDidFinishNotification
                                           object:moviePlayer];

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(moviePlayBackDidFinish:)
                                             name:MPMoviePlayerDidExitFullscreenNotification
                                           object:moviePlayer];

moviePlayer.controlStyle = MPMovieControlStyleDefault;
moviePlayer.shouldAutoplay = YES;
moviePlayer.allowsAirPlay = YES;
[self.view addSubview:moviePlayer.view];
[moviePlayer setFullscreen:YES animated:YES];

是否有任何理由说该视频无法播放该代码?我想知道它是否在单个设备上设置相关(或者如果还有其他后台任务可能与内存相关),但是我在这里试图解决我无法复制的问题。 p>

任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:1)

  • 删除不需要的self.moviePlayer.contentURL作业
  • 停止使用奇怪的延迟播放(schedueledTimer...
  • 将所有代码移至viewDidAppear:....
  • 添加一个标志(例如self.playerInitialized),以防止在进入/离开全屏后重新启动播放器(因为这将重新触发该外观事件)
    • 可以通过将该标记设置为false
    • 中的viewDidLoad来完成
    • viewDidAppear:...内,检查该标志是否设置为false
    • 如果是false,请从viewDidAppear:...
    • 中运行上面的player-init代码
    • 在条件下面,将其设置为true
    • 将信号中止/完成播放的播放器通知处理程序中的标记重置为false
    • 确保您在此时完全取消初始化播放器和所有通知处理程序