应用程序运行时无法将蓝牙耳机与AVAudioSessionCategoryPlayAndRecord连接

时间:2018-08-25 00:13:32

标签: ios audio bluetooth core-audio avaudiosession

我正在开发一个需要麦克风输入的音乐应用,因此我的AVAudioSessionCategory设置为AVAudioSessionCategoryPlayAndRecord

我正在尝试使蓝牙耳机能够与该应用配合使用,但是我注意到将BT与不同的AVAudioSession类别配对时存在一些特殊之处:

如果我使用AVAudioSessionCategoryAmbient,则在应用程序运行时或应用程序启动之前,BT耳机可以配对/取消配对。配对或取消配对耳机时,我也能收到AVAudioSessionRouteChangeNotification个消息。

但是,如果我使用AVAudioSessionCategoryPlayAndRecord,可以在应用启动之前将其与BT配对并接收音频,但是如果我尝试在应用运行时进行配对,则无法正常工作。我的BT耳机将指示它们已“连接”,但BT图标不会出现在iOS状态栏上。开启或关闭耳机时,我也没有收到任何AVAudioSessionRouteChangeNotification或其他音频中断通知。

如果将应用程序移到后台然后重新输入,我可以使BT工作,但是当应用程序处于前台时,我永远无法配对。

我将libpd用于音频引擎,这是初始化PdAudioController对象的方法:

 [self.pdAudio configurePlaybackWithSampleRate:samplingRate numberChannels:2 inputEnabled:YES mixingEnabled:NO];

 //enable bluetooth
 [PdAudioController setSessionOptions:AVAudioSessionCategoryOptionAllowBluetoothA2DP];

使用AVAudioSessionCategoryPlayAndRecord时,是否可以更改其他设置以在应用程序运行时配对耳机?

1 个答案:

答案 0 :(得分:0)

许多蓝牙耳机似乎仅限于特定的采样率集,有时输入(麦克风)和输出(扬声器)的采样率不相同。因此,他们无法连接到采样率不兼容的现场音频会话。

当应用程序停止其音频会话进入后台,然后又重新进入前景时,此间隙使音频会话和音频单元代码可以重新协商采样率(例如,建议并处理失败/错误(-50)等代码),然后才能(重新)启用会话并(重新)启动音频单元。

如果您收到路线更改通知,则可以尝试让该应用停止音频,中断其会话,等待几分钟的滴答声,然后根据需要重新启动所有音频。