【发布时间】:2020-05-27 14:25:33
【问题描述】:
我正在开发一些基于 PJSIP 的软件电话应用程序,但遇到了这样的问题: 当应用程序通过 VPN 运行时,我的 LAN 接口地址出现在会话 SDP 属性中,而不是 SIP 用来建立连接的 VPN 接口地址。因此,在建立连接后,B 方试图将 RTP 数据包流式传输到未知地址。 当然,我可以配置 PBX 来处理我的应用程序,就像它在 NAT 之后一样,以解决这个问题。但我想知道的是:有没有什么干净的方法(不像在发送前修改 SDP 文本)在应用程序端设置 RTP 连接地址?因此,当应用程序通过 VPN 注册时,它将使用 VPN 网络接收到的地址。
这是邀请的一部分:
INVITE sip:someoneB@10.125.1.150:5060;transport=udp SIP/2.0
Via: SIP/2.0/UDP 10.125.1.79:61589;rport;branch=z9hG4bKPja32fd2e9e5cc426cb0b44c973b620d8b
Max-Forwards: 70
From: sip:someoneA@10.125.1.150;tag=ca6940355e7f42f29afd2aa86add5c6f
To: sip:someoneB@10.125.1.150
Contact: <sip:someoneA@10.125.1.79: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 属性?库是否提供了一些配置或功能来实现这一点?
【问题讨论】: