Pergunta sobre avcapturesession, ios, avaudiosession – Como resolver o conflito AVCaptureSession v AVAudioSession no iOS?

3

Eu estou tentando executar um AVCaptureSession em um controlador de exibição, mas dentro do mesmo, eu também estou chamando uma função de uma biblioteca que usa AVAudioSession. Eu não consigo obter muita informação fora do depurador, que não cai exatamente quando eu chamo a função desta biblioteca particular. A biblioteca é libpd:

https://github.com/libpd

e chama AVAudioSession como sharedInstance. Eu chamo a libpd como:

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

então a mixagem está habilitada, mas apenas no caso, eu recompilei para que, quando ele for lançado, eu faça:

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

mas sem sorte. Mover as chamadas para a libpd para viewWillAppear dentro do controlador de visualização também não funcionou. No entanto, se eu pegar o código que chama libpd do meu viewcontroller e colocá-lo no delegate do aplicativo dentro de didFinishLaunchingWithOptions, ele será iniciado bem, e as duas sessões parecerão coexistir sem travar.

Estou faltando alguma coisa sobre AVCaptureSession e mixagem? Como faço para as duas sessões coexistentes? Eu não estou usando o AVCapture para capturar áudio, apenas a entrada da câmera, então eu não deveria ser capaz de fazer as duas coisas acontecerem?

Sua resposta

2   a resposta
4

agem) depois de iniciar a sessão da câmera. Eu tentei e você precisa esperar que a câmera seja configurada antes de iniciar a sessão de áudio (por exemplo, aguarde alguns segundos)

Eu não consegui fazer isso funcionar, embora eu possa alternar ativamente minha AVAudioSession de AVAudioSessionCategoryPlayAndRecord para AVAudioSessionCategoryAmbient e configurá-la antes de chamar startRunning na minha AVCaptureSession e chamar stopRunning na sessão de captura antes de alternar a sessão de áudio voltar a tocar e gravar ... Ah, mas talvez eu deva esperar que AVCaptureSessionDidStartRunningNotification seja postado antes de tentar misturar o AVAudioSession? qix
0

É possível que a biblioteca presuma que não há nenhuma outra sessão de áudio ativa e chamadasAudioSessionInitialize?

Poros docs "Você pode ativar e desativar sua sessão de áudio conforme necessário (consulte AudioSessionSetActive), mas deve inicializá-la apenas uma vez."

Eu acho que os autores desta biblioteca não incluíram funcionalidade para uma sessão de áudio em andamento ... mas seria bastante fácil mergulhar lá e comentar as linhas de inicialização, contanto que seu aplicativo sempre atinja essa chamada de função com uma sessão de áudio em execução (caso contrário, basta verificar com umif declaração para ver se você tem uma sessão de áudio, se você não fizer isso, inicializar um, etc)

Perguntas relacionadas