Ios MPMusicLayerController终止iPhone扬声器路由上的RemoteIO

Ios MPMusicLayerController终止iPhone扬声器路由上的RemoteIO,ios,audio,core-audio,Ios,Audio,Core Audio,我有一个应用程序,它使用RemoteIO进行输入输出处理播放和录制类别,还包括一个MPMusicLayerController 奇怪的是:仅在iPhone上,当RemoteIO正在运行且iPhone扬声器是音频目标时,在MPMusicLayerController中开始播放将导致kAudioSessionBeginInterruption事件,我的RemoteIO将关闭。iPod音乐MPMusicLayerController将继续播放 似乎在iPhone上,通过扬声器路径,RemoteIO和M

我有一个应用程序,它使用RemoteIO进行输入输出处理播放和录制类别,还包括一个MPMusicLayerController

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

似乎在iPhone上,通过扬声器路径,RemoteIO和MPMusicLayerController不能同时播放?在iPad上,我运行RemoteIO和MPMusicLayerController都没有问题。在iPhone上,如果我将耳机、扬声器等插入耳机插孔,一切正常,两条流都会运行。这似乎只是iPhone上的一个问题,如果扬声器是目的地的话

我将AudioSession输出覆盖到iPhone扬声器kAudioSessionProperty_OverrideCategoryDefaultToSpeaker当检测到接收器输出时,这样做是为了让用户更自然地期望。iPod播放器似乎也能做到这一点

我还将属性kAudioSessionProperty\u OverrideCategoryMixWithOthers设置为true。这样,iPod播放器就可以继续播放了

我编写了一些测试代码,以便稍后重新启动RemoteIO会话,这将导致MPMusicLayerController停止播放。从而表明说话人目的地可能是排他性的

我还尝试了MPMusicLayerController的“IPodMusicLayer”和“ApplicationMusicLayer”成员,两者的上述结果没有差异


任何建议我都会很感激的,我会继续回答我自己的问题,因为我想我已经明白了。不过,我对结果并不满意

MPMusicLayerController iPod播放器似乎正在更改音频路径,而不管应用程序已用于其RemoteIO的路径是什么。事实证明,这在iPhone和iPad上都会发生

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

插件式USB音频输入设备 连接蓝牙扬声器 将系统iPod播放器设置为使用蓝牙扬声器 启动应用程序,使用带有嵌入式MPMusicLayerController的RemoteIO进行播放录制 音频I/O PlayRecord将从USB输入处理到接收器输出 在嵌入式MPMusicLayerController上播放 结果:

音频路由将更改为蓝牙输入/输出 歌曲将在蓝牙扬声器上播放 RemoteIO将接收kAudioSessionBeginInterruption 重新启动RemoteIO流将导致MPMusicLayerController停止 我希望发生的事:

MPMusicLayerController只需播放应用程序已使用的任何音频目标。
我已将上述信息添加到我的Apple Bug中。

经过进一步测试,发现iPhone扬声器目的地是唯一一个奇怪的情况iPad工作正常,耳机工作正常,我向Apple提交了一个Bug。