我有一个带有简短介绍视频的iPhone应用程序。如果用户在iPod正在播放音乐时启动应用程序,音乐将在视频播放时停止(无论视频是否有声音),并且视频播放后音频将永久停止。 Apple似乎表明你可以使用AudioSession技巧来解决这个问题: http://www.devworld.apple.com/iphone/library/documentation/Audio/Conceptual/AudioSessionProgrammingGuide/WorkingWithOpenALiPodMusicandMovies/WorkingWithOpenALiPodMusicandMovies.html
但是他们的建议似乎没有用;似乎MPMoviePlayerController会为了自己的目的覆盖音频会话配置。理想情况下,我将电影音频混合在iPod音频上,或者可能使用闪避,但即使重新启动音乐也可能是一个可以修复的问题。 有什么想法吗?
答案 0 :(得分:2)
我找到了一个很好的解决方案。在.h文件中,您必须创建一个名为“wasPlaying”的BOOL。在播放视频之前,请询问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];
然后,在方法finishedPlaying:
if (wasPlaying ==YES)
{
NSLog(@"Music was playing, lets play music again");
[[MPMusicPlayerController iPodMusicPlayer] play];
}
对我而言,它运作良好!
答案 1 :(得分:2)
我认为您可以通过初始化类似于此的音频会话来完成此操作:
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);
答案 2 :(得分:1)
您只能随时拥有一个提供音乐的应用以及多种(简短)声音源。如果后台应用正在播放音乐,您的应用可以覆盖简短的声音。如果您想播放音乐,必须停止后台应用。
所以我不认为你使用MPMoviePlayerController(或任何高级音频框架)可以实现的目标。您可能能够覆盖电影的音轨,如果它足够短但MPMoviePlayerController可能不适合这个。