如何使用PJSIP更改INVITE SDP中的RTP媒体流地址?

问题描述 投票:0回答:1

我正在开发一些基于PJSIP的软件电话应用程序,并且遇到了这样的问题:当应用程序通过VPN运行时,我的LAN接口地址出现在会话SDP属性中,而不是SIP用于建立连接的VPN接口地址。结果,在建立连接之后,B侧正尝试将RTP数据包流式传输到未知地址。当然,我可以配置PBX来像对待NAT一样处理我的应用程序,以解决该问题。但是我想知道的是:有什么干净的方法(不同于发送前修改SDP文本)在应用程序端设置RTP连接地址吗?因此,当应用程序通过VPN注册时,它将使用VPN网络接收的地址。

这是INVITE的一部分:

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属性?库是否提供一些配置或功能来实现此目的?

c++ c voip pjsip
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.