iPhoneのソフトフォンでバックグラウンド待ち受け | 雲の上はいつも青空

雲の上はいつも青空

不思議な経歴をもつエンジニア!?の徒然なブログです。
お仕事関係の話が多いと思いますが、コメントとかもらえると中の人はとても喜びます(^O^)/

iPhoneがiOS4となりマルチタスク対応になってしばらくたちますが、やっとソフトフォン(sipフォン)でバックグラウンド待ち受けが出来るようになりました。これで、IP電話の内線延長が実用段階に入ったと言って良いと思います。

この機能を実現するには、大きく2つの作業が必要です。
・ソフトフォンをバックグラウンド待ち受けする為の設定(ソフトフォンとIP-PBX)
・3G接続時(無線LAN環境以外)における通話品質の確保


まずは、1の設定について書いてみます。
【環境】
・IP-PBX	asterisk 1.6.2.6-1, Debian GNU 6.0 squeeze
・ソフトフォン Acrobits Softphone Version 4.1
・iPhone iPhone 3GS, iOS4.0.1

1. iPhoneの設定
1-1.Incoming Callsの設定はpushは使わず、単にOnにする。
1-2.setting -> PreferencesのKeep iPhone awakeをAlwaysにセットする。
1-3.Accounts設定のAdvanced settingにあるTransport ProtocolをUDPからTCPへ変更する。
※詳しくはこの辺を読んでみてください。

2.IP-PBX:asteriskの設定
2-1.sipの待ち受けポートである5060番は基本UDPですが、TCPでもリッスンするようにsip.confのgeneralに以下の2行を追加する。
tcpenable=yes
tcpbindaddr=0.0.0.0

※追加したら、asterisk -r でCLIを呼び出し、sip reload後にnetstat -napで5060/TCPをリッスンしているかどうか確認して下さい。
※tcpenableはasterisk 1.4では使えません。もしlennyで行うなら1.6のソースからビルドするか、私のようにsqueezeへ上げてしまえば標準パッケージで1.6を選択出来るようになります。

1.4から1.6へ変更した場合、sip.confがシンタックスでひっかかります。
insecure=very は1.6では使えませんので、insecure=invite,port へ変更して下さい。
また、ルータ等でインバウンドの5060/UDPを内部にあるasteriskサーバへトンネリングしている場合、忘れずにTCPも通しておいて下さい。

【参考】YAMAHA系ルータの場合(xxxはasteriskサーバ)
nat descriptor type 1 masquerade
nat descriptor masquerade static 1 1 192.168.0.xxx udp 5060
nat descriptor masquerade static 1 2 192.168.0.xxx tcp 5060
nat descriptor masquerade static 1 3 192.168.0.xxx udp 10000-20000

■以上の設定変更で、iPhone上のソフトフォンがバックグラウンド待ち受けが出来るようになります。
asteriskの再起動と、iPhoneは一度電源を切ってコールドスタートしてから動作確認を行って下さい。

■3G回線を使ったときの音質改善についてはページを改めます。