AVAudioSession:某些蓝牙设备在我的应用程序上无法正常工作

时间:2016-02-27 15:38:08

标签: ios iphone swift audio bluetooth

我正在使用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。

1 个答案:

答案 0 :(得分:3)

约尔格, 虽然这可能不是最好的答案,但我已经能够克服奇怪的蓝牙问题。我的问题似乎与你的问题相似,因为我也在使用:

AVAudioSessionCategoryPlayAndRecord

这在一些蓝牙设备上引起了我的问题(除了一些设备之外)。

我最后做的是将类别设置为:

AVAudioSessionCategoryPlayback

然后,当我需要录制时,我会将类别切换为:

AVAudioSessionCategoryRecord

完成录制后再回到播放状态。

这是目前唯一可以通过切换不同输出(扬声器,耳机,蓝牙)获得一致结果的方法。

希望有所帮助。猜测这是" AVAudioSessionCategoryPlayAndRecord"

中的错误