2011-01-12 9 views
6

Ich habe ein Problem mit MPMoviePlayerController. Ich benutze eine Instanz eine m3u8 Audioquelle zu spielen:MPMoviePlayerController/AVAudioSession im Hintergrund startet die Wiedergabe nach einem eingehenden Anruf nicht neu

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; 

es konzipiert ist zu spielen, wenn die App in den Hintergrund geht, und alles funktioniert OK.

Das Problem ist, wenn es im Hintergrund ist und ich einen eingehenden Anruf bekomme. In diesem Fall pausiert der Stream, kehrt jedoch nicht zurück, nachdem der Anruf beendet wurde. In der Tat, sagt die Konsole

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! 

und der App zeigt den Stream als MPMoviePlaybackStatePlaying, aber der Ton scheint zu stoppen. Ich habe versucht,

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

zu tun, aber es scheint zu scheitern.

Hat jemand eine Ahnung?

danke!

Antwort

3

Es scheint, wie ich

benötigt
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; 

in viewDidAppear meiner Viewcontroller ....

+0

Ich empfange Fernbedienungsereignisse, wenn die Wiedergabetaste gedrückt wird, und erhalte die Empfangsereignisse, wenn die Stopptaste gedrückt wird. Außerdem musste ich 1 Sekunde warten, bevor ich weiterspielen konnte, wenn die App Audio im Hintergrund spielt. mit: dispatch_after (dispatch_time (DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC), dispatch_get_main_queue(),^{ // Wiedergabe fortsetzen }) –

1

würden Sie this link suchen Audio-Unterbrechungen zu handhaben. Sie müssen AVAudioSessionDelegate einrichten und die Unterbrechungen behandeln.