【问题标题】:PJSip in android [closed]android中的PJSip [关闭]
【发布时间】:2020-12-29 04:22:55
【问题描述】:

我正在尝试使用pjsip 为Android 构建Sip client,例如CSipSimple 项目。但是,我实际上对pjsip 了解不多。有没有人有关于 pjsip 的教程或类似的东西来使用 PJsip lib 在android中构建Sip softphone? 欢迎提出任何建议!

【问题讨论】:

  • 有教程吗。遗憾的是我不能使用本机 SIP API。有什么建议从哪里开始?

标签: android pjsip


【解决方案1】:

您不必使用第三方库在 Android 中构建 SIP 客户端功能。 Android 包含一个成熟的SIP API。您可以查看SIP demo,了解如何使用 SIP API 实现步话机类型。

【讨论】:

  • 请注意,这会将您的应用程序限制为 Android 2.3 (API Level 9) 及更高版本,但我猜这大概是用户群的 75%
  • 根据Platform Versions 上的 Play 商店统计数据,您的猜测是正确的(截至本评论当天)
  • 这也将您的应用程序限制为仅限 wi-fi,这没有用....您知道除了 apjsua 之外的任何其他使用 pjsip 的方法,因为 apjsua 不工作,我花了几天时间.....
  • 我听说过关于CSipSimple 的好消息。你可以去看看。
  • 我已经成功构建了 CSipSimple,但是更改 UI 并使其按照您的方式运行非常具有挑战性,并且在使用他们的代码时可能存在一些法律问题。这就是为什么我想要一个基本的演示,比如 pjsip 提供的 apjsua,但它在注册时给了我错误。如果你曾经在 pjsip 上工作过,那么这对我来说将是一个很大的帮助。
【解决方案2】:

我不会推荐 Android 默认 sip 堆栈来构建软件电话。我犯了同样的错误并且有很多问题。我在使用 android 默认 sip 堆栈时遇到的一些缺点

  1. 不支持 Dtmf 音调

    • 不支持视频通话
  2. -它支持相当有限的android版本,它不会支持旧版本的android,特别是那些非标准的 那些便宜的平板电脑上都有安卓版本。

所以在浪费了大约一个月之后,我再次使用 pjsip 开发了整个应用程序。它不像 android sip stack 那样简单,但值得它的功能

【讨论】:

    【解决方案3】:

    接受的答案并不完全准确。 Android SIP API 中缺少许多理想的功能,您可能希望通过 3rd-party 库来实现。

    关于前面提到的 pjsip,我已经花费了大量时间来试验 pjsip 的 Android 版本,而真正让可靠的即时注册按照记录工作的唯一方法是构建 OpenSSL 1.0.2a 库并在配置时传递它。然后在 Java 中,您需要尝试(但失败)启用 TLS 通信,就像您看到它们对 UDP 和 TCP 所做的那样。这就是我的意思:

      /* Create transports. */
      try { transports.add( ep.transportCreate(pjsip_transport_type_e.PJSIP_TRANSPORT_TLS, transportConfig) ); }
      catch (Throwable t2) { SipManager.log().e(t2); }
    
      try { transports.add( ep.transportCreate(pjsip_transport_type_e.PJSIP_TRANSPORT_UDP, transportConfig) ); }
      catch (Throwable t) { SipManager.log().e(t); }
    
      try { transports.add( ep.transportCreate(pjsip_transport_type_e.PJSIP_TRANSPORT_TCP, transportConfig) ); }
      catch (Throwable t) { SipManager.log().e(t); }
    

    SipManager.log() 调用替换为您自己的应用程序。

    我不完全确定为什么,但这对我来说是必要的。否则,注册过程是半不确定的,即在几次失败后它会工作,或者失败 5 分钟然后突然成功等等。第一次注册后似乎会感到困惑。

    这是我的配置方式:

    TARGET_ABI=arm64-v8a ./configure-android --use-ndk-cflags --with-ssl=`pwd`/../3rd-party/openssl-1.0.2a
    

    那是在关注proper Android instructions 之后,将 OpenSSL 压缩包解压到 pjsip ../3rd-party/ 上方的文件夹中并首先在那里构建。我在previous post 中详细描述了该过程。

    【讨论】:

      【解决方案4】:

      我不会将 Android 内置 Sipstack Api 作为第一个选项。它缺乏许多基本的调用功能,并且不支持许多 Android 设备。 我宁愿建议将 PJSip 用于生产。

      【讨论】:

        【解决方案5】:

        如果您只想开发 sip 客户端,则可以使用 android 的 sip API,但如上面的答案所述,它会限制您的应用功能。 但是,如果您想在您的应用程序中开发聊天或呼叫功能,那么您可以使用 pjsip,它提供了许多丰富的功能。 android搭建pjsip可以参考here(android),ios可以参考here(ios)。 基本上,pjsip 为您提供了许多具有丰富功能的 API,您可以根据您的要求使用它们,例如 pjlib、pjsip、PJ 媒体、pjsua 等。pjsua(或 android 的 pjsua2)是更高级别的 API,可帮助您以最小的复杂性提取最大的输出.你可以直接看here.你可以从here了解pjsua。他们还提供了一个演示应用程序(pjsua CLI)Pjsua CLI 及其源代码,这将帮助您了解使用 pjsip 构建具有聊天和呼叫功能的应用程序的基本结构。

        对于 Android,您可以在 github 查看演示应用程序。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-14
          相关资源
          最近更新 更多