UAC应该如何处理SIP 183会话进程

我有以下情况:

2 UAC正试图通过远程SIP服务器(openSER / Kamailio 3.1.3)=客户端基础设施进行通话。 UAC软件是在使用Asterisk的本地testing基础架构上开发的,可以在其中build立正常的呼叫。

问题是在客户端基础设施上testing没有audio。

我不了解完整的客户端基础结构,但是从服务器(路由头字段)的日志/响应可以得出结论:有一个代理授权服务器,一个CiscoSystem SIP GW以及PSTN。 而且,不仅仅是我们在NAT后面,客户端也在NAT后面。 AFAIK没有使用STUN服务器。

呼叫stream程的主要区别在于,在testing基础架构中,我们总是收到180个消息(响铃),而在客户端基础架构中,我们收到了183个正在进行的会话。 在日志中可以看到两台设备都开始发送rtpstream,但仍然没有audio。

我也有一个商业软件,我们用这个软件testing了客户端的基础设施,它工作正常。 我们比较了商业软件发送的消息和我们的客户,几乎没有什么区别。

我能find的唯一区别是在inv / 407 / ack循环之后的消息中:

商业软件:

开始新的分支号码x

  • 发送inv + authstring – 分支/转发号码x

  • 获取响应 – 分支/转发号码x

  • 发送确认消息 – 分支/转发号码x

我们的客户:

开始新的分行号码y

  • 发送inv + authstring – 分支/转发号码

  • 获取响应 – 分支/转发号码

  • 发送确认消息 – 新鲜的分支/交易 – z

这可能是导致audio丢失的原因吗? 在Asterisk中,这种情况也可以正常工作。

(我认为涉及的实体是RFC 3261 SIP设备,并且已经忽略了与RFC 2543设备的互操作。)

如果涉及NAT,你应该首先检查的是

  • SDP有效载荷中c=头中的IP
  • 您的Contact标题中的IP

尤其是这些IP应该都可以被另一方访问。

在你的“inv / 407 / ack”后面,对非2xx应答的ACK应该有相同的branch ID。 但是,2xx响应会终止 INVITE事务,所以对2xx响应的ACK将具有与INVITE 不同的 branch

(当然, RFC 3261是SIP基础知识的权威资源,我发现RFC 3665非常有助于了解事情的工作原理。)