首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >AVAudioSessionManager availableInputs“端口iPhone麦克风的未知选定数据源”

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

Stack Overflow用户
提问于 2014-01-14 22:37:12
回答 2查看 15.9K关注 0票数 23

我在控制台日志中注意到这个错误已经有一段时间了。虽然它不会影响我的应用程序的执行,但我发现它真的很烦人。因此,我开始追踪这个错误的来源。结果是当我调用availableInputs时

代码语言:javascript
复制
NSArray *inputs = [[AVAudioSession sharedInstance] availableInputs];

它将为我提供日志消息:

代码语言:javascript
复制
ERROR:     [0x3d61318c] AVAudioSessionPortImpl.mm:50: ValidateRequiredFields: Unknown selected data source for Port iPhone Microphone (type: MicrophoneBuiltIn)

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

代码语言:javascript
复制
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麦克风是一个内置输入...我想它已经是苹果设定的了吧?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-18 13:13:00

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

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

因此,(我猜) AVAudioSession作为一个更高级别的控件,无法为它的输入找到相应的音频数据源--正如错误所指出的那样……

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

我现在只能说这么多了.更深入地理解和更好地解释音频控制总是很受欢迎的!

票数 4
EN

Stack Overflow用户

发布于 2014-01-18 03:19:24

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

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

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

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

代码语言:javascript
复制
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时没有错误。

值得注意的是,您还可以循环浏览特定端口描述的可用dataSources,然后使用

代码语言:javascript
复制
[port setPreferredDataSource:source error:&sourceErr];

然后在后面加上:

代码语言:javascript
复制
[[AVAudioSession sharedInstance] setPreferredInput:port error:&portErr];

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21116216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档