MPMoviePlayerController 停止 iPod 播放并且不重新启动
Posted
技术标签:
【中文标题】MPMoviePlayerController 停止 iPod 播放并且不重新启动【英文标题】:MPMoviePlayerController stops iPod playback and doesn't restart 【发布时间】:2009-11-11 15:43:48 【问题描述】:我有一个带有简短介绍视频的 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 音频上混合电影音频,或者使用闪避,但即使重新启动音乐也可能是一个可以解决的问题。
【问题讨论】:
简短评论:与Apple 来回发送电子邮件似乎表明这可能是Apple 方面的一个错误,他们不知道有什么方法可以解决这个特定问题。 :( Apple 有什么更新吗?我现在遇到了这个问题 您链接到的文档是指从您的应用程序中访问 iPod 库,而您已经表明您希望将您的音乐与来自 iPod 应用程序的音乐混合 - 这是一个完全不同的事情。 你解决过这个问题吗?我刚遇到它,真的很烦人,尤其是因为我的视频甚至没有音频! 【参考方案1】:我已经找到了一个很好的解决方案。在 .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];
对我来说效果很好!
【讨论】:
如果它是从 AppStore 安装的第 3 方应用程序,这将不起作用。无法恢复。有什么解决办法吗? 在设备上测试时它对我有用。你试过吗?【参考方案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);
【讨论】:
【参考方案3】:您在任何时候都只能拥有一个提供音乐的应用程序和多个(简短的)声音来源。如果后台应用正在播放音乐,您的应用可以叠加简短的声音。如果要播放音乐,则必须停止后台应用程序。
因此,我认为您尝试使用 MPMoviePlayerController(或任何高级音频框架)实现的目标是不可能的。如果电影的音轨足够短,您也许可以覆盖电影的音轨,但 MPMoviePlayerController 可能不适合这样做。
【讨论】:
不正确,根据文档,有可能,并且可能在我无法谈论的新固定版本中,并且现在基本上我自己与 Apple 确认这是他们方面的错误。 你能举个例子吗?谢谢。 如果您说的是@Jexe 链接到的文档,它不是指iPod 应用程序,而是指iPod 库访问,它允许更多混合选项。我在这里没有看到 Apple 方面的错误。以上是关于MPMoviePlayerController 停止 iPod 播放并且不重新启动的主要内容,如果未能解决你的问题,请参考以下文章
如何显示 MPMoviePlayerController 控件?
MPMoviePlayerController 隐藏 AirPlay 按钮
MPMoviePlayerController 上的专辑封面
MPMoviePlayerController 已弃用,现在怎么办?