Pytanie w sprawie avaudiosession, ios, avcapturesession – Jak rozwiązać konflikt AVCaptureSession v AVAudioSession w iOS?

3

Próbuję uruchomić AVCaptureSession w kontrolerze widoku, ale w ramach tego samego wywołuję również funkcję z biblioteki, która używa AVAudioSession. Wydaje mi się, że nie mogę uzyskać wielu informacji z debugera, poza tym, że zawiesza się dokładnie wtedy, gdy nazywam tę konkretną funkcję biblioteki. Biblioteka to libpd:

https://github.com/libpd

i wywołuje AVAudioSession jako sharedInstance. Nazywam libpd jako:

<code>[self.audioController configurePlaybackWithSampleRate:44100 numberChannels:2 inputEnabled:YES mixingEnabled:YES]
</code>

więc miksowanie jest włączone, ale na wszelki wypadek przekompilowałem go tak, aby podczas pracy:

<code>    UInt32 doSetProperty = 1;
    AudioSessionSetProperty (kAudioSessionProperty_OverrideCategoryMixWithOthers,  sizeof(doSetProperty), &doSetProperty);
</code>

ale nie ma szczęścia. Przeniesienie wywołań do libpd do viewWillAppear w kontrolerze widoku również nie działało. Jednakże, jeśli biorę kod, który wywołuje libpd z mojego viewcontrollera i umieszczam go w delegacie aplikacji wewnątrz didFinishLaunchingWithOptions, to zaczyna się dobrze, a obie sesje wydają się współistnieć bez awarii.

Czy brakuje mi czegoś o AVCaptureSession i miksowaniu? Jak przejść do współistnienia obu sesji? Nie używam AVCapture do przechwytywania dźwięku, tylko wejście do kamery, więc nie powinienem być w stanie jakoś się obudzić?

Twoja odpowiedź

2   odpowiedź
4

) po rozpoczęciu sesji kamery. Próbowałem i musisz poczekać, aż aparat zostanie skonfigurowany przed rozpoczęciem sesji audio (np. Poczekaj kilka sekund)

Nie udało mi się tego osiągnąć, chociaż mogę przełączać się tam iz powrotem, aktywnie przełączając AVAudioSession z AVAudioSessionCategoryPlayAndRecord na AVAudioSessionCategoryAmbient i ustawiając to aktywne przed wywołaniem startRunning na moim AVCaptureSession i wywołując stopRunning na sesji przechwytywania przed przełączeniem sesji audio powrót do gry i nagrywania ... Ah, ale może powinienem poczekać na wysłanie AVCaptureSessionDidStartRunningNotification przed próbą miksowania AVAudioSession? qix
0

że biblioteka zakłada, że ​​żadna inna sesja audio nie jest aktywna i nie wywołujeAudioSessionInitialize?

Zadoktorzy „Możesz aktywować i dezaktywować sesję audio w razie potrzeby (patrz AudioSessionSetActive), ale należy ją zainicjować tylko raz.”

Zgaduję, że autorzy tej biblioteki nie zawierali funkcjonalności trwającej sesji audio ... ale łatwo byłoby tam zanurkować i skomentować linie inicjujące, o ile aplikacja zawsze trafi na to wywołanie funkcji z uruchomioną sesją audio (inaczej po prostu sprawdź za pomocąif oświadczenie, aby sprawdzić, czy masz sesję audio, jeśli nie, zainicjuj ją itp.)

Powiązane pytania