Pregunta sobre avcapturesession, ios, avaudiosession – ¿Cómo resolver AVCaptureSession v AVAudioSession conflicto en iOS?

3

Estoy intentando ejecutar un AVCaptureSession en un controlador de vista, pero dentro del mismo, también estoy llamando a una función desde una biblioteca que usa AVAudioSession. Parece que no puedo obtener mucha información del depurador, aparte de que se bloquea exactamente cuando llamo a la función de esta biblioteca en particular. La biblioteca es libpd:

https://github.com/libpd

y llama a AVAudioSession como sharedInstance. Llamo a libpd como

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

así que la mezcla está habilitada, pero por si acaso, la he recompilado de manera que cuando se encuentre, lo haga:

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

pero no hay suerte Mover las llamadas a libpd para verWillAppear dentro del controlador de vista tampoco funcionó. Sin embargo, si quito el código que llama a libpd de mi controlador de vista y lo coloco en el delegado de la aplicación dentro de didFinishLaunchingWithOptions, entonces comienza bien, y las dos sesiones parecen coexistir sin fallar.

¿Me estoy perdiendo algo sobre AVCaptureSession y la mezcla? ¿Cómo hago para que ambas sesiones coexistan? No estoy usando AVCapture para capturar el audio, solo la entrada de la cámara, ¿así que no debería ser capaz de tener las dos cosas?

Tu respuesta

2   la respuesta
4

Inicie la sesión de audio (que se puede configurar para admitir la mezcla) después de haber iniciado la sesión de la cámara. Lo intenté y debes esperar a que la cámara se configure antes de iniciar la sesión de audio (por ejemplo, espera un par de segundos)

No he podido hacer que esto funcione, aunque puedo cambiar de un lado a otro cambiando activamente mi AVAudioSession de AVAudioSessionCategoryPlayAndRecord a AVAudioSessionCategoryAmbient y configurando que esté activo antes de llamar a startRunning en mi AVCaptureSession, y que active stop en la sesión de captura antes de cambiar la sesión de audio volver a reproducir y grabar ... Ah, pero tal vez debería esperar a que AVCaptureSessionDidStartRunningNotification se publique antes de intentar mezclar AVAudioSession? qix
0

¿Es posible que la biblioteca asuma que no hay otra sesión de audio activa y llamadas?AudioSessionInitialize?

Porlos docs "Puede activar y desactivar su sesión de audio según sea necesario (consulte AudioSessionSetActive), pero debe inicializarla solo una vez".

Supongo que los autores de esta biblioteca no incluyeron la funcionalidad para una sesión de audio en curso ... pero sería lo suficientemente fácil sumergirse allí y comentar las líneas de inicialización, siempre y cuando su aplicación siempre llegue a esa función. con una sesión de audio en ejecución (de lo contrario simplemente verifique conif para ver si tiene una sesión de audio, si no la tiene, inicialice una, etc.)

Preguntas relacionadas