AVCaptureSession和背景audioiOS 7

每当我开始一个运行麦克风的AVCaptureSession作为input时,它将取消当前正在运行的任何背景音乐(例如iPod音乐)。 如果我将添加audioinput的行注释掉,背景audio会继续。

有没有人知道用麦克风录制video剪辑的方法,同时继续播放背景audio? 当您尝试录制video和音乐正在播放时,也有错误。

试图这样做:

[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error: nil]; UInt32 doSetProperty = 1; AudioSessionSetProperty (kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(doSetProperty), &doSetProperty); [[AVAudioSession sharedInstance] setActive: YES error: nil]; 

'AudioSessionSetProperty' is deprecated: first deprecated in iOS 7.0

所以我试图这样做:

 AVAudioSession *audioSession = [AVAudioSession sharedInstance]; NSError *setCategoryError = nil; [audioSession setCategory:AVAudioSessionCategoryPlayback withOptions:AVAudioSessionCategoryOptionMixWithOthers error:&setCategoryError]; [audioSession setActive:YES error:nil]; 

但最后它没有工作。 感谢帮助!

你可以使用AVAudioSessionCategoryOptionMixWithOthers 。 例如,

 AVAudioSession *session = [AVAudioSession sharedInstance]; [session setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionMixWithOthers error:nil]; 

之后,您可以与AVCaptureSession同时使用AVAudioPlayer

但是,上面的代码导致非常低的音量。 如果您想要正常音量, AVAudioSessionCategoryOptionMixWithOthers按如下方式使用AVAudioSessionCategoryOptionDefaultToSpeakerAVAudioSessionCategoryOptionMixWithOthers

 [session setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionMixWithOthers|AVAudioSessionCategoryOptionDefaultToSpeaker error:nil]; 

这很好。

在你的AppDelegate中

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //Stop app pausing other sound. [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDuckOthers | AVAudioSessionCategoryOptionDefaultToSpeaker error:nil]; } 

你在哪里分配AVCaptureSession

 AVCaptureSession *session = [[AVCaptureSession alloc] init]; session.automaticallyConfiguresApplicationAudioSession = NO; 

此代码将允许您播放背景音乐并使用麦克风运行AVCaptureSession

SWIFT更新:

AppDelegate

 func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { //Stop app pausing other sound. do{ try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayAndRecord, withOptions: [.DuckOthers, .DefaultToSpeaker]) } catch { } return true } 

你在哪里分配AVCaptureSession

 let session = AVCaptureSession() session.automaticallyConfiguresApplicationAudioSession = false