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,利用硬件与多个内置的鼠标。