Chciałbym nagrać wideo z dźwiękiem za pomocą AVCaptureSession
. Do tego potrzebuję AudioSessionCategory AVAudioSessionCategoryPlayAndRecord
, ponieważ moja aplikacja odtwarza również wideo z dźwiękiem.AVAudioSession AVAudioSessionCategoryPlayAndRecord glitch
Chcę, aby dźwięk był słyszalny z głośnika domyślnego i chcę go miksować z innym dźwiękiem. Potrzebuję więc opcji AVAudioSessionCategoryOptionDefaultToSpeaker | AVAudioSessionCategoryOptionMixWithOthers
.
Gdybym wykonać następujące czynności podczas gdy inny dźwięk jest odtwarzany istnieje wyraźna słyszalny usterka w audio z innej aplikacji:
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionMixWithOthers | AVAudioSessionCategoryOptionDefaultToSpeaker error:nil];
[[AVAudioSession sharedInstance] setActive:YES error:nil];
Czy istnieje sposób, aby pozbyć się tej usterki?
Wygląda na to, że jest AVAudioSessionRouteChangeReasonRouteConfigurationChange
po zgłoszeniu przez AVAudioSessionRouteChangeReasonCategoryChange
z braku wejścia mikrofonowego do wejścia mikrofonowego.
Zmiana konfiguracji (i usterka) występuje również, gdy aplikacja przechodzi do tła (z lub bez dezaktywacji sesji audio). Podczas powrotu z tła bez dezaktywowania sesji audio, zakłócenia zaczynają występować, gdy konfiguracja AVCaptureSession
ulega zmianie, tj. Gdy kamera jest przełączana z przodu na tył. W tym przypadku ścieżka dźwiękowa nie jest dotykana i pojawia się tylko przy powrocie z tła bez dezaktywacji sesji audio. Powiadomienie o zmianie trasy jest uruchamiane dwukrotnie. Aby wyłączyć mikrofon i raz, aby włączyć go ponownie.
Należy zauważyć, że to zachowanie można łatwo odtworzyć, pobierając przykład AVCamManual firmy Apple. Dodaj następujący kod do viewDidLoad
z AAPLCameraViewController.m
:
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionMixWithOthers | AVAudioSessionCategoryOptionDefaultToSpeaker error:nil];
[[AVAudioSession sharedInstance] setActive:YES error:nil];
…
session.usesApplicationAudioSession = YES;
session.automaticallyConfiguresApplicationAudioSession = NO;
niektóre inne dziwne rzeczy, które mogą być powiązane:
Ustaw kategorię audio do AVAudioSessionCategoryAmbient
pierwszy i aktywować go:
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient withOptions:0 error:nil];
[[AVAudioSession sharedInstance] setActive:YES error:nil];
a następnie zmień kategorię:
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionMixWithOthers | AVAudioSessionCategoryOptionDefaultToSpeaker error:nil];
inne dźwięki przestają się wyświetlać pomimo flagi opcji. Żadne błędy nie są zgłaszane.
Mam wszystkie te same problemy. Co do litery. Jakieś wiadomości na ten temat? – ancajic
Dla Twojego ostatniego przykładu, gdzie dźwięk przestaje być odtwarzany pomimo opcji opcji. Dźwięk będzie odtwarzany po wyłączeniu sesji audio ("[AVAudioSession sharedInstance] setActive: NO withOptions: AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation error: nil];') przed ustawieniem kategorii "[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayAndRecord withOptions: AVAudioSessionCategoryOptionMixWithInne | AVAudioSessionCategoryOptionDefaultToSpeaker error: nil]; '. I ponownie aktywuj po ("[AVAudioSession sharedInstance] setActive: TAK błąd: zero];') – ancajic
Mając te same problemy, przez cały czas próbowałem używać 'PlayAndRecord': http://stackoverflow.com/questions/35496563/avcapturesession-addinput-powoduje-glitch-in-background-audio. Próbowano także pracować, zmieniając kategorię z "Ambient", gdy rozpoczyna się nagrywanie: http://stackoverflow.com/questions/35615707/avaudiosession-setcategory-not-working. Daj mi znać, jeśli znalazłeś rozwiązanie dla którejkolwiek z metod: – Cbas