【问题标题】:How to change RTP media stream address in INVITE SDP using PJSIP?如何使用 PJSIP 更改 INVITE SDP 中的 RTP 媒体流地址?
【发布时间】: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 属性?库是否提供了一些配置或功能来实现这一点?

【问题讨论】:

    标签: c++ c voip pjsip


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2023-03-23
      • 2014-09-27
      • 2018-06-09
      • 2010-11-20
      • 1970-01-01
      • 2017-08-11
      • 2013-12-30
      • 2016-03-05
      相关资源
      最近更新 更多