Как избежать тупика с PJSUA2? - PullRequest
0 голосов
/ 26 мая 2019

Я хотел бы создать консольный программный клиент, построенный на PJSUA2 API в Python.

У меня проблема с тупиком, когда я пытаюсь ответить на входящий вызов.

def onIncomingCall(self, prm):
    c = Call(self, call_id=prm.callId)
    call_prm = pj.CallOpParam()
    call_prm.statusCode = 180
    c.answer(call_prm)

В этомcase c.answer (call_prm) никогда не отправит ответное сообщение «180».

def onIncomingCall(self, prm):
    c = Call(self, call_id=prm.callId)
    call_prm = pj.CallOpParam()
    call_prm.statusCode = 180
    c.answer(call_prm)
    raise Exception('test')

Если код был расширен на Exception, то c.answer отправит ответное сообщение «180».

Согласно этому руководству проблема в тупике.Блокировка находится в главном потоке, и поэтому фоновый работник не может завершить вызов функции ответа.

Как снять блокировку обратно в фоновый рабочий поток и после ответа на вызов?

Конечная точка запускается со следующими настройками:

ep_cfg.uaConfig.threadCnt = 1
ep_cfg.uaConfig.mainThreadOnly = False
...