1

我正在构建一个支持视频播放和录制的应用程序(不是同时,它只是它提供的两个独立的功能)。为了在应用程序进入后台并返回后播放视频,我必须在 plist 中添加一个App plays audio项目Required background modes(我MPMoviePlayerController用于播放)。

但是,这会导致我的视​​频录制出现问题(我正在使用UIImagePickerController它)。基本上,即使选择器被关闭(通过取消按钮或完成选择媒体时),应用程序仍然保持音频录制会话运行。

如果我App plays audio从 plist 中删除该项目,ImagePickerController 的音频会话将停止异常行为,但是我无法MPMoviePlayerViewController在从后台模式切换到应用程序时恢复播放。

有没有办法可以自定义音频会话的处理,以便MPMoviePlayerControllerUIImagePickerController都可以正常工作?

4

2 回答 2

2

是的,有一种方法可以根据您的需要自定义音频会话的处理:不要尝试设置App plays audio设置。

相反,在您的 AppDelegate 代码(通常在提供的简单向导项目中的 AppDelegate.m 中)中,在applicationWillResignActive:方法中提供将停止播放的代码MPMoviePlayerController,然后用于applicationDidBecomeActive:在暂停时恢复播放如果需要的话。

这不仅允许视频在临时暂停后恢复,而且还允许您保存状态,以便在应用程序从内存中删除或用户导致它退出的情况下可以恢复视频。

于 2012-10-29T06:25:59.043 回答
1

您可以从头开始使用背景模式,而是使用通知来暂停/恢复播放器。请参阅UIApplication 类参考中的UIApplicationDidBecomeActiveNotification和。UIApplicationWillResignActiveNotification

您可以获取一些代码并在此类中看到它的实现。以下是该类的一些相关代码:

[[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(_didBecomeActive:)
                                                 name:UIApplicationDidBecomeActiveNotification
                                               object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(_willResignActive:)
                                             name:UIApplicationWillResignActiveNotification
                                           object:nil];

- (void) _didBecomeActive:(NSNotification*)notification {
  if (_wasPlaying) {
    [_movieController play];
  }
}

- (void) _willResignActive:(NSNotification*)notification {
  _wasPlaying = _movieController.currentPlaybackRate != 0.0;
  if (_wasPlaying) {
    [_movieController pause];
  }
}
于 2012-10-29T14:33:25.050 回答