最近我一直在使用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。