Как можно получить только устройство для захвата или воспроизведения с помощью pjsua2

Я пытался получить устройства от 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

3

Решение

Вы можете проверить поля 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

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]