iphone - Error de mezcla de audio de MPMoviePlayerController y AVAudioPlayer
audiosession (1)
Estoy desarrollando una aplicación de libro de cuentos interactiva para el iPhone y recientemente he encontrado un error frustrante relacionado con la mezcla de audio en el dispositivo.
En primer lugar, configuro una sesión de audio. Configuré la categoría como AVAudioSessionCategoryAmbient y luego inicie y reproduzco mi instancia de AVAudioPlayer . Ahora, en segundo plano, mientras se reproduce el audio, estoy precargando un video para reproducir usando un MPMoviePlayerController seguido de una llamada para prepareToPlay . La razón por la que precargo el video de esta manera es porque lo necesito para reproducirlo instantáneamente más tarde en el momento preciso con un tiempo bastante estricto.
En esta configuración, el audio / película funciona bien y se mezclan y no se interrumpen entre sí. Sin embargo, esta categoría de sesión de audio en particular no permite que el audio continúe reproduciéndose mientras el dispositivo está bloqueado, una característica que realmente necesito. Como resultado, me veo obligado a considerar una categoría diferente: AVAudioSessionCategoryPlayback .
De forma predeterminada, esta categoría no permite mezclar con otro audio, de acuerdo con los documentos de Apple . Para habilitar la mezcla con otro audio, 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 problema mientras estoy bloqueado, pero presenta otro problema: el audio de AVAudioPlayer se interrumpe brevemente a medida que el video se carga con un leve tartamudeo. El tartamudeo es pequeño, quizás menos de un segundo, pero es suficiente para interrumpir la experiencia del usuario. He leído esta publicación relacionada que me permitió cargar previamente el video con AVAudioSessionCategoryAmbient , pero desafortunadamente el mismo enfoque no parece funcionar con la nueva categoría.
La categoría de sesión de audio se aplica correctamente, de acuerdo con el código de retorno. ¿Alguien sabe por qué habilitar la mezcla de audio en esta categoría no es lo mismo que el servicio de mezcla proporcionado por la categoría ambiental?
La mejor manera de encontrar un problema similar es utilizar el nuevo AVPlayer
(+1 @adam) y configurar su aplicación para habilitar el audio de fondo y recibir notificaciones del control remoto. @MarquelV me informó de esto. ¿Cómo puedes reproducir música desde la aplicación del iPod mientras aún recibes eventos de control remoto en tu aplicación?
Si puede hacer que los fondos funcionen correctamente, eso debería permitirle continuar jugando mientras el dispositivo está bloqueado. Ah, y no te olvides de agregar claves a info.plist
, es fácil de hacer y luego no tienes idea de por qué no funciona.