Android 2.3 SIP API如何处理NAT?

4

最近我一直在使用Android 2.3 SDK中的SipDemo进行尝试。

Android开发者页面上的文档写得很好,但内容不多。它没有解释关于IP、端口、NAT和STUN的任何内容。我知道这些东西应该如何工作,但它并没有说明Android的SIP API如何处理它们,或者它是否处理NAT...

在这里,有人提到API确实会对公共IP和端口进行一些测试,但这是我第一次听说: http://code.google.com/p/android/issues/detail?id=14043&can=1&q=sip%20ip&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars 所以我不确定这是真的。至少对我来说,它没有起作用。

但现在来谈谈我的问题: 当我将SipDemo原样部署到连接WiFi的设备或模拟器上,并提供我的凭据(我知道它们可以与SipDroid和其他SIP应用程序一起使用),SipDemo会显示“注册失败”。 我进行了一些嗅探,并发现发送到SipServer的数据包都包含设备或模拟器的本地IP,而不是我的NAT的公共IP。类似于Via: SIP/2.0/UDP 192.168.0.106:53230 服务器正确地回复RFC1918 IP不被允许。

我在SipDemo中添加了一个STUN测试,并成功地检索到了我的公共IP和端口。但我找不到一种方法将其传递给我的创建的SipProfile或SipManager。

我的问题: 有人曾经制作过在NAT后面使用SIP API的应用程序吗? API如何处理NAT?我如何将自己的STUN客户端获得的信息传递给SIP API?

我知道SipDroid和许多其他SIP实现,但它们都没有使用内置的API。

1个回答

0
我在SipDemo中添加了一个STUN测试,并成功地检索到了我的公共IP和端口。但我找不到一种方法将其传递给我的创建的SipProfile或SipManager。
如果您在对称NAT后面,那么这并不重要,因为会为出站SIP连接创建新的NAT绑定,因此您使用STUN收集的信息实际上无法使用。
您不应该从SIP API中担心NAT,服务器需要为您实现NAT穿越技术。
有些情况下,您实际上可以从客户端做一些事情:当使用ICE并选择自己的TURN服务器时,但我不认为Android已经实现了ICE和TRUN支持。即使它会,您仍然需要部署TRUN服务器...
免费服务实际上实现了NAT穿越技术,例如您可以尝试http://sip2sip.info

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接