2012-04-01 64 views
0

我有一个应用程序使用RemoteIO进行输入输出处理(PlayAndRecord类别),并且还包含一个MPMusicPlayerController。MPMusicPlayerController杀死iPhone上的RemoteIO扬声器路线

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

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

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

我还将属性kAudioSessionProperty_OverrideCategoryMixWithOthers设置为true。这可以让iPod播放器(大概)一起玩。

我写了一些测试代码,稍后重新启动我的RemoteIO会话,这将导致MPMusicPlayerController停止播放。因此表明演讲者的目的地可能是排他性的?

我也尝试过使用MPMusicPlayerController的'iPodMusicPlayer'和'applicationMusicPlayer'成员,这两者之间的上述结果没有任何区别。

任何意见肯定赞赏

+0

经过进一步测试,发现iPhone扬声器目的地是唯一的奇怪情况(iPad正常工作,耳机工作正常)后,我已经向Apple提交了一个Bug。 – MOK9 2012-04-05 00:05:19

回答

0

我会继续前进,回答我的问题,因为我想我已经想通了。尽管如此,我对结果并不满意。

似乎MPMusicPlayerController(iPod Player)正在更改音频路由,无论使用的是RemoteIO的应用程序的路由。事实证明,这发生在iPhone和iPad上。

这可以很容易地证明:

  • 的PlugIn USB音频输入设备
  • 连接蓝牙音箱
  • 设置系统的iPod播放器使用的蓝牙音箱
  • 启动应用PlayRecord使用RemoteIO与不嵌入式MPMusicPlayerController
  • 音频I/O(PlayRecord)将从USB输入处理到接收器输出
  • 搞嵌入式MPMusicPlayerController播放

结果:

  • 音频路线将改为蓝牙输入/输出
  • 宋将蓝牙扬声器播放
  • RemoteIO将收到kAudioSessionBeginInterruption
  • 重启RemoteIO流将导致MPMusicPlayerController停止运行

我想会发生什么:

  • MPMusicPlayerController只会起到任何音频目的地已经是由应用程序使用。

我附加了我的Apple Bug以上信息。