我正在做一些基于PJSIP的软电话应用程序,遇到了这样的问题:当应用程序在VPN上运行时,我的LAN接口地址出现在会话SDP属性中,而不是SIP用来建立连接的VPN接口地址。因此,在建立连接后,B端试图将RTP数据包流传输到未知地址。当然,我可以配置PBX来处理我的应用程序,就像它在NAT之后一样,来解决这个问题。但我想知道的是:有没有什么干净方法(不像发送前修改SDP文本)在应用程序端设置RTP连接地址?因此,当应用程序通过VPN注册时,它将使用VPN网络接收的地址。
这是邀请的一部分:
INVITE sip:[email protected]:5060;transport=udp SIP/2.0
Via: SIP/2.0/UDP 10.125.1.79:61589;rport;branch=z9hG4bKPja32fd2e9e5cc426cb0b44c973b620d8b
Max-Forwards: 70
From: sip:[email protected];tag=ca6940355e7f42f29afd2aa86add5c6f
To: sip:[email protected]
Contact: <sip:[email protected]:61589;ob>
...
Content-Type: application/sdp
Content-Length: 432
...
m=audio 4000 RTP/AVP 0 9 96
c=IN IP4 192.168.1.107
b=TIAS:64000
a=rtcp:4001 IN IP4 192.168.1.107
...
在这个例子中,我的目标是在SDP部分设置10.125.1.79地址。
PJSIP如何选择媒体流接口?如何在会话期间更改RTP流对应的SDP属性?库是否提供了一些配置或功能来实现这一点?
1条答案
按热度按时间c7rzv4ha1#
我发现,将
pjsua_acc_config
结构的allow_sdp_nat_rewrite
选项设置为true可以解决我的问题。现在,它的工作如预期通过VPN网络.