2011-01-12 17 views
6

Tengo un problema con MPMoviePlayerController. Yo uso una instancia para reproducir una fuente de audio M3U8:MPMoviePlayerController/AVAudioSession en segundo plano no se reinicia la reproducción después de la llamada entrante

AVAudioSession *audioSession = [AVAudioSession sharedInstance]; 

NSError *setCategoryError = nil; 
[audioSession setCategory:AVAudioSessionCategoryPlayback error:&setCategoryError]; 
if (setCategoryError) { 
} 

NSError *activationError = nil; 
[audioSession setActive:YES error:&activationError]; 
if (activationError) { 
} 
self.player = 
[[MPMoviePlayerController alloc] initWithContentURL: [NSURL URLWithString:url]]; 
player.view.hidden = YES; 
player.shouldAutoplay = YES; 
[player release]; 
[btnContainer addSubview: player.view]; 
player.useApplicationAudioSession = NO; 

que está diseñado para jugar cuando la aplicación pasa a segundo plano, y todo está funcionando bien.

El problema es cuando está en segundo plano y recibo una llamada entrante. En ese caso, la transmisión hace una pausa, pero no regresa después de finalizar la llamada. De hecho, la consola dice

2011-01-12 12:02:27.729 RAC1[1571:307] MP _playbackInterruptionDidEndNotification :: NSConcreteNotification 0x155890 {name = AVController_PlaybackInterruptionDidEndNotification; object = <AVController: 0x180d50>; userInfo = { 
    "AVController_InterruptionStatusNotificationParameter" = "call.declined"; 
    "AVController_InterruptorNameNotificationParameter" = Phone; 
}}, _state = 6 
2011-01-12 12:02:27.730 RAC1[1571:307] MP _playbackInterruptionDidEndNotification :: resuming playback! 

y la aplicación hace mostrará la secuencia como MPMoviePlaybackStatePlaying, pero el sonido parece detenerse. He intentado hacer

[[AVAudioSession sharedInstance] setActive: YES error: &err] 

pero parece fallar.

¿Alguien tiene una pista?

gracias!

Respuesta

3

Parece como que tenía que

[[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; 

en viewDidAppear de mi viewController ....

+0

Empiezo a recibir eventos de control remoto cuando se presiona el botón de reproducción y termino recibiendo eventos de control cuando se presiona el botón de parada. También tuve que esperar 1 segundo antes de reanudar la reproducción cuando la aplicación está reproduciendo audio en segundo plano. using: dispatch_after (dispatch_time (DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC), dispatch_get_main_queue(),^{ // Reanudar el juego }) –

1

Did nos fijamos en this link para manejar interrupciones de audio. Necesita configurar AVAudioSessionDelegate y manejar las interrupciones.

Cuestiones relacionadas