为android设计pjsip的apjsua示例应用程序

man*_*ngh 2 android voip sip pjsip android-ndk

我已经关注了PJSIP教程,并且我已经成功构建了apjsua示例应用程序.

当我尝试通过+ a添加帐户时,它会向我询问Sip Url,注册商网址,Auth Realm,用户名,密码

我进入了

  • Sip Url:sip:140@122.252.232.5
  • 注册员:sip:122.252.232.5
  • Auth Realm:*
  • 用户名:1​​40
  • 密码:例子

之后它给了我以下错误

    10-17 19:57:27.165: I/apjsua(920): 19:57:27.165  sip_resolve.c  ...Failed to resolve '122.252.232.532.5'. Err=70018 (gethostbyname() has returned error (PJ_ERESOLVE))
10-17 19:57:27.174: I/apjsua(920): 19:57:27.174    tsx0x223a5c  ...Failed to send Request msg REGISTER/cseq=54907 (tdta0x1eb9a0)! err=70018 (gethostbyname() has returned error (PJ_ERESOLVE))
10-17 19:57:27.185: I/apjsua(920): 19:57:27.185    pjsua_acc.c  .....SIP registration failed, status=502 (gethostbyname() has returned error (PJ_ERESOLVE))
10-17 19:57:27.199: I/apjsua(920): 19:57:27.199    pjsua_acc.c  .....Scheduling re-registration retry for acc 2 in 6 seconds..
10-17 19:57:27.212: I/apjsua(920): 19:57:27.212      sip_reg.c  ..Error sending request, status=70018
10-17 19:57:27.226: I/apjsua(920): 19:57:27.226    pjsua_acc.c  ..Unable to create/send REGISTER: gethostbyname() has returned error (PJ_ERESOLVE) [status=70018]
Run Code Online (Sandbox Code Playgroud)

有没有人知道我哪里出错了???

或者有没有人知道任何其他方式使用pjsip库为Android ???

Hou*_*ton 10

你很幸运.我几天前就遇到了这个问题,它只是一个简单的初始化错误.您应该真正掌握调试c代码,否则您将很难理解pjsip堆栈.无论如何这是你做的:

使/pjsip-apps/src/pjsua/main_android.c下的"setInput"方法如下所示:

void setInput(char *s)
{
  int i = 0;

  for (i = 0; i < sizeof(app_var.line); i++)
  {
      app_var.line[i]=NULL;
  }

  /* app_var.line[0] = 0; */

  if (strlen(s) < sizeof(app_var.line))
      strncpy(app_var.line, s, strlen(s));
  pj_sem_post(app_var.input_sem);
}
Run Code Online (Sandbox Code Playgroud)

查看代码更改,您应该能够看到app_var.line char变量未正确清除.现在转到/ pjsip-apps/build /文件夹并执行"make".然后转到/ pjsip-apps/src/apjsua /文件夹并执行"make".然后刷新你的eclipse项目并运行.这应该够了吧.

  • 是的我想我知道你的意思......我确实在启动时看到了"0xdeadbaad的致命信号11(SIGSEGV)"错误几次.该应用程序正在引用未使用的内存位置.我认为PJSIP应该在任何事情完成之前启动所以我在"ApjsuaActivity.java"文件中的"onCreate"方法的末尾更改了代码,如下所示:PjsuaThread.finished = false; PjsuaThread pjsuaThread = new PjsuaThread(); pjsuaThread.start(); TextOutTask outTask = new TextOutTask(); outTask.tv = tv; outTask.execute(); 它似乎有所作为.. (3认同)
  • 我认为编辑帖子不是一个更好的主意...所以我在这里写...这是我注册的主题:Thread mythread = new Thread(){@Override public void run(){super.run(); for(int i = 0; i <commands.length; i ++){try {Thread.sleep(500); } catch(InterruptedException e){} pjsua_app.setInput(commands [i]); }}; mythread.start(); (2认同)