2011-01-31 20 views
21

Estoy desarrollando una aplicación de libro de cuentos interactivo para el iPhone y recientemente he encontrado un error frustrante con respecto a la mezcla de audio en el dispositivo.MPMoviePlayerController y AVAudioPlayer error de mezcla de audio

En primer lugar, configuré una sesión de audio. Establecí la categoría en AVAudioSessionCategoryAmbient y luego inicié y reproduzco mi instancia AVAudioPlayer. Ahora, en el fondo mientras se reproduce el audio, estoy precargando un video para reproducirlo usando MPMoviePlayerController seguido de una llamada al prepareToPlay. La razón por la que precarga el video de esta manera es porque lo necesito para jugar instantáneamente más tarde con un tiempo bastante estricto.

En esta configuración, el audio/película funciona bien y se mezclan y no se interrumpen. Sin embargo, esta categoría de sesión de audio particular no permite que el audio continúe reproduciéndose mientras el dispositivo está bloqueado, una característica que realmente necesito. Como resultado, estoy obligado a considerar una categoría diferente: AVAudioSessionCategoryPlayback.

Por defecto, esta categoría no permite mezclar con otro audio, according to the Apple docs. Para habilitar la mezcla con otro tipo de audio que estoy anulando la categoría correspondiente:

OSStatus propertySetError = 0; 
UInt32 setProperty = 1; 
propertySetError = AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(setProperty), &setProperty); 
assert(propertySetError == 0); 

Desafortunadamente, esto resuelve mi forma de tocar mientras cuestión cerrada pero introduce otro problema: la AVAudioPlayer de audio se interrumpe brevemente como las cargas de vídeo con un tartamudeo menor . El tartamudeo es pequeño, tal vez menos de un segundo, pero es suficiente para interrumpir la experiencia del usuario. Leí this related post que me permitió precargar el video con AVAudioSessionCategoryAmbient, pero desafortunadamente el mismo enfoque no parece funcionar con la nueva categoría.

La categoría de la sesión de audio se aplica con éxito, de acuerdo con el código de retorno. ¿Alguien sabe por qué la habilitación de la mezcla de audio con esta categoría no es igual a la facilidad de mezcla proporcionada por la categoría ambiental?

+0

Bienvenido a StackOverflow. ¡Buena pregunta! – Moshe

+1

Gracias! ¡Espero tener el formato correcto! – jdmunro

+1

¿Ha intentado usar AVPlayer para reproducir el video en lugar de mezclarlo entre los dos marcos? – adam

Respuesta

1

La mejor manera que he encontrado de trabajar con un problema similar es usar la nueva AVPlayer (+1 @adam) y configurar su aplicación para habilitar el audio de fondo y recibir notificaciones de control remoto. Me lo avisó @MarquelV después de How can you play music from the iPod app while still receiving remote control events in your app?

Si puede hacer que el fondo funcione correctamente, debería permitirle seguir jugando mientras el dispositivo está bloqueado. Ah, y no te olvides de agregar las claves al info.plist, es fácil de hacer y luego no tienes idea de por qué no está funcionando.

Cuestiones relacionadas