しばらくの間、私は 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 アプリで動作することはわかっています)。スニッフィングを行ったところ、SipServer に送信されたパケットにはすべて、NAT のパブリック IP ではなく、デバイスまたはエミュレーターのローカル 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 を使用していません。