AVAudioSessionManager availableInputs“端口iPhone麦克风的未知选定数据源”

我已经注意到我的控制台日志中的这个错误一段时间。 虽然它不影响我的应用程序的执行,但我发现它真的很烦人。 于是,我开始追踪这个错误来自哪里。 事实certificate,当我打电话availableInputs

NSArray *inputs = [[AVAudioSession sharedInstance] availableInputs]; 

它会给我的日志消息:

 ERROR: [0x3d61318c] AVAudioSessionPortImpl.mm:50: ValidateRequiredFields: Unknown selected data source for Port iPhone Microphone (type: MicrophoneBuiltIn) 

我试图打印input

 Printing description of inputs: <__NSArrayI 0x188c4610>( <AVAudioSessionPortDescription: 0x188c4580, type = MicrophoneBuiltIn; name = iPhone Microphone; UID = Built-In Microphone; selectedDataSource = (null)>, <AVAudioSessionPortDescription: 0x18835d90, type = BluetoothHFP; name = Valore-BTi22; UID = 00:23:01:10:38:77-tsco; selectedDataSource = (null)> 

所以selectedDataSource是(null)。 我不知道该怎么办才能使它不为空? iPhone麦克风是一个内置的input…我想这是由苹果已经设置?

这个问题似乎不只是发生在我身上…我只是分享我的理解在这里..

我的情况是..我正在使用pjsip库,它具有较低的audio资源控制。 我注意到,在我调用[[AVAudioSession sharedInstance] availableInputs];之前,声音设备已经closures[[AVAudioSession sharedInstance] availableInputs];

因此,(我想) AVAudioSession ,作为一个更高级别的控制,找不到相应的audio数据源的input – 作为错误指示…

为了进一步调查问题,最好在代码中检查修改audio源的地方..并确保在调用AVAudioSession之前激活audio源

我现在只能走这么远…深入了解和更好地解释audio控制总是赞赏!

关于您的控制台中的错误,我也可以确认我有时会在使用我的iPhone 5S时收到此消息,但我从未在我的4S上看到过。 它可能只是一些核心audio转储,但似乎并不影响实际性能(至less对我而言)。

关于可用的input,你实际打印的是可用的input端口及其描述。 这一点更令人困惑,我不明白为什么selectedDataSource字段为每个为空。

我会说,无论selectedDataSource是什么意思,iPhone肯定是默认为其中一个来源(可能是内置麦克风)。

现在,如果你想明确地select一个端口描述,你可以这样做:

 NSArray *availableInputs = [[AVAudioSession sharedInstance] availableInputs]; AVAudioSessionPortDescription *port = [availableInputs objectAtIndex:0]; //built in mic for your case NSError *portErr = nil; [[AVAudioSession sharedInstance] setPreferredInput:port error:&portErr]; 

之后我会检查portErr,确保在设置preferredInput时没有错误。

值得注意的是,您也可以循环访问特定端口描述的可用数据源,并select一个

 [port setPreferredDataSource:source error:&sourceErr]; 

然后跟着:

 [[AVAudioSession sharedInstance] setPreferredInput:port error:&portErr]; 

这些只是一些方便的iOS7function,利用硬件与多个内置的鼠标。