ios - AVAudioSession用于音频视频通话

标签 ios audio avaudiosession

我正在实现音频视频通话之类的功能。我正在将AVAudioSession用于语音功能。我想配置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];

有人可以帮我吗?

最佳答案

我有类似的问题。我解决了

[[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不接收,这是默认路由。因此,您已经更改了此模式的默认路由;

关于ios - AVAudioSession用于音频视频通话,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28667291/

相关文章:

ios - Realm - 返回数组列表

ios - 使用 Storyboard时,操作系统何时设置 rootViewController?

audio - 压缩和未压缩的 .wav 文件

ios - 使用 AVAudioSession AVAudioSessionCategoryPlayAndRecord 静音所有推送通知声音和振动。即使应用程序在后台

delegates - Cocos2D 2.1 : "Delegate" deprecated in iOS 6. 如何设置这个 AVAudioSession 的委托(delegate)?

ios - 将参数传递给选择器操作

ios - 对 NSMutableArray 进行排序

actionscript-3 - 使用 AS3 我想在音频上做慢动作、快进和倒带

jquery - 无法让点击代码上的 jquery 工作

ios - 带有自定义提示的 AVAudioSession requestRecordPermission?