初始化 AVAudioSession 时保持蓝牙声音

Posted

技术标签:

【中文标题】初始化 AVAudioSession 时保持蓝牙声音【英文标题】:Keep bluetooth sound when initializing AVAudioSession 【发布时间】:2014-07-16 17:52:31 【问题描述】:

我快疯了。

我有一个录音应用。我遇到了一个问题,当我打开我的应用程序时,如果我在蓝牙设备上听音乐,它会自动路由回手机内部扬声器。

无论如何,我希望一切都保持不变。即使当我开始录制时,如果用户正在蓝牙扬声器上收听某些内容,请继续这样做。用户有耳机吗?把音乐留在那里。让一切保持原样。

这就是我当前初始化会话的方式:

[[AVAudiosession sharedInstance]
    setCategory:AVAudioSessionCategoryPlayAndRecord
    withOptions:AVAudioSessionCategoryOptionMixWithOthers | AudioSessionCategoryOptionAllowBluetooth
    error: nil];

我允许它播放、录制、与其他人混音并允许蓝牙,那么为什么它将音频输出重新路由回内部扬声器?

谢谢

5 月 30 日编辑

我设法得到了更好的东西,但仍然缺少一些东西。

如果我添加这一行:

[[AVAudioSession sharedInstance] overrideOutputAudioPort:AVAudioSessionPortOverrideNone error:nil];

音乐保留在蓝牙设备中,但听起来很糟糕。

根据这个答案:https://***.com/a/18541874/517688这是因为

EnableBluetoothInput 根据此影响输入和输出。还要记住,由于蓝牙输入设备的限制,音频将以 8000 Hz 播放

所以在使用蓝牙设备时,没有办法在不失真的情况下保持一切不变??

【问题讨论】:

希望下面的回答对你有帮助.. @Jan 如果您仍在使用 SO,您能否查看我 2018 年 4 月 9 日的问题并告诉我是否是相同/相似的问题?谢谢!! @BooberBunz 不,不幸的是,这与您所经历的无关...... @BooberBunz 但我确实回答了你的问题! 【参考方案1】:

在 iOS 10 中,Apple 添加了选项AVAudioSessionCategoryOptionAllowBluetoothA2DP。他们还更改了 AudioSessionCategoryOptionAllowBluetooth 的含义,只允许使用 HFP 蓝牙配置文件进行输出,这是您获得低质量音频输出的地方。

如果您在代码 sn-p 中使用此新选项代替 AudioSessionCategoryOptionAllowBluetooth 选项,它将允许高质量输出但不允许低质量音频输出。

这是选项的在线文档,但不幸的是,没有在线描述新的 iOS 10 选项。您可以在AVAudioSession.h 的代码内文档中查看更多详细信息。 https://developer.apple.com/reference/avfoundation/avaudiosessioncategoryoptions?language=objc

【讨论】:

这对通过避雷线路由音频有用吗?即 mac 通过电缆连接到 iPhone 扬声器作为输入 @Suraya 我提到的类别选项仅与蓝牙有关 @Suraya,对不起,我没有。我建议开始一个新线程,因为它与 OP 的问题无关 感谢您对代码内文档的评论。很有帮助。【参考方案2】:

不幸的是,我直接从 Apple 技术支持那里得到了这个答案

鉴于当前发布的系统配置,没有支持的方式来实现所需的功能。如果您希望 Apple 考虑在未来添加对此类功能的支持,请通过 Bug Reporter 工具提交增强请求,地址为 http://bugreport.apple.com。

原来如此……

【讨论】:

以上是关于初始化 AVAudioSession 时保持蓝牙声音的主要内容,如果未能解决你的问题,请参考以下文章

连接蓝牙耳机时无法切换到扬声器输出

AVAudioSession无法识别来自蓝牙设备的音频

AVAudioSession 未检测到连接的蓝牙设备

AVAudioPlayer 和 AVAudioSession 不会在 iPad(2 或其他)上播放蓝牙立体声

使用 AVAudioSession 时背景音频安静

iOS设置蓝牙外设播放音频