MPMoviePlayerController останавливает воспроизведение iPod и не перезапускается - PullRequest
5 голосов
/ 11 ноября 2009

У меня есть приложение для iPhone с коротким вступительным видео. Если пользователь запускает приложение, когда его iPod воспроизводит музыку, музыка остановится во время воспроизведения видео (независимо от того, есть ли на нем звук) и звук останется окончательно остановленным после воспроизведения видео. Apple, кажется, указывает, что вы можете решить эту проблему с помощью трюков AudioSession: https://web.archive.org/web/20100819124854/http://developer.apple.com:80/iPhone/library/documentation/Audio/Conceptual/AudioSessionProgrammingGuide/WorkingWithOpenALiPodMusicandMovies/WorkingWithOpenALiPodMusicandMovies.html

Но их предложения здесь просто не работают; похоже, что MPMoviePlayerController переопределяет конфигурацию аудиосеанса для своих собственных целей. В идеале я бы микшировал звук из фильма через звук iPod или, возможно, использовал приглушение, но даже перезапуск музыки мог бы быть приемлемым решением.

Ответы [ 3 ]

2 голосов
/ 12 апреля 2011

Я нашел отличное решение для этого. В .h файле вы должны создать BOOL с именем wasPlaying. Перед воспроизведением видео вы спросите iPod, воспроизводилось ли оно.

if ([[MPMusicPlayerController iPodMusicPlayer] playbackState] == MPMusicPlaybackStatePlaying)
{
    NSLog(@"Music was playing, lets put YES to the bool");
    wasPlaying = YES;
}

Затем, после того как вы сообщаете проигрывателю фильма, что вы вызываете следующее:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(finishedPlaying) name:MPMoviePlayerPlaybackDidFinishNotification object: moviePlayer];

И после этого в методе FinisedPlaying:

if (wasPlaying ==YES)
{
    NSLog(@"Music was playing, lets play music again");
    [[MPMusicPlayerController iPodMusicPlayer] play];
}

У меня все работало нормально!

2 голосов
/ 05 ноября 2011

Я думаю, что вы можете сделать это, инициализируя аудио сеанс, подобный следующему:

 NSError *audioSessionError = nil; 
 AVAudioSession *audioSession = [AVAudioSession sharedInstance]; 
 [audioSession setCategory:AVAudioSessionCategoryAmbient 
                          error:&audioSessionError] == YES)

Затем, когда вы захотите использовать аудиосессию, вы можете настроить звук iPod на утку видеодорожки:

AudioSessionInitialize (NULL, NULL, NULL, NULL);
OSStatus propertySetError = 0;
UInt32 allowMixing = true;
propertySetError |= AudioSessionSetProperty(kAudioSessionProperty_OtherMixableAudioShouldDuck, sizeof(allowMixing), &allowMixing);
AudioSessionSetActive(YES);
1 голос
/ 05 октября 2010

Вы можете иметь только одно музыкальное приложение в любое время и несколько источников (коротких) звуков. Если фоновое приложение воспроизводит музыку, ваше приложение может накладывать короткие звуки. Если вы хотите воспроизводить музыку, фоновое приложение должно быть остановлено.

Так что я не думаю, что то, что вы пытаетесь достичь, возможно с помощью MPMoviePlayerController (или любой из высокоуровневых аудио-фреймворков). Возможно, вы сможете наложить звуковую дорожку фильма, если она достаточно короткая, но MPMoviePlayerController, вероятно, не подходит для этого.

...