SIPのレジストレーションについて

463 views
Skip to first unread message

Kyash

unread,
Nov 26, 2013, 9:21:06 PM11/26/13
to android-g...@googlegroups.com
いつもお世話になっています,Kyashと申します.

SIPを使ったIP電話のアプリ開発を勉強しています.

現在,SIPサーバーのアカウントは持っていないため,サーバーなしの状態でSIPのレジストレーション部分を実装して,振る舞いをみています.(SIPプロファイルのドメインは立ち上がっていないPCのIPアドレスを入れました)
プログラムはAndroid SDKに付属のSipDemoのレジストレーション部分(SipManager#openまで)をほぼ丸写しました.ただ,(スリープ時に反応するかどうかはわからないのですが)IP電話がかかってきたときに反応するように,Serviceを継承したクラスを作り,そこでSIPに関する作業(現状はレジストレーションのみ)を行わせています.

エミュレータはVoIPに対応していないみたいなので,スマートフォン(docomo Aquos Phone SH-02E,Xperia SO-05D ー どちらもAndroidのバージョンは4.1.2)およびタブレット(Nexus7 2012 ー Android 4.3)にデバッグモードでインストールしてテストしています.

やってみて,ちょっとよくわからない現象に遭遇したので,質問させていただきます(ネットで調べていたのですが,検索の仕方が悪いのか,うまく引っかかりませんでした).
私のプログラムではSipDemoと異なり,SIPプロファイルを登録した状態でボタンを押すとSipManager#openメソッドを呼ぶようにしてどうささせました.1回目ーボタンを押すと,何もおきません.LogCatにopenメソッドを含むルーチンを通っていることを示すLogが表示されますが,他は何も表示されません.SipRegistrationListenerのonRegistaring中でLogを出すようにしていますが,表示されず,固まっています.
何も起きないので,ボタンをもう一度押してみると(このとき,私のプログラムでは,一回,SipManager#closeメソッドを呼び出した後,再度openメソッドを呼ばせています),今度はちゃんとSipRegistrationListenerが反応し,onRegistaring→onRegistrationFailedと進みました.
何度かアプリ起動後にボタンを複数回押して確かめましたが,1回目はほぼ固まってしまうようです.2回目以降はほぼうまくいくようです.

2回目にちゃんと反応することから,プログラム自体に問題はないのかな,と考えています.
しかし,なぜ1回目に何も反応しない状態になるのかが全くわかりません.

どなたか,同様の現象に遭遇した方はいらっしゃるでしょうか?
また,もし解決法あるいはそのヒントがあれば,教えていただけるとありがたいです.
もしくは,SIPサーバーがないことなどの私の実験条件が悪いのではないか等のアドバイスでもよいです.

なお,2回押せばちゃんと反応するので,アプリ内からレジストレーションのステータス変化をモニターし,25ms以上の時間SipRegistrationListenerが反応しなければ,もう一度SipManager#openメソッドを呼ぶことでボタンを2回押したときと同じ効果を得られることは確認しています.

以上です,よろしくお願いします.

Kyash

unread,
Nov 27, 2013, 12:11:24 AM11/27/13
to android-g...@googlegroups.com
Kyashです.補足です.

SipManager#openは2つありましたので,どちらを使っているか明確にしておきます.
今回は,Android SDKについているサンプルSipDemoと同様に
SipManager#open(SipProfile, PendingIntent, SipRegistrationListener)
を呼んでいます.
ただし,SipDemoの通りに,openの際に呼ぶ際のSipRegistrationListenerはnullを与え,
SipRegistrationListenerはSipManager#setRegistrationListener(String, SipRegistrationListener)で別にセットしています.

ちなみに,open(SipProfile)を呼んだ後,SipManager#register(SipProfile, int, SipRegistrationListener)を呼んだら,
やはり一回目は失敗しているようでした.

もし何かアドバイスがありましたら,よろしくお願いします.

以上です.

2013年11月27日水曜日 11時21分06秒 UTC+9 Kyash:

Kyash

unread,
Nov 27, 2013, 1:48:33 AM11/27/13
to android-g...@googlegroups.com
Kyashです,お世話になってます.

自己レスです.

補足を書いた後,setRegistrationListenerは使わず,
SipManager#openの引数としてSipRegistrationListenerを与えてみると,
無反応状態はほぼなくなりました(10回ぐらいやったときに,1回反応しなかったことがありました).
ただし,なぜかSipRegistrationListener#onRegistrationFailedが2回呼ばれるようになりました.
open直後と,それから200ms程度経過後に...かなり不安定な感じです.
1回失敗してしまったので,ステータスチェックはやめられそうにありません...

引き続き,何かヒントやアドバイスがあればお願いします.
また,AndroidのSIPがものすごく不安なので,何か別のよいSIP&VoIPをご存知の方がいらっしゃれば,
教えていただけると助かります.
(Sipdroidに使われているというMjSipというライブラリは知っているのですが,
あまり賢くないせいか,残念ながら使い方がよくわかりませんでした...)

以上です,よろしくお願いします.
Reply all
Reply to author
Forward
0 new messages