我正在构建一个同时支持视频回放和录制的应用程序(不是同时支持的,它只提供两个独立的功能)。为了在应用程序进入后台并返回后播放视频,我必须在plist中的Required background modes中添加一个App plays audio项(我使用MPMoviePlayerController进行播放)。
然而,这会导致我的视频录制出现问题(我使用的是UIImagePickerController )。基本上,即使在取消拾取器(通过Cancel按钮或当它完成选择媒体时)之后,应用程序仍然会保持音频记录会话运行。
如果我从plist中删除App plays audio项,ImagePickerController的音频会话就会停止运行,但之后我无法在从后台模式切换到应用程序时恢复播放MPMoviePlayerViewController。
有没有一种方法可以自定义音频会话的处理方式,以便MPMoviePlayerController和UIImagePickerController都能正常工作?
发布于 2012-10-29 14:25:59
是的,您可以根据自己的需要自定义音频会话的处理方式:不要试图设置App plays audio设置。
相反,在您的AppDelegate代码(通常位于所提供的简单向导项目的AppDelegate.m中)中,在applicationWillResignActive:方法中提供将在您的MPMoviePlayerController中停止回放的代码,然后如果需要,可以使用applicationDidBecomeActive:在您暂停回放的位置恢复回放。
这不仅允许视频在临时暂停后恢复,还允许您保存状态,以便在应用程序从内存中移除或用户导致其退出的情况下视频可以恢复。
发布于 2012-10-29 22:33:25
您可以擦除背景模式,而不是使用通知来暂停/恢复您的播放器。请参见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];
}
}https://stackoverflow.com/questions/13080153
复制相似问题