1

我知道有人问过类似的问题,但我的问题与其他问题略有不同,而且我还无法自己找到解决方案。

我有一个应用程序会故意阻止整个应用程序的界面旋转。但是,该应用程序确实会播放视频,并且在该视图中,允许旋转。

该应用程序已经在商店中出现了一段时间,按预期运行,但我收到了一些关于视频无法在运行 iOS 7 的设备上播放的报告(音频确实播放)。烦人的部分是我无法复制这个问题(我已经在 4s、5 和 5s 上进行了测试)。视频和音频在我所有的设备上都可以正常工作。

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

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

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];

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

任何建议,将不胜感激。

4

1 回答 1

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