一段时间以来,我一直在使用 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。