我正在使用AVAudioSession开发一个快速的音频/视频和文字聊天iOS App。
每当我选择使用某些蓝牙设备时,设备上播放的声音不是App音频流。它们仅在发送/接收消息时播放由文本聊天库发送的系统声音。它并没有发生在所有蓝牙设备上,其中一些设备运行正常。在内置麦克风和扬声器的应用程序也可以。
以下是我班级管理设备最重要的方法:
class MyAudioSession
{
private var mAudioSession: AVAudioSession;
init!()
{
self.mAudioSession = AVAudioSession.sharedInstance();
do {
try self.mAudioSession.setActive(false);
try self.mAudioSession.setCategory(AVAudioSessionCategoryPlayAndRecord, withOptions: .AllowBluetooth);
try self.mAudioSession.setMode(AVAudioSessionModeVideoChat);
try self.mAudioSession.setActive(true);
}
catch {
return nil;
}
}
func switchToDevice(device: AVAudioSessionPortDescription!) -> Bool
{
var ret = false;
if (device != nil) {
do {
try self.mAudioSession.setPreferredInput(device);
ret = true;
}
catch {
self.logSwitch(device, error: error);
}
}
return ret;
}
}
我想了解为什么我的应用程序在某些蓝牙设备上无法正常工作。这些相同的设备可以在我的Cel上的其他应用程序上正常运行。
我做了另一个测试:我为MPVolumeView更改了所有这些,并且发生了完全相同的问题,因此问题似乎出现在音频播放器上。
有人可以给我一个建议来解决这个问题吗?
THX。
答案 0 :(得分:3)
约尔格, 虽然这可能不是最好的答案,但我已经能够克服奇怪的蓝牙问题。我的问题似乎与你的问题相似,因为我也在使用:
AVAudioSessionCategoryPlayAndRecord
这在一些蓝牙设备上引起了我的问题(除了一些设备之外)。
我最后做的是将类别设置为:
AVAudioSessionCategoryPlayback
然后,当我需要录制时,我会将类别切换为:
AVAudioSessionCategoryRecord
完成录制后再回到播放状态。
这是目前唯一可以通过切换不同输出(扬声器,耳机,蓝牙)获得一致结果的方法。
希望有所帮助。猜测这是" AVAudioSessionCategoryPlayAndRecord"
中的错误