ios - 初始化 AVAudioSession 时保持蓝牙声音

标签 ios iphone objective-c bluetooth avaudiosession

我快要疯了。

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

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

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

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

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

谢谢

5 月 30 日编辑

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

如果我添加这一行:

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

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

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

EnableBluetoothInput affects both input and output according to this. Also remember, the audio will play at 8000 Hz due to the limitation of bluetooth input devices

所以在使用蓝牙设备时,没有办法保持一切不变而不失真声音??

最佳答案

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

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

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

关于ios - 初始化 AVAudioSession 时保持蓝牙声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23895832/

相关文章:

ios - 共享扩展以打开包含应用程序

ios - 在 SKRecognizer 中检测不到语音

ios - 我应该关心优化写入移动设备内存的代码吗?

ios - 在 iOS 上从不同的应用程序读取文档

objective-c - 声明/初始化 CGPoints 数组时遇到问题

objective-c - 如何访问二进制文件数据而不将其完全加载到 Cocoa 中?

ios uinavigationcontroller 到 uiviewcontroller

iPhone CLLocation 模拟器 didUpdateToLocation 从未调用过

iphone - 我应该如何在从 UISlider 读取的核心数据中存储百分比值?

IOS如何制作这样的可折叠菜单?