问题标签 [pjsua2]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
1001 浏览

android - PJSUA2 Android - 来电在 32 秒后掉线

我正在构建一个 PJSUA2 (PJSIP 2.8) Android 应用程序,但我遇到了一些问题:即仅在来电时,呼叫状态保持在“PJSIP_INV_STATE_CONNECTING”,32 秒后呼叫中断。

几天以来我一直在寻找问题的原因,我搜索了很多,我发现的只是:在大多数情况下,这个问题与 NAT 管理或与 NAT 相关的网络问题有关。简而言之:大多数情况下,被叫方接听电话后并没有收到ACK。最后,我能够记录我的应用程序和 SIP 服务器之间的所有 SIP 消息,并发现我的应用程序从服务器接收到 ACK,所以我认为这不是网络相关问题。

我用 OpenSSL 和 SRTP 支持编译了 PJSIP 2.8,但没有视频支持(至少目前我不需要它)。如果有任何区别,则该应用程序的目标版本为 28,最低 SDK 版本为 19。

我尝试了市场上的几个应用程序,它们在使用和不使用 SRTP 以及所有信令传输(UDP、TCP、TLS)的情况下都运行良好,WebRTC 也运行良好(使用 SipML5 测试),所以我会排除服务器配置错误。我的应用程序也是如此(目前我遇到一些问题的 SRTP 除外)。

我也尝试过使用 UDP 的 SIP 提供商(MessageNet),并且行为始终相同。我尝试使用紧凑的 SIP 消息,它的行为相同,有和没有 uri 参数,有和没有 STUN 和或 ICE,没有任何变化。移动网络和 WiFi 网络给出相同的结果。

我也尝试在 PJSIP 库中进行调试,但没有任何成功,然后我尝试按照代码进行操作,以了解我做错了什么,但在我看来并没有明显的问题。

以下是初始化 PJSIP 的代码(最新版本):

以下是我的带有创建和注册代码的 Account 类:

最后,我现在如何在扩展 PJSIP 的 Call 类的类中回答代码:

我也尝试了new CallOpParam();仅使用状态代码而没有其他任何内容,但没有任何变化。

注意事项:我将 IdUri 创建为 sip:username@127.0.0.1 因为没有主机,结果联系人是,我认为丢失的用户部分可能是问题的原因或部分原因。

以下是调用期间应用程序 <-> 我的 Asterisk 服务器通信的跟踪(由于内容长度超过而链接)。

https://gist.github.com/ivano85/a212ddc9a808f3cd991234725c2bdb45

ServerIp是互联网公网 IP,而 MyIp[5.XXX.XXX.XXX] 是我手机的公网 IP

正如您从日志中看到的那样,我的应用程序发送 100 Trying,然后在电话响铃时发送 180 Ringing,然后用户接听并且应用程序发送 200 OK。服务器回复 ACK 消息(我会说这不是 NAT 问题,因为 PJSIP 接收到 ACK)。我从 Asterisk 看到了同样的情况。

在此之后,我希望呼叫从 PJSIP_INV_STATE_CONNECTING 转到 PJSIP_INV_STATE_CONFIRMED,但它没有发生,因此 PJSIP 继续发送 200 OK 并每隔大约 2 秒接收一次 ACK,直到呼叫在 32 秒后超时并且 PJSIP 断开呼叫(发送再见)。

我开始认为 PJSIP 只是忽略了 ACK 消息并且只是有错误的行为。请帮助我了解这里发生了什么。我会非常感激!

显然,如果您认为需要更多详细信息,请告诉我。

0 投票
2 回答
1779 浏览

python - pjsip/pjsua2 - 如何获取音频流以将其发送到 Speech-to-Text 引擎

我正在尝试从呼叫音频媒体获取音频流,以便能够将其发送到 Speech-to-Text 引擎(从流输入转录音频)。关于如何实现这一目标的任何想法?

版本信息:POSIX 的 pjlib 2.8-svn

先感谢您。

0 投票
0 回答
372 浏览

android - PJSUA2:联系标头 uri 长度限制

我正在基于 PJSUA2 构建一个支持推送通知的 android VOIP 应用程序。

我需要将推送通知 (FCM) 令牌作为联系人 uri 参数发送到服务器(在我的情况下为星号),以便我可以使用来自服务器的脚本检索它并在发送来电请求之前发送通知以唤醒客户端.

我将参数放在联系人uri参数中

contactParams是一个HashMap<String, String>带参数名称和值的方法,whilebuildParams是下面的方法:

