我正在构建一个支持视频播放和录制的应用程序(不同时,它只是它提供的两个独立功能)。为了在应用进入后台并回来后播放视频,我必须在plist中向App plays audio
添加Required background modes
项(我正在使用MPMoviePlayerController
进行播放)。
然而,这会导致我的视频录制出现问题(我正在使用UIImagePickerController
)。基本上,即使在取消选择器后(通过取消按钮或完成拾取媒体),应用程序仍然会保持录音会话的运行。
如果我从plist中删除App plays audio
项,则ImagePickerController的音频会话会停止行为不端,但是当我从后台模式切换到app时,我无法恢复MPMoviePlayerViewController
的播放。
有没有办法可以自定义音频会话的处理方式,以便MPMoviePlayerController
和UIImagePickerController
都可以正常工作?
答案 0 :(得分:2)
是的,您可以根据需要自定义音频会话的处理方式:不要尝试设置App plays audio
设置。
相反,在您的AppDelegate代码中(通常在提供的简单向导项目的AppDelegate.m中),使用applicationWillResignActive:
方法提供代码,停止在MPMoviePlayerController
中播放,然后如果需要,请使用applicationDidBecomeActive:
在您暂停播放时恢复播放。
这不仅允许在临时暂停后恢复视频,而且还允许您保存状态,以便在应用程序从内存中删除或用户将其导入时恢复视频退出。
答案 1 :(得分:1)
您可以划分背景模式,而是使用通知暂停/恢复播放器。请参阅UIApplication class reference中的UIApplicationDidBecomeActiveNotification
和UIApplicationWillResignActiveNotification
。
你可以抓住一些代码并在this class中看到这一点。以下是该类的一些相关代码:
[[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];
}
}