Я запускаю тест библиотеки pjsua (pjsip) для Python. Пример кода ниже.
Это особенное, потому что pjsip написан на C, а swig использовался для создания интерфейса.
Объект pj.Endpoint () важен, но на него нет ссылок другим кодом в Python. Тем не менее, разница в том, где я вызываю функцию _EndPoint,
. Если _EndPoint вызывается внутри pjsua2_test, то вызывается обратный вызов onRegState. Но если _EndPoint выполняется снаружи, то обратный вызов не вызывается.
В обоих случаях поток SIP выглядит правильным, хотя и не идентичным. Если _EndPoint вызывается внутри pjsua2_test, некоторые сообщения в потоке повторяются, что является законным.
Это какая-то особенность Python, которую я пропустил? Это особенность глотка? или это стек pjsip?
import time
import pjsua2 as pj
from pjsua2 import Account
# Subclass to extend the Account and get notifications etc.
class myAccount(Account):
def onRegState(self, prm):
print ("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX***OnRegState: " + prm.reason)
def _EndPoint():
# Create and initialize the library
ep_cfg = pj.EpConfig()
ep_cfg.uaConfig.threadCnt = 0
ep = pj.Endpoint()
ep.libCreate()
ep.libInit(ep_cfg)
# Create SIP transport. Error handling sample is shown
sipTpConfig = pj.TransportConfig();
sipTpConfig.port = 5060;
ep.transportCreate(pj.PJSIP_TRANSPORT_UDP, sipTpConfig);
# Start the library
ep.libStart();
return ep
e = _EndPoint() # outside pjsua2_test
def pjsua2_test():
e = _EndPoint() # inside pjsua2_test
acfg = pj.AccountConfig();
acfg.idUri = "sip:test@pjsip.org";
acfg.regConfig.registrarUri = "sip:pjsip.org";
acfg.idUri = "sip:u1@192.168.2.9:5069";
acfg.regConfig.registrarUri = "sip:192.168.2.9:5069";
cred = pj.AuthCredInfo("digest", "*", "test", 0, "pwtest");
acfg.sipConfig.authCreds.append( cred );
# Create the account
acc = myAccount();
acc.create(acfg);
# Here we don't have anything else to do..
time.sleep(10);
if __name__ == "__main__":
pjsua2_test()
РЕДАКТИРОВАТЬ:
Я нашел решение, запустив pjsua2_test в потоке и нажав на очередь для получения инструкций. Очевидно, я нахожу это решение громоздким.