我正在开发一个需要麦克风输入的音乐应用程序,因此我的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时,是否有其他设置可以在应用程序运行时配对耳机
发布于 2018-08-27 12:42:25
许多蓝牙耳机似乎受到特定采样率的限制,有时输入(麦克风)和输出(扬声器)的采样率不同。因此,它们无法连接到采样率不兼容的实时音频会话。
当应用程序停止其音频会话转到后台,然后重新进入前台时,此间隙允许音频会话和音频单元代码重新协商采样率(例如,建议和处理故障/错误代码,-50等)。在(重新)启用会话和(重新)启动音频单元之前。
如果您收到路由更改通知,您可以尝试让应用程序停止音频,拆除其会话,等待几分钟,然后根据需要重新启动任何音频。
https://stackoverflow.com/questions/52013041
复制相似问题