我在android上为pjsip构建最新的主干并获得了眩晕错误:
12-10 00:19:25.340 21917-21917/I/pjsua﹕ pjsua version 2.1-svn for Linux-3.0.15/armv7l initialized
12-10 00:19:25.345 21917-21917/I/pjsua﹕ PJSUA state changed: CREATED --> INIT
12-10 00:19:25.345 21917-21917/I/pjsua﹕ Module "mod-default-handler" registered
12-10 00:19:25.365 21917-21917/I/pjsua﹕ STUN mapped address found/changed: ip1:40865
12-10 00:19:25.365 21917-21917/I/pjsua﹕ STUN resolution success, using ip1:3480, address is ip2:3480
12-10 00:19:27.380 21917-21917/I/pjsua﹕ Error contacting STUN server: Received no response from STUN server (PJLIB_UTIL_ESTUNNOTRESPOND) [status=320010]
12-10 00:19:27.380 21917-21917/I/pjsua﹕ Shutting down, flags=0...
12-10 00:19:27.380 21917-21917/I/pjsua﹕ PJSUA state changed: INIT --> CLOSING
相同的stun配置使用相同的代码(在iOS和旧的pjsip中继上)正常工作:
my_config-> cfg.stun_srv_cnt = 3;
const char *stun = "ip1:3480";
if (stun && strlen(stun)) pj_strdup2_with_null(my_config->pool,&(my_config->cfg.stun_srv[0]),stun);
const char *stun1 = "ip2:3480";
if (stun1 && strlen(stun1)) pj_strdup2_with_null(my_config->pool,&(my_config->cfg.stun_srv[1]),stun1);
const char *stun2 = "ip3:3480";
if (stun2 && strlen(stun2)) pj_strdup2_with_null(my_config->pool,&(my_config->cfg.stun_srv[2]),stun2);
ip1-3是我的ip地址,如1.1.1.1
对我来说看起来很奇怪两件事: 1.根据日志,stun服务器被发现ip地址,但随后因不明原因开始重新找到 2.为什么pjsip lib不会尝试下一个服务器,而只是停止库。
我尝试做my_config-> cfg.stun_ignore_failure = PJ_TRUE; 但没有成功......
答案 0 :(得分:1)
Index: pjsip/sources/pjsip/src/pjsua-lib/pjsua_core.c
===================================================================
--- pjsip.orig/sources/pjsip/src/pjsua-lib/pjsua_core.c 2013-03-31 19:06:27.202008510 +0200
+++ pjsip/sources/pjsip/src/pjsua-lib/pjsua_core.c 2013-03-31 19:06:31.322008598 +0200
@@ -1954,7 +1954,7 @@
pj_ntohs(pjsua_var.stun_srv.ipv4.sin_port);
status = pjstun_get_mapped_addr2(&pjsua_var.cp.factory, &stun_opt,
1, &sock, &p_pub_addr->ipv4);
- if (status != PJ_SUCCESS) {
+ if (status != PJ_SUCCESS && !pjsua_var.ua_cfg.stun_ignore_failure) {
pjsua_perror(THIS_FILE, "Error contacting STUN server", status);
pj_sock_close(sock);
return status;
感谢来自csipsimple的Regis ......