C语言 如何使用PJSIP在INVITE SDP中更改RTP媒体流地址?

xpcnnkqh  于 2023-10-16  发布在  其他
关注(0)|答案(1)|浏览(190)

我正在做一些基于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属性?库是否提供了一些配置或功能来实现这一点?

c7rzv4ha

c7rzv4ha1#

我发现,将pjsua_acc_config结构的allow_sdp_nat_rewrite选项设置为true可以解决我的问题。现在,它的工作如预期通过VPN网络.

相关问题