MPMusicPlayerController在iPhone扬声器路由上杀死RemoteIO

时间:2012-04-01 13:01:56

标签: ios audio core-audio

我有一个使用RemoteIO进行输入输出处理的应用程序(PlayAndRecord类别),还包括一个MPMusicPlayerController。

奇怪的是:仅在iPhone上,当RemoteIO正在运行且iPhone扬声器是音频目的地时,在MPMusicPlayerController中开始播放将导致kAudioSessionBeginInterruption事件并且我的RemoteIO被关闭。 iPod音乐(MPMusicPlayerController)继续播放。

似乎在iPhone上,使用Speaker路由,RemoteIO和MPMusicPlayerController都不能同时播放?在iPad上我运行RemoteIO和MPMusicPlayerController都没有问题。在iPhone上,如果我将某些东西(耳机,扬声器等)插入耳机插孔,一切工作正常,两个流都会运行。如果扬声器是目的地,它似乎只是iPhone上的一个问题。

当检测到Receiver输出时,我将AudioSession输出覆盖到iPhone扬声器(kAudioSessionProperty_OverrideCategoryDe​​faultToSpeaker),这对用户来说是更自然的期望。 iPod播放器似乎也是这样做的。

我还将属性kAudioSessionProperty_OverrideCategoryMixWithOthers设置为true。这允许iPod播放器(可能)一起播放。

我写了一些测试代码以便稍后重启我的RemoteIO会话,这反过来会导致MPMusicPlayerController停止播放。这样表明发言者目的地可能是排他性的?

我也尝试过使用MPMusicPlayerController的'iPodMusicPlayer'和'applicationMusicPlayer'成员,两者之间的结果没有差异。

任何建议当然赞赏

1 个答案:

答案 0 :(得分:0)

我会继续回答我自己的问题,因为我认为我已经弄明白了。不过,我对结果不满意。

似乎MPMusicPlayerController(iPod播放器)正在更改音频路由,无论已经使用的RemoteIO的应用程序是什么路径。事实证明,这种情况发生在iPhone和iPad上。

这可以通过以下方式轻松证明:

  • 插入USB音频输入设备
  • 连接蓝牙音箱
  • 将系统iPod播放器设置为使用蓝牙扬声器
  • 使用带有嵌入式MPMusicPlayerController的RemoteIO启动播放PlayRecord的应用程序
  • 音频I / O(PlayRecord)将从USB输入处理到接收器输出
  • 参与Play嵌入式MPMusicPlayerController播放

结果:

  • 音频路线将更改为蓝牙输入/输出
  • 歌曲将播放蓝牙音箱
  • RemoteIO将收到kAudioSessionBeginInterruption
  • 重新启动RemoteIO流将导致MPMusicPlayerController被停止

我希望会发生什么:

  • MPMusicPlayerController将简单地播放应用程序已在使用的任何音频目标。

我已将Apple Bug添加上述信息。