Iphone MPMoviePlayerController停止iPod播放,并且不';t重启

Iphone MPMoviePlayerController停止iPod播放,并且不';t重启,iphone,audio,mpmovieplayercontroller,Iphone,Audio,Mpmovieplayercontroller,我有一个带有简短介绍视频的iPhone应用程序。如果用户在iPod播放音乐时启动应用程序,则音乐将在视频播放时停止(无论视频是否有声音),并且在视频播放后音频将永久停止。 苹果似乎表示,你可以通过AudioSession技巧解决这个问题: 但是他们在这里的建议似乎不起作用;MPMoviePlayerController似乎出于自己的目的覆盖了音频会话配置。理想情况下,我会将电影音频与iPod音频混合,或者使用ducking,但即使重新启动音乐也可能是一个可以接受的修复方法。您在任何时候都只能有

我有一个带有简短介绍视频的iPhone应用程序。如果用户在iPod播放音乐时启动应用程序,则音乐将在视频播放时停止(无论视频是否有声音),并且在视频播放后音频将永久停止。 苹果似乎表示,你可以通过AudioSession技巧解决这个问题:


但是他们在这里的建议似乎不起作用;MPMoviePlayerController似乎出于自己的目的覆盖了音频会话配置。理想情况下,我会将电影音频与iPod音频混合,或者使用ducking,但即使重新启动音乐也可能是一个可以接受的修复方法。

您在任何时候都只能有一个音乐应用程序和多个(简短)声音源。如果背景应用程序正在播放音乐,您的应用程序可以覆盖简短的声音。如果你想播放音乐,背景应用程序必须停止


因此,我不认为您试图使用MPMoviePlayerController(或任何高级音频框架)实现的目标是可能的。如果电影的音轨足够短,您可能可以覆盖它,但MPMoviePlayerController可能不适合这一点。

我找到了一个很好的解决方案。在.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];
之后,在完成铺设的方法中:

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

对我来说效果很好

我认为您可以通过初始化音频会话来实现这一点,如下所示:

 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);

只是一个简短的评论:与苹果之间来回的电子邮件似乎表明这可能是苹果方面的一个缺陷,他们不知道如何解决这个特定问题(苹果有更新吗?我现在遇到了这个问题。你链接到的文档指的是从你的应用程序中访问iPod库,而你表示你想将你的音乐与来自iPod应用程序的音乐混合,这是完全不同的事情。你解决过这个问题吗?我刚刚遇到了它,并且这真的很烦人,尤其是因为我的视频甚至没有音频!不是真的,根据文档,这是可能的,而且可能是一个新的固定版本,我不能谈论,基本上现在我向苹果确认这是他们这边的一个bug。你能举个例子吗?谢谢。如果你是在谈论由@Jexe,它不是指iPod应用程序,而是指iPod library access,它允许更多的混合选项。我在这里没有看到苹果方面的错误。如果它是从AppStore安装的第三方应用程序,这不起作用。无法恢复。有解决方案吗?在设备上测试时,它对我有效。你试过你的吗?