AVCaptureSession and background audio iOS 7

后端 未结 2 1885
不思量自难忘°
不思量自难忘° 2020-11-29 05:35

Whenever I start an AVCaptureSession running with the microphone as an input it cancels whatever background music is currently running (iPod music for instance). If I commen

相关标签:
2条回答
  • You can use the AVAudioSessionCategoryOptionMixWithOthers. For instance,

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

    After that, you can use the AVAudioPlayer simultaneously with AVCaptureSession.

    However, the above code leads to very low volume. If you want normal volume, use the AVAudioSessionCategoryOptionDefaultToSpeaker with AVAudioSessionCategoryOptionMixWithOthers as follows,

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

    This goes well.

    0 讨论(0)
  • 2020-11-29 06:13

    In your AppDelegate:

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

    Where you are allocating AVCaptureSession:

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

    This code will allow you to play background music and run AVCaptureSession with the microphone.

    SWIFT UPDATE:

    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
    }
    

    Where you are allocating AVCaptureSession:

    let session = AVCaptureSession()
    session.automaticallyConfiguresApplicationAudioSession = false
    
    0 讨论(0)
提交回复
热议问题