AVCaptureSession и фоновое аудио iOS 7

Всякий раз, когда я запускаю AVCaptureSession, работающий с микрофоном в качестве входа, он отменяет любую фоновую музыку, которая работает в данный момент (например, музыку iPod). Если я закомментирую строку, добавляющую аудиовход, фоновый звук продолжается.

Кто-нибудь знает способ записи видеоклипов с микрофоном, продолжая при этом воспроизводить фоновый звук? Также есть ошибка, когда вы пытаетесь записать видео, и музыка в настоящее время играет.

А попытался сделать так:

[[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];

Но в конце концов это не сработало. Спасибо за помощь!

2 ответа

Решение

Вы можете использовать AVAudioSessionCategoryOptionMixWithOthers, Например,

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

После этого вы можете использовать AVAudioPlayer одновременно с AVCaptureSession,

Тем не менее, приведенный выше код приводит к очень низкой громкости. Если вы хотите нормальную громкость, используйте 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
Другие вопросы по тегам