Подтвердить что ты не робот

Доступен AVAudioSessionManagerУстройства "Неизвестный выбранный источник данных для порта 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)>

Итак, выбранный источник данных (null). Я не знаю, что мне делать, чтобы это не было нулевым? iPhone-микрофон - это встроенный вход... Я полагаю, он уже установлен Apple?

4b9b3361

Ответ 1

Эта проблема, похоже, не просто со мной... Я просто расскажу о моем понимании здесь.

Моя ситуация.. Я использую библиотеку pjsip, которая имеет более низкий уровень управления аудиоресурсами. Я заметил, что звуковое устройство было закрыто до того, как я позвоню [[AVAudioSession sharedInstance] availableInputs];

Таким образом, (я думаю) AVAudioSession, как элемент управления более высокого уровня, не смог найти соответствующий источник аудиоданных для своего ввода - по мере того, как указана ошибка...

Чтобы продолжить исследование проблемы, вам лучше проверить где-нибудь в вашем коде, который изменит источник звука.. и убедитесь, что источник звука активирован, прежде чем вы вызываете AVAudioSession

Я могу только зайти так далеко сейчас... Более глубокое понимание и лучшее объяснение управления аудио всегда оценено!

Ответ 2

Что касается ошибки в вашей консоли, я также могу подтвердить, что иногда получаю это сообщение при использовании моего iPhone 5S, но я никогда не видел его на своем 4S. Это может быть просто базовый звуковой дамп, но он, похоже, не влияет на фактическую производительность (по крайней мере для меня).

Что касается доступных входов, то, что вы на самом деле распечатываете, являются доступными входными портами и их описаниями. Этот бит более сбивает с толку, и я не понимаю, почему выбранное поле dataDataSource равно null для каждого из них.

Я скажу, что 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, чтобы убедиться, что в настройке предпочтительного входа нет ошибки.

Стоит отметить, что вы также можете перебирать доступные источники данных для определенного описания порта и выбирать один, используя

[port setPreferredDataSource:source error:&sourceErr];

то следуйте этому:

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

Это некоторые удобные функции iOS7, которые используют аппаратное обеспечение с несколькими встроенными мышами.