应用程序运行时无法将蓝牙耳机与 AVAudioSessionCategoryPlayAndRecord 连接
Posted
技术标签:
【中文标题】应用程序运行时无法将蓝牙耳机与 AVAudioSessionCategoryPlayAndRecord 连接【英文标题】:Unable to connect Bluetooth headset with AVAudioSessionCategoryPlayAndRecord while app is running 【发布时间】:2018-08-25 00:13:31 【问题描述】:我正在开发一个需要麦克风输入的音乐应用,所以我的AVAudiosessionCategory
设置为AVAudioSessionCategoryPlayAndRecord
。
我正在尝试让蓝牙耳机与该应用程序配合使用,但我注意到将 BT 与不同的AVAudioSession
类别配对时有些奇怪:
如果我使用AVAudioSessionCategoryAmbient
,BT 耳机在应用程序运行时或在应用程序启动之前配对/取消配对正常。我也可以在配对或取消配对耳机时收到AVAudioSessionRouteChangeNotification
s。
但是,使用AVAudioSessionCategoryPlayAndRecord
,如果我在应用程序启动之前配对它,我可以与 BT 配对并接收音频,但如果我在应用程序运行时尝试配对,它将无法工作。我的 BT 耳机会显示它们已“连接”,但 BT 图标不会出现在 iOS 状态栏上。我在打开或关闭耳机时也没有收到任何类型的 AVAudioSessionRouteChangeNotification
s 或其他音频中断通知。
如果我将应用程序移到后台然后重新进入,我可以让 BT 正常工作,但是当应用程序在前台时我永远无法配对。
我将 libpd 用于音频引擎,这是我初始化 PdAudioController
对象的方法:
[self.pdAudio configurePlaybackWithSampleRate:samplingRate numberChannels:2 inputEnabled:YES mixingEnabled:NO];
//enable bluetooth
[PdAudioController setSessionOptions:AVAudioSessionCategoryOptionAllowBluetoothA2DP];
在使用AVAudioSessionCategoryPlayAndRecord
AVAudioSessionCategoryPlayAndRecord
时,我是否可以更改其他设置以在应用运行时配对耳机?
【问题讨论】:
你的BT耳机支持录音吗?他们有麦克风吗? 是的,他们确实有一个麦克风,我可以用它来通话/录音,但我刚刚做了一个测试,即使他们配对并且正在输出声音,BT 麦克风似乎也没有激活通过 BT 耳机(更高的输入电平是从 iPhone 麦克风而不是 BT 麦克风录制的)。你认为这有什么关系吗?接收输入的位置对我来说并不重要(我的应用程序分析来自现场乐器的音频),但重要的是您不能在应用程序运行时配对 BT,仅在使用 @987654333 时 @. 重新使用 BT 麦克风,AVAudioSessionCategoryOptionAllowBluetooth
有帮助吗?我只是猜测,我不能添加太多 - 你尝试过@hotpaw2 的建议吗?
将AVAudioSessionCategoryOptionAllowBluetooth
与libpd 一起使用会导致音频和点击卡顿,而AVAudioSessionCategoryOptionAllowBluetoothA2DP
可以正常工作,只要您在启动应用程序之前已经与BT 配对。这可能是我应该向libpd
开发人员提出的问题,因为他们似乎没有在这方面进行大量测试:github.com/libpd/libpd/issues/177github.com/libpd/libpd/issues/245
你试过其他BT设备吗?
【参考方案1】:
许多蓝牙耳机似乎仅限于特定的采样率集,有时输入(麦克风)和输出(扬声器)的采样率不同。因此他们无法连接到采样率不兼容的实时音频会话。
当应用停止其音频会话以转到后台,然后重新进入前台时,此间隙允许音频会话和音频单元代码重新协商采样率(例如,建议和处理失败/错误代码、-50 等)在(重新)启用会话和(重新)启动音频单元之前。
如果您收到路线更改通知,您可以尝试让应用停止音频,关闭其会话,等待几个滴答声,然后根据需要重新启动任何音频。
【讨论】:
有趣的是,我正在关闭路由更改通知中的音频,重新配置音频单元以根据连接的内容以首选采样率播放,然后重新打开音频。然而奇怪的是,当我在应用程序运行时打开耳机时,永远不会发送路线更改通知。如果我在启动应用程序之前已经与 BT 连接,我将在应用程序运行时关闭 BT 时收到通知。 hmmm... 应用程序可能不会收到与当前会话不兼容的设备的通知?您可能必须让用户(少数阅读应用文档的人)手动切换。以上是关于应用程序运行时无法将蓝牙耳机与 AVAudioSessionCategoryPlayAndRecord 连接的主要内容,如果未能解决你的问题,请参考以下文章