Проблема при использовании учетной записи без пользователя в pjsip на Android 6.0 с библиотекой Android PJSIP

#java #android

Вопрос:

В настоящее время я работаю над проектом, которому необходимо создать одноранговый sip-клиент для тестирования. Я нашел библиотеку под названием PJSIP Android, и она обернула pjsip как службу, работающую на Android.

Моя проблема в том, что учетная запись без пользователя, которую я создал, не могла совершать звонки и принимать входящие звонки от другого sip-клиента в той же сети.

Как следует из описания в документе pjsip, я зарегистрировал учетную запись без регистрации. После того, как я создал учетную запись без пользователя (sipUri = «sip:10.0.1.101»), используя createGuest() в качестве учетной записи по умолчанию, она успешно подключилась к стеку 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(), amp;pj_dst_uri, param.p_opt, this, param.p_msg_data, amp;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, и я пытался связаться с автором, но от него не было ответа.

Комментарии:

1. Оказывается, в функции createGuest () существовала неправильная строка кода. Во время подключения гостевой учетной записи к конечной точке проверяется значение proxyUri. Поскольку учетная запись гостя не содержит данных proxyUri, возникла ошибка. Я отправил проблему автору кода.