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。

4

1 回答 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

于 2011-10-13T08:56:54.910 回答