AVCaptureSession и фоновое аудио iOS 7
Всякий раз, когда я запускаю AVCaptureSession с микрофоном в качестве входа, он отменяет любую фоновую музыку в данный момент (например, музыка iPod). Если я прокомментирую строку, добавляющую аудиовход, фоновый звук будет продолжаться.
Кто-нибудь знает способ записи видеоклипов с микрофоном, продолжая при этом воспроизводить фоновый звук? Также есть ошибка, когда вы пытаетесь записать видео и музыка в данный момент воспроизводится.
A попытался сделать следующее:
[[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];
Но, наконец, это не сработало. Спасибо за помощь!
Ответы
Ответ 1
Вы можете использовать AVAudioSessionCategoryOptionMixWithOthers
.
Например,
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionMixWithOthers error:nil];
После этого вы можете использовать AVAudioPlayer
одновременно с AVCaptureSession
.
Однако приведенный выше код приводит к очень малой громкости.
Если вы хотите нормальный объем, используйте AVAudioSessionCategoryOptionDefaultToSpeaker
с AVAudioSessionCategoryOptionMixWithOthers
следующим образом:
[session setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionMixWithOthers|AVAudioSessionCategoryOptionDefaultToSpeaker error:nil];
Это хорошо.
Ответ 2
В 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