android - Android 2.3 SIP API 如何处理 NAT?

标签 android api sip stun

一段时间以来,我一直在使用 Android 2.3 中的 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 的公共(public) IP 一。类似于 Via:SIP/2.0/UDP 192.168.0.106:53230 服务器正确回复不允许使用 RFC1918 IP。

我向 SipDemo 添加了一个 STUN 测试并成功检索了我的 公共(public) IP 和端口。但我找不到如何将它传递给我的方法 创建了 SipProfile 或 SipManager。

我的问题: 有没有人曾经制作过使用 SIP API 的应用程序? 网络转换? API 如何处理 NAT?我如何传递我得到的信息 从我自己的 STUN 客户端到 SIP API?

我知道 SipDroid 和许多其他 SIP 实现,但它们 全部不使用内置API。

最佳答案

I added a STUN test to the SipDemo and successfully retrieved my public IP and port. But I can't find a way how to pass it on to my created SipProfile or the SipManager.

如果您在对称 NAT 后面,那没关系,因为将为出站 SIP 连接创建一个新的 NAT 绑定(bind),因此您使用 STUN 收集的信息实际上没有用。

你不应该为来自 SIP API 的 NAT 而烦恼,服务器需要为你实现 NAT 穿越技术。

在某些情况下,您实际上可以从客户端执行某些操作:当使用 ICE 并且您选择自己的 TURN 服务器时,但我认为 Android 尚未实现 ICE 和 TRUN 支持。即使可以,您仍然需要部署一个 TRUN 服务器...

那里的免费服务确实实现了 NAT 穿越技术,您可以试试 http://sip2sip.info例如。

关于android - Android 2.3 SIP API 如何处理 NAT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5859111/

相关文章:

java - 制作副本后列表 <> 对象更改

java - gradle 类转换异常 : cannot cast to 'java.lang.iterable'

javascript - request.execute(function(resp){}); 是什么意思?在 JavaScript 中?

java - sipdroid - 在继续时不显示另一个来电

asterisk - 在调用文件中设置 P-Preferred-Identity

ios - 如何获取 pjsip iOS API 调用状态,如忙、响铃或不可用

android - gen 文件夹中没有 R.java - android

api - Redux 中间件,POST 请求

api - 从 Google Analytics 获取用户的营销来源

java - 在没有支持库的情况下使用 FragmentStatePagerAdapter