AVAudioSession用于音频视频通话

时间:2015-02-23 05:15:18

标签: ios audio avaudiosession

我正在实施音频视频通话功能。我正在使用AVAudioSession for Voice功能。我想配置AVAudioSession,以便它可以在接收扬声器和扬声器以及耳机上工作。我正在使用AVAudioSession的以下初始化:

NSError *err = nil;
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord
                                         withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker error:&err];

[[AVAudioSession sharedInstance] overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:&err];
[[AVAudioSession sharedInstance] setMode:AVAudioSessionModeVideoChat error:&err];

[[AVAudioSession sharedInstance] setActive: YES error: NULL]; 

以上代码适用于扬声器和耳机,但扬声器的语音质量非常低。

我已尝试使用以下代码将音频路由切换到接收方扬声器。但它不起作用。

NSError *err = nil;
[[AVAudioSession sharedInstance] overrideOutputAudioPort:AVAudioSessionPortOverrideNone error:&err];

有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:0)

我遇到了类似的问题。我通过

来解决它
[[AVAudioSession sharedInstance] overrideOutputAudioPort:AVAudioSessionPortOverrideNone error:nil];

NSArray *outputs =[[[AVAudioSession sharedInstance] currentRoute] outputs];
BOOL haveSpeaker = NO;

for (AVAudioSessionPortDescription *currentPut in outputs) {
    if ([currentPut.portType isEqualToString:@"Speaker"]) {
        haveSpeaker = YES;
        break;
    }
}
if (haveSpeaker) {

    NSError *error;
    [[AVAudioSession sharedInstance]setCategory:AVAudioSessionCategoryRecord error:nil];
    [[AVAudioSession sharedInstance]setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
    [[AVAudioSession sharedInstance] overrideOutputAudioPort:AVAudioSessionPortOverrideNone error:&error];
    [[AVAudioSession sharedInstance]setActive:YES error:nil];
}

在我看来AVAudioSessionCategoryOptionDefaultNone不是reciver,它是默认路由。所以你哈瓦改变了这种模式的默认路线;