Al mirar el encabezado, en iOS6, parece que AVAudioSessionDelegate ahora está en desuso.
Use AVAudioSessionInterruptionNotification
en su lugar en iOS6.
Actualización: Eso no funcionó. Creo que hay un error en el marco.
Sí, en mi experiencia, beginInterruption, ni la recién documentada AVAudioSessionInterruptionNotification funcionan correctamente. Lo que tenía que hacer era rastrear el estado del jugador usando una bandera local, luego manejar el método endInterruption:withFlags:
para rastrear la recuperación de interrupciones.
Con iOS 6, la reanudación de una interrupción al menos mantendrá su AudioPlayer en el lugar correcto, así que no tuve la necesidad de almacenar el último tiempo de reproducción conocido de mi AVAudioPlayer, simplemente tuve que presionar play.
Aquí está la solución que se me ocurrió. Parece que iOS 6 mata tu audio con un restablecimiento de medios si un AVPlayer permanece residente demasiado tiempo. Lo que termina sucediendo es que el AVPlayer se reproduce, pero no sale sonido. La tasa en el AVPlayer es 1, pero no hay absolutamente ningún sonido. Para agregarle más dolor a la situación, no hay ningún error en el AVAudioSession setActive, ni en el propio AVPlayer que indica que hay un problema.
Agregue al hecho de que no puede depender de appWillResignActive, porque es posible que su aplicación ya esté en segundo plano si depende de los gestos de control remoto.
La solución final que implementé fue agregar un observador periódico en el AVPlayer y registrar la última hora conocida. Cuando recibo el evento de que me devolvieron el control, creo un nuevo AVPlayer, lo cargo con AVPlayerItem y seekToTime en el momento adecuado.
Es una solución bastante molesta, pero al menos funciona y evita los bloqueos periódicos que estaban ocurriendo.
Estoy golpeando la misma situación, Andrew, pudiste resolver el problema? – Ethan
¿Ve el problema en iOS 5.x? – farski
Estoy viendo lo mismo en iOS 6 solamente. Acabo de actualizar, pero no funciona. Avísame si lo resolviste. –