【问题标题】:MPMusicPlayerController kills RemoteIO on iPhone Speaker routeMPMusicPlayerController 在 iPhone 扬声器路由上杀死 RemoteIO
【发布时间】:2012-04-01 13:01:55
【问题描述】:

我有一个使用 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' 成员,两者的上述结果没有区别。

任何建议都值得赞赏

【问题讨论】:

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

标签: ios audio core-audio


【解决方案1】:

我会继续回答我自己的问题,因为我想我已经弄清楚了。不过,我对结果并不满意。

似乎 MPMusicPlayerController (iPod Player) 正在更改音频路由,而不管应用程序已经使用的 RemoteIO 路由是什么。事实证明,这在 iPhone 和 iPad 上都会发生。

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

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

结果:

  • 音频路径将更改为蓝牙输入/输出
  • 歌曲将在蓝牙扬声器上播放
  • RemoteIO 将收到 kAudioSessionBeginInterruption
  • 重新启动 RemoteIO 流将导致 MPMusicPlayerController 停止

我希望发生的事情:

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

我已将上述信息附加到我的 Apple Bug 中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-16
    • 2014-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多