0

我正在尝试用 pjsua 编写软件电话应用程序。一切正常,声音是双向传输的,当我在同一个本地网络 - 192.168.10.XXX 中使用 Asterisk 和软电话时,但是当我将软电话隐藏在 NAT 后面时,我听不到任何传入声音,传出声音正常。

我的应用程序的端点有 ip:192.168.12.233,路由器公共地址是 192.168.10.216,Asterisk - 192.168.10.15。路由器上的端口转换配置为转发 SIP 的 5060 端口和 RTP 的 4000-5000 端口。我尝试在 pjsua 配置中设置 ip public 地址,但没有效果。

这是来自我的应用程序的 INVITE SIP 消息,我认为问题在于包含错误 IP 地址的 SDP 'c' 字段。您知道如何在 pjsua 中更改它或如何解决该声音问题吗?也许我应该在 Asterisk 配置中改变一些东西?

INVITE sip:112@192.168.10.15 SIP/2.0
Via: SIP/2.0/UDP 192.168.10.216:40173;rport;branch=z9hG4bKPj1cb51c72-d924-4f3e-9075-6fa17e39b3be
Max-Forwards: 70
From: sip:500@192.168.10.15;tag=c80893bb-4b11-4def-b0e9-59bb82b88630
To: sip:112@192.168.10.15
Contact: <sip:500@192.168.10.216:40173;ob>
Call-ID: cc07dcae-1f51-4fd9-b3b0-508da40b2752
CSeq: 11230 INVITE
Allow: PRACK, INVITE, ACK, BYE, CANCEL, UPDATE, INFO, SUBSCRIBE, NOTIFY, REFER, MESSAGE, OPTIONS
Supported: replaces, 100rel, timer, norefersub
Session-Expires: 1800
Min-SE: 90
User-Agent: GMIDFOO00
Content-Type: application/sdp
Content-Length:   350

v=0
o=- 3787399917 3787399917 IN IP4 192.168.12.233
s=pjmedia
b=AS:84
t=0 0
a=X-nat:0 Unknown
m=audio 4000 RTP/AVP 9 8 96
c=IN IP4 192.168.12.233
b=TIAS:64000
a=rtcp:4001 IN IP4 192.168.12.233
a=sendrecv
a=rtpmap:9 G722/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:96 telephone-event/8000
a=fmtp:96 0-16
a=ssrc:938347045 cname:56c230b34489dbbe
4

3 回答 3

0

allow_sdp_nat_rewrite这里的结构设置pjsua_acc_config应该足够了(链接)。

于 2021-02-17T18:06:12.477 回答
0

您在 SDP 有效负载中发送私有 IP 以解决此问题您需要使用 STUN 或 ICE 服务器请在 pjsip App 端启用 ICE 或 stun 服务器

192.168.12.233公网 IP 通常由 ICE 或 STUN 服务器完成。它必须是可公开访问的 IP 地址

于 2020-12-09T10:13:59.307 回答
0

通常在 Asterisk PJSIP 中它可能由于两件事而发生。

编解码器支持

一是编解码器支持,确保您已指定要使用的编解码器,并且双方至少可以在可用的编解码器上进行通信。您可以通过运行以下命令检查此问题,我没有看到任何错误,但您可以尝试以下命令检查 RTP 通信

rtp set debug on

现在您将列出大量信息,检查双方正在通信或只有一方正在移动数据包。如果有问题,那是由于防火墙。确保您在防火墙中允许以下端口

 TCP/UDP 5060 and UDP 10000-25000
于 2020-01-09T07:01:06.447 回答