У меня есть класс, который воспроизводит повторяющуюся петлю фоновой музыки с AVAudioPlayer
, а в определенных случаях воспроизводит полноэкранное видео со своей собственной звуковой дорожкой, используя MPMoviePlayerController
.Чтобы иметь только одну дорожку за раз, я прекращаю фоновую музыку перед запуском видео:
-(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];
}
}
Возобновление работало нормально, без воссоздания объекта AVAudioPlayer
(т. Е. Возвращенный метод play
ДА) по аналогичному коду на версиях ОС вплоть до 3.2 включительно.Но на iOS4 метод play
всегда возвращает NO и должен воссоздать объект.Почему это так, и могу ли я возобновить фоновую дорожку должным образом (у меня есть случаи, когда вышеупомянутое решение неприемлемо.)?