#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 показывает, что порт назначения недоступен.
Кто-нибудь может сказать мне, в чем возможная проблема? И если это возможно, может ли кто-нибудь рассказать мне о рабочем процессе pjsip, использующего учетную запись без пользователя для совершения и приема звонков? Я застрял на этой проблеме несколько дней, но не имею ни малейшего понятия, как ее решить.
Кстати, код отлично работает, когда вы входите в систему с зарегистрированной учетной записью sip. Код назывался PjsipGo, и я пытался связаться с автором, но от него не было ответа.
Комментарии:
1. Оказывается, в функции createGuest () существовала неправильная строка кода. Во время подключения гостевой учетной записи к конечной точке проверяется значение proxyUri. Поскольку учетная запись гостя не содержит данных proxyUri, возникла ошибка. Я отправил проблему автору кода.