Search code examples
python-3.xpjsua2

PJSUA2 linux segmentation fault


I using PJSUA2 to make a python3 script for calling, my script is making the registration and calling but i'm getting "zsh: segmentation fault" I wonder if anyone can help me out, here is my code.

python
import time
import pjsua2 as pj

distAddrs = "192.168.1.202"
port = 5060
ext = "101"
passwd = "123456"

# Create my endpoint
endPoint = pj.Endpoint()
endPointConfig = pj.EpConfig()
endPoint.libCreate()
endPoint.libInit(endPointConfig)

# Create SIP transport
sipTransportConfig = pj.TransportConfig()
sipTransportConfig.port = port
endPoint.transportCreate(pj.PJSIP_TRANSPORT_UDP, sipTransportConfig)

# Setting my audio device
endPoint.audDevManager().setNullDev()
for codec in endPoint.codecEnum2():
    priority = 0
    if "PCMA/8000" in codec.codecId:
        priority = 255
    endPoint.codecSetPriority(codec.codecId, priority)
    
# Start the library
endPoint.libStart()

# Subclass to extend the Call and get notifications etc.

class Call(pj.Call):
    def onRegState(self, prm):
        print("***onRegState == " + prm.reason)

# pjsua2 registration and calling function
def pbxReg(distAddrs, ext, passwd):
    accountConfig = pj.AccountConfig()
    accountConfig.idUri = "sip:%s@%s" % (ext,distAddrs,)
    accountConfig.regConfig.registrarUri = "sip:%s" % (distAddrs,)
    credentials = pj.AuthCredInfo("digest","*",ext,0,passwd,)
    accountConfig.sipConfig.authCreds.append(credentials)

# Creating the account

    account = pj.Account()
    account.create(accountConfig)
    time.sleep(1)
    if account.getInfo().regIsActive == True:
        call = Call(account)
        prm = pj.CallOpParam(True)
        prm.opt.audioCount = 1
        prm.opt.videoCount = 0
        call.makeCall("sip:[email protected]", prm)
        time.sleep(1)
        prm = pj.CallOpParam()
        call.hangup(prm)
        endPoint.hangupAllCalls()


# Destroy the library
def libDestroy():
    endPoint.libDestroy()   

def main():
    pbxReg(distAddrs, ext, passwd)
    libDestroy()

main()



Solution

  • The first obvious thing I can see is that you are using time.sleep(1) instead of endPoint.libHandleEvents(1000) which was an issue for me.

    # your code
    time.sleep(1)
    
    # possible fix
    endPoint.libHandleEvents(1000)