AVAudioSessionManager 可用输入"Unknown selected data source for port iPhone Microphone"



我在控制台日志中注意到这个错误已经有一段时间了。虽然它不会影响我的应用程序的执行,但我觉得它真的很烦人。因此,我开始追踪这个错误的来源。事实证明,当我呼叫可用的输入时

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

它会给我日志信息:

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

我试着把输入打印出来。。

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麦克风是一个内置输入。。。我想它已经是苹果设定的了?

这个问题似乎不仅仅发生在我身上……我将在这里分享我的理解。。

我的情况是…我使用的是pjsip库,它对音频资源有较低级别的控制。我注意到,在我呼叫[[AVAudioSession sharedInstance] availableInputs];之前,声音设备已经关闭

因此,(我猜)AVAudioSession作为一个更高级别的控件,无法为其输入找到相应的音频数据源——正如错误所示。。。

为了进一步调查这个问题,你最好检查代码中修改音频源的地方。。并在呼叫AVAudioSession之前确保音频源已激活

我现在只能走这么远。。。对音频控制有更深入的理解和更好的解释,我们将不胜感激!!

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

关于可用的输入,您实际打印出的是可用的输入端口及其描述。这一点更令人困惑,我不明白为什么selectedDataSource字段对每个字段都为null。

我要说的是,无论selectedDataSource在说什么,iPhone肯定会默认使用其中一个源(可能是内置麦克风)。

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

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时没有错误。

值得注意的是,您还可以循环浏览特定端口描述的可用数据源,并使用选择一个

[port setPreferredDataSource:source error:&sourceErr];

然后用

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

这些是一些方便的iOS7独有功能,利用了带有多个内置鼠标的硬件。

相关内容

  • 没有找到相关文章

最新更新