Я обновляю существующее приложение iOS VOIP для использования CallKit с PJSIP 2.6 и PJSUA2.
После некоторых усилий реализация CallKit работает, как и ожидалось. Входящие вызовы могут быть приняты или отклонены, и если они будут приняты, они будут связаны и контролироваться с помощью встроенного в приложение активного контроллера просмотра вызовов.
Однако звук, похоже, не подключен должным образом на конце pjsip. Нет звука, входящего или исходящего от удаленного вызывающего абонента. Звук микрофона, кажется, направляется обратно на динамик iPhone.
Аудиопорты SIP должны подключаться в функции обратного вызова onCallMediaState:
виртуальная пустота onCallMediaState(OnCallMediaStateParam &prm) {
CallInfo ci = getInfo();
AudioMedia* audio_media = 0;
for (unsigned i = 0; i < ci.media.size(); i++) {
if (ci.media[i].type==PJMEDIA_TYPE_AUDIO && ( ci.media[i].status == PJSUA_CALL_MEDIA_ACTIVE ||
ci.media[i].status ==PJSUA_CALL_MEDIA_REMOTE_HOLD)) {
try {
audio_media = static_cast<AudioMedia*>(getMedia(i));
if(audio_media != 0)
{
Endpoint::instance().audDevManager().getCaptureDevMedia().startTransmit(*audio_media);
audio_media->startTransmit(Endpoint::instance().audDevManager().getPlaybackDevMedia());
}
} catch (std::exception ex) {
continue;
}
}
}
}
Как описано в билете № 1941 по адресу: https://trac.pjsip.org/repos/ticket/1941:
Я установил аудиоустройства, используя:
ep->audDevManager().setNullDev();
сразу после инициализации класса Endpoint (ep->libInit(epConfig);
), а затем:
- Я пытаюсь настроить устройства с помощью pjsua_set_snd_dev() в функции didActivate CXProvider, например:
-(void) setSipSoundDevices {
pj_status_t status;
int captDev, playDev;
pjsua_get_snd_dev(&captDev, &playDev);
Endpoint::instance().audDevManager().setPlaybackDev(playDev);
Endpoint::instance().audDevManager().setCaptureDev(captDev);
}
pjsua_get_snd_dev(&captDev, &playDev) возвращает -99, -99 и звук не подключается.
Мой вопрос заключается в следующем. Как правильно подключить удаленные источники звука или порты при входящем вызове с помощью PJSIP 2.6 и CallKit?
Может ли 2.5.5 работать лучше в этом отношении?
Любые идеи приветствуются.