没有 FCM 参数一切正常,但是

  • 使用以下参数构建联系人 uri ;pn-provider="fcm";pn-tok="LONG FCM TOKEN" 会使呼叫在 32 秒后挂断(请参阅问题PJSUA2 Android - Incoming calls drop after 32 seconds
  • 拆除;pn-provider="fcm"工程
  • 只发送一部分令牌工作(在 pn-tok 中,连同 pn-provider 参数)

我认为这可能是“无效字符问题”,但实际上似乎是“最大长度问题”。

Contact 标头是否有 Contact 标头最大长度或 URI 最大长度?如果是,是 PJSIP 限制还是 SIP 限制?

0 投票
1 回答
90 浏览

python - 调用 Endpoint.utilAddPendingJob(job) 时遇到问题

我正在尝试从 Python 调用 PJSUA2 库,它工作正常,但我在尝试调用时遇到了障碍

这导致以下错误

TypeError:在“Endpoint_utilAddPendingJob”方法中,“pj::PendingJob *”类型的参数 2

Python代码如下:

我看到的唯一区别是这个函数在 C++ 端采用指针而不是引用。但是,通过 SWIG 手册查看这应该无关紧要。

编辑:这是 PendingJob SWIG 生成的 Python 类:

以及方法签名,再次 SWIG 生成 Python 代码:

0 投票
1 回答
442 浏览

android - 我想通过其高级 api 即 PJSUA2 使用 PJSIP 堆栈开发一个 android VOIP 应用程序

我想开发一个 Android VOIP 应用程序,为此我选择了 PJSIP 库。到目前为止,我已经搜索过这个,但所有的帮助和东西都很老,比如 3 到 4 岁。它的高级 API 是 PJSUA2 (C++),但大多数帮助和社区问题都是关于 PJSIP 基本 api(用 C 编写的)。所以我想知道是否有人对 Java 中的 PJSUA2 使用有任何了解,或者近年来是否使用 PJSUA2 开发了一个应用程序。注意:我必须在 Android Studio 中开发这个

0 投票
1 回答
207 浏览

android - 如何在pjsip Android中删除联系人中的ob参数?

在我来自使用 pjsip 堆栈的 Android 拨号器应用程序的 sip 注册消息中,似乎在联系中发送 ob 参数。如何在 Android 中删除此参数?

这是我的 Android 拨号器发送的注册消息中的联系人标题。

我从 pjsip 网站找到了这个链接,它告诉我设置

如果 pjsua_acc_config.use_rfc5626 设置为 PJ_FALSE,我们不应在 Contact 标头中添加“ob”参数。

https://trac.pjsip.org/repos/ticket/1256

但不幸的是,我在 pjsip Android 中找不到有助于在 Java 代码中进行该设置的等效项。

0 投票
1 回答
266 浏览

android - 如何在拨出电话期间播放哔声文件并传输到接收器

我们已经为调用实现了 pjsua2 库。我们在拨出电话期间播放音频时遇到了一些问题。我们还实现了运行良好的通话录音功能。我不知道如何在通话过程中播放 wav 文件,接收者也可以听到。

我们检查了 pjsua2 文件,该文件不符合标准。

请帮助我,我已经花了将近一个星期。

0 投票
1 回答
787 浏览

android - 使用 PJSUA 在 android 中记录 sip 呼叫

我正在开发一个带有内部录音的 sip 应用程序。我需要双方音频在移动设备内部成为录音机。

阅读有关相同内容的几篇博客和文章。我知道唯一的解决方案是使用 NDK。经过一番努力,我将 pjsip/pjsua2 编译并集成到我的应用程序中,客户端注册和调用都可以正常工作。但是,无法记录通话。我曾尝试过 pjsua 的 AudioMediaRecorder,但由于没有适当的文档,我什么都不懂。

@覆盖

公共无效 onCallMediaState(OnCallMediaStateParam prm)

{

}

这个 myaudiofile.wav 文件保存在哪里?我怎么才能得到它?

上面的代码产生这样的日志 -

pjsua_media.c ...调用1:更新媒体..

pjsua_media.c .....媒体流 call01:0 被销毁

pjsua_aud.c ....音频频道更新..

strm0x953fe014 .....VAD 暂时禁用

strm0x953fe014 .....编码器流开始

strm0x953fe014 .....解码器流开始

pjsua_media.c ....音频更新,流#0:PCMA (sendrecv)

我的呼叫:onCallMediaState:

pjsua_aud.c ...创建录音机 myfilename.wav..

pjsua_aud.c ....无法打开文件进行录制:只读文件系统 [status=120030]

media.cpp ...pjsua_recorder_create(&pj_name, enc_type, NULL, -1, options, &recorderId) 错误:只读文件系统 (status=120030) [../src/pjsua2/media.cpp:443]

连接媒体端口失败Title: pjsua_recorder_create(&pj_name, enc_type, NULL, -1, options, &recorderId)

代码:120030

描述:只读文件系统

位置:../src/pjsua2/media.cpp:443 15:52:01.458
pjsua_core.c ....TX 940 字节响应消息 200/INVITE/cseq=1 (tdta0x96976064) 到 UDP 218.248.233.142:5060:

0 投票
1 回答
518 浏览

android - pjsua2 示例应用程序传出呼叫通过 TCP 连接获得 403 禁止响应

我已经在 pjsua 示例应用程序中成功注册了我的 sip 客户端,并且正在通过 UDP 接收来电。但是,当我尝试拨打电话时,它会因 403 FORBIDDEN 错误而断开连接。并且创建的连接是 TCP!

我验证了目标 uri。它的格式为

sip:mobile-number@sip-server-ip:port

这是我的 makeCall 代码:

公共无效makeCall(查看视图){

呼叫活动出现。日志如下

0 投票
0 回答
72 浏览

android - 如何设置 endpt.disable_tcp_switch 配置?

我正在使用这个库;https://github.com/datso/react-native-pjsip

我收到 UDP 大小超出错误,需要禁用 tcp 开关设置。在 PJSIP 中设置这个变量 endpt.disable_tcp_switch ( https://trac.pjsip.org/repos/wiki/Using_SIP_TCP#switch )。

这个库使用 PJSUA2 (PJSIP SIP API) 但设置 PJSIP 配置。如何设置 endpt.disable_tcp_switch 配置?

谢谢。