如何解决AVAudioSessionManager availableInputs“Unknown selected data source for port iPhone Microphone”的问题?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (1)
  • 查看 (2330)

我在控制台日志中注意到这个错误一段时间了。它不影响我的应用程序的执行,但我觉得它真的很烦人。因此,我开始追踪这个错误来自哪里。事实证明,当我调用availableInputs

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)。我不知道我该怎么做才能使它不为空?

提问于
用户回答回答于

我使用pjsip库,它具有较低级别的音频资源控制。我注意到,在我调用之前,音响设备已关闭[[AVAudioSession sharedInstance] availableInputs];

因此,AVAudioSession作为一个更高级别的控制,无法找到相应的音频数据源的输入。

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

用户回答回答于

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

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

我会说iPhone是其中一个来源(可能是内置麦克风),而不管selectedDataSource是在说什么。

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

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

扫码关注云+社区

领取腾讯云代金券