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
按如下方式使用AVAudioSessionCategoryOptionDefaultToSpeaker
的AVAudioSessionCategoryOptionMixWithOthers
,
[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