Я пытался получить устройства от pjsua2, я получил все устройства, но не получил разделение на устройства захвата и воспроизведения.
void AudioController::load(){
Endpoint ep;
ep.libCreate();
// Initialize endpoint
EpConfig ep_cfg;
ep.libInit( ep_cfg );
AudDevManager &manager = ep.audDevManager();
manager.refreshDevs();
this->input.clear();
const AudioDevInfoVector &list = manager.enumDev();
for(unsigned int i = 0;list.size() != i;i++){
AudioDevInfo * info = list[i];
GtAudioDevice * a = new GtAudioDevice();
a->name = info->name.c_str();
a->deviceId = i;
qDebug() << info->name.c_str();
qDebug() << info->driver.c_str();
qDebug() << info->caps;
this->input.append(a);
}
ep.libDestroy();
}
Это мой вывод:
Wave mapper
WMME
23
Microfone (Dispositivo de High
WMME
3
Alto-falantes (Dispositivo de H
WMME
21
Вы можете проверить поля inputCount
а также outputCount
внутри AudioDevInfo
,
По документации:
неподписанный inputCount
Максимальное количество входных каналов, поддерживаемых этим устройством. Если
значение равно нулю, устройство не поддерживает операцию ввода (т.е. это
устройство только для воспроизведения).
А также
неподписанный outputCount
Максимальное количество выходных каналов, поддерживаемых этим устройством. Если
значение равно нулю, устройство не поддерживает операцию вывода (т.е. Это
устройство только для ввода).
Так что вы можете сделать что-то вроде этого:
for(unsigned int i = 0;list.size() != i;i++){
AudioDevInfo * info = list[i];
GtAudioDevice * a = new GtAudioDevice();
a->name = info->name.c_str();
a->deviceId = i;
if (info->inputCount > 0) {
a->captureDevice = true;
}
if (info->outputCount > 0) {
a->playbackDevice = true;
}
this->input.append(a);
}
Ссылка: http://www.pjsip.org/pjsip/docs/html/structpj_1_1AudioDevInfo.htm
Других решений пока нет …