J'ai une classe qui joue une boucle répétitive de musique de fond avec un AVAudioPlayer
, et à une occasion spécifique, joue une vidéo plein écran avec sa propre piste sonore en utilisant MPMoviePlayerController
. Pour avoir seulement une piste à la fois, j'arrêter la musique de fond avant de lancer la vidéo:Pourquoi MPMoviePlayerController empêche-t-il la reprise de l'audio une fois le film terminé?
-(void)startVideo{
[backgroundMusic stop];
MPMoviePlayerViewController *mp = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"videofile" ofType:@"m4v"]]];
[self presentMoviePlayerViewControllerAnimated:mp];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(videoOver) name:MPMoviePlayerPlaybackDidFinishNotification object:nil];
[mp.moviePlayer play];
[mp release];
}
-(void)videoOver{
[[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:nil];
if(![backgroundMusic play]){
NSLog(@"bad: can't resume bg music!");
[backgroundMusic release];
backgroundMusic = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"videofile" ofType:@"m4v"]] error:NULL];
backgroundMusic.delegate = self;
backgroundMusic.numberOfLoops = -1;
[backgroundMusic play];
}
}
La reprise a bien fonctionné sans recréer l'objet AVAudioPlayer
(la méthode play
retour OUI) sur le code analogue sur OS versions jusqu'à et y compris 3.2. Mais sur iOS4, la méthode play
renvoie toujours NON et doit recréer l'objet. Pourquoi est-ce, et puis-je reprendre la piste de fond correctement (j'ai des cas où la solution utilisée ci-dessus est inacceptable)?