首页 > 解决方案 > 在带有 PJSIP Android 库的 Android 6.0 上的 pjsip 中使用无用户帐户时出现问题

问题描述

我目前正在开发一个需要创建对等 sip 客户端进行测试的项目。我找到了一个名为 PJSIP Android 的库,它将 pjsip 包装为在 Android 上运行的服务。

我的问题是我创建的无用户帐户无法拨打任何电话,也无法接收来自同一网络中另一个 sip 客户端的任何来电。

正如 pjsip 文档中的描述,我已经在没有注册的情况下声明了该帐户。在我使用 createGuest() 作为默认帐户创建了一个无用户帐户 (sipUri = "sip:10.0.1.101") 后,它成功地附加到了 SIP 堆栈,一切似乎都很好。

08-04 20:37:54.160 30848-30886/com.example.pjsipgo D/SipService: PJSIP started!
08-04 20:37:54.169 30848-30848/com.example.pjsipgo D/SipServiceBR: SIP service stack started
08-04 20:37:54.178 30848-30886/com.example.pjsipgo D/SipService: SIP account sip:10.0.1.101 successfully added
08-04 20:37:54.178 30848-30886/com.example.pjsipgo D/SipService: SipService created!
08-04 20:37:54.178 30848-30886/com.example.pjsipgo D/SipService: Reconfiguring sip:10.0.1.101
08-04 20:37:54.178 30848-30886/com.example.pjsipgo D/SipService: Removing SIP account sip:10.0.1.101
08-04 20:37:54.178 30848-30886/com.example.pjsipgo D/SipService: SIP account sip:10.0.1.101 successfully removed
08-04 20:37:54.179 30848-30886/com.example.pjsipgo D/SipService: SIP account sip:10.0.1.101 successfully added

但是,当我尝试拨打电话时,错误弹出如下:

08-04 20:41:57.571 30848-30886/com.example.pjsipgo D/SipService: Making call to Shin@10.0.1.7
08-04 20:41:57.571 30848-30886/com.example.pjsipgo I/SipService: handleMakeCall  accountID: sip:10.0.1.101
08-04 20:41:57.670 30848-30886/com.example.pjsipgo W/AudioTrack: AUDIO_OUTPUT_FLAG_FAST denied by client; transfer 1, track 16000 Hz, output 48000 Hz
08-04 20:41:57.673 30848-30886/com.example.pjsipgo W/AudioRecord: AUDIO_INPUT_FLAG_FAST denied by client; transfer 1, track 16000 Hz, primary 48000 Hz
08-04 20:41:58.174 30848-30848/com.example.pjsipgo D/SipServiceBR: onCallState - accountID: sip:10.0.1.101, callID: 0, callStateCode: PJSIP_INV_STATE_DISCONNECTED, callStatusCode: PJSIP_SC_BAD_GATEWAY, connectTimestamp: 0, isLocalHold: false, isLocalMute: false, isLocalVideoMute: false
08-04 20:41:58.176 30848-30886/com.example.pjsipgo E/SipAccount: Error while making outgoing call
    java.lang.Exception: Title:       pjsua_call_make_call(acc.getId(), &pj_dst_uri, param.p_opt, this, param.p_msg_data, &id)
    Code:        70018
    Description: gethostbyname() has returned error (PJ_ERESOLVE)
    Location:    ../src/pjsua2/call.cpp:490
    
        at org.pjsip.pjsua2.pjsua2JNI.Call_makeCall(Native Method)
        at org.pjsip.pjsua2.Call.makeCall(Call.java:107)
        at net.gotev.sipservice.SipCall.makeCall(SipCall.java:409)
        at net.gotev.sipservice.SipAccount.addOutgoingCall(SipAccount.java:98)
        at net.gotev.sipservice.SipService.handleMakeCall(SipService.java:477)
        at net.gotev.sipservice.SipService.access$900(SipService.java:40)
        at net.gotev.sipservice.SipService$2.run(SipService.java:101)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:148)
        at android.os.HandlerThread.run(HandlerThread.java:61)

用调试模式跟踪错误,我没有发现输入到pjsua2JNI.Call_makeCall()中的数据有任何问题。

此外,当我使用另一个 sip 客户端拨打无用户帐户时,Wireshark 显示目标端口无法访问。

来自 Wireshark 的屏幕截图

谁能告诉我可能的问题是什么?如果可能的话,谁能告诉我 pjsip 使用无用户帐户拨打和接听电话的工作流程?我已经在这个问题上停留了几天,但一直没有解决它的线索。

顺便说一句,使用注册的 sip 帐户登录时,代码运行良好。该代码名为 PjsipGo,我试图联系作者,但没有得到他的回复。

标签: javaandroid

解决方案


推荐阅读