EZ-NET IP Phone - 開発談義 

EZ-NET IP Phone

EZ-NET IP Phone

EZ-NET IP Phone は、

iPhone をひかり電話の子機にできるアプリです。


開発談義

EZ-NET IP Phone 開発談義

EZ-NET IP Phone を開発するきっかけは、NTT ひかり電話が IP 電話の一種であるということを知ったことに始まります。

目標は通話料金の節約から

最初は、ソフトフォンを利用すれば Windows から ひかり電話 の発着信が行えるという情報を得て、それを試してみていた感じだったのですけど、それなら、iPhone で ひかり電話 を利用できたら、通話料金を節約することが出来るのではないかと考えるようになりました。


というのも、それまでは PHS を利用していて通話料金が比較的安かったことと、さほどそれで通話することもまずなかったのですけど、iPhone に変更してみてからは、誰と話した記憶もないのに通話料として 1,500 円が請求されたりと、ちょっとしたことでもすぐに通話料が跳ね上がってしまう感じがありました。


これからは少し電話を利用する機会も増えそうだったので、今後の通話料金が気になります。

そこで、それなら自分でソフトフォンを作ってしまえば iPhone からひかり電話を利用して通話料金を抑えてしまえるのではないか、そう思ったのが EZ-NET IP Phone 製作のきっかけでした。

音質の安定が最初のテーマ

製作を行い、ある程度の実用的な機能が揃って来たころに通話テストを行ってみました。

そして、何度も玉砕する日が続きました。


それまでの自宅子機との通話テストとの通話ではまったく問題なかったのに、携帯電話と通話をすると、音質の悪化が目立ちます。

試行錯誤を重ね、効率の良い音声処理を実装して携帯電話との通話が安定し、Version 1.00 リリースへの最終テストとして自信を持って知人へ電話をしてみれば "音が悪いね" と言われて玉砕。

再度実装を重ねて、無事、知人への通話も綺麗になって、Version 1.00 のリリースとなりました。

外出先でも使えること

そもそもの目標が iPhone での通話料金の節約なので、何らかの方法で外出先から自宅のひかり電話を利用できるようにする必要がありました。

幸い、ひかり電話は SIP という仕組みで実装されていたことや、製作開始後に知ったのですが、3G 回線での VoIP の利用が解禁されたこともあり、実現の可能性が高まります。


実際のところ、ひかり電話対応ルーターへはインターネット側から直接接続は出来なかったので、自宅に VPN 環境を構築して、iPhone の VPN 機能で接続する運びとなりました。

環境構築の難易度はどうしても高くなりますが、幸いなことに BUFFALO から安価な VPN 対応ルーターが販売されていたりして、その気になれば手を出せないというほどではなさそうです。

ひかり電話での設定例 というページも用意してみたので、これで少しでも敷居が下がって、使える人が多くなってくれればと願うばかりです。

仕事でも使える音質を目指して

開発中の最初のころは音質の安定性が低く、特に 3G 回線を利用した通話の場合に極端に音飛びするという場面もありました。

LAN 回線を使用すればほぼ心配はないのですけど、VPN + 3G で成瀬台近辺で通話をしてみると、会話音声の遅れが目立ちました。


当初の遅れはおよそ 1 秒ほどでしたが、それでも会話が互いにかぶってしまったりして、スムーズな会話は難しい感じがありました。

少しでも気持ちよく会話が出来るようにと思い、音声処理を調整したら、遅れを 0.3 秒程度まで抑えることが出来ました。

ここまでくると、自然な会話ができる感覚です。


また、混雑した場所での音質の不安定さも目立ちました。

とある機会に渋谷から自宅へ通話してみたところ、ノイズが乗り、回線の混雑からか通話が飛びとびになり、まったく使い物になりませんでした。

青葉台から携帯電話へ通話をしてみれば、音は飛び、やがて音声が届かなくなったりなど、どうにも不安定さが目立ちました。


これでは、知人同士なら笑って済むお話ですけど、目上の人や取引先等へ電話をするには少し失礼な感じもします。

場所や相手を選ばずに通話をするにはやはり音質の安定が重要です。


そこで、音声処理を大幅に見直し、出来る限りの安定化を図ってみました。

そうしたところ、音質の不安を感じる場面がほとんど無くなりました。3G 回線の場合は通話開始時の数秒間は少し不安定なところもありますが、すぐに正常に回復します。

これならひとまずは、iPhone からのひかり電話を利用することによるメリットを享受できるレベルだろうと思います。


その後も、何かイベントがあったらしい原宿から渋谷への通話の際に音飛びが発生したこともありましたが、より通話が安定するように改良を加え、より安心して電話をかけられるように、実際に自分で使いながら改良を進めているところです。

出先からひかり電話が使えること

EZ-NET IP Phone を使って、先方の近所から電話をかけた時のこと。

自宅番号から、近くまで来ているという着信があったことに非常に関心を持って下さった方がいました。


なんでも、業務の性質上、先方のお宅へ伺う際に携帯電話から電話をすることがあるそうなのですが、知らない携帯電話からの着信に出てくれないお客さんが多いのだそうです。

そんなときでも、外出先から事務所の番号で電話をかけることが出来ればスムーズに連絡が取れるようになるとのことで、興味を持って下さったのでした。

ひかり電話子機としての使用

通話料金を節約するのがもともとの目標だったのもあり、後回しにしていましたが、Version 1.1.0 からは着信機能にも対応しました。

iPhone 上の制約もあって、EZ-NET IP Phone を起動していないと着信できないのですけど、それでも iPhone 3G Dock などに設置しておけば、自宅の電話子機としても利用することが出来るようになりました。

Version 1.2.0 からは日付と時刻が表示されるカレンダー画面も追加したので、待ち受け時は卓上カレンダーとして利用することもできるようになっています。


子機として利用できるようになると、ひかり電話のオプションサービスである "マイナンバー" を利用して、3 つ以上の番号も使えるようになるなど、ひかり電話の利用の幅も広がります。

着信番号を iPhone に登録された連絡先と照らし合わせて表示してくれるようにもなっているので、自宅電話機のアドレス帳の管理の手間も軽減されると思います。

動作確認の障壁

自宅に貸し出されたルーターが NTT 東日本の PR-200NE だったこともあり、開発当初からの動作確認ルーターは PR-200NE でした。

実家もひかり電話になって NTT 東日本の PR-S300SE が貸し出されたことにより、その 2 機種での動作確認が出来るようになりました。


しばらくはどちらとも問題なく子機登録できていたのですけど、iOS 4 になって PR-200NE で接続できなくなる問題が発生しました。

この問題は解消できたのですが、リリースから日が経つにしたがって、他のルーターでも動作しないことがあるという声が耳に入るようになってきました。

情報は入れども、実際にどういった症状となっているかを知ることはとても難しく、試して見ようにもなかなか同じ環境を用意するのもままなりません。


幸運にも NTT 西日本の AD-200SE を入手できたまではよかったのですけど、やはり NTT 西日本用のルーターのせいか、NTT 東日本の自宅環境では思ったように動作してくれませんでした。

少しでも確認環境を広げられたらと思いつつ、そう簡単にはさせてもらえないのが難しいところです。

iPhone OS 4 対応へ

iPhone OS 4 が登場して 「ほとんどの OS 3 のソフトが動く」 という公式発表もむなしく、利用の上で致命的な不具合がいくつも発生してしまいました。

音声処理が不安定になったり、PR-200NE へ接続できなくなったりと、課題が大きく膨らみます。

実装に明け暮れ、ようやく基礎部分の実装がひと段落したかなと思っていた頃合だっただけに、これはなかなかの精神的ダメージでした。


PR-200NE については、iOS 4 になって内部での NSDictionary の並び方が変わったらしく、それを用いて実装していた REGISTER リクエストと、その順番によっては誤動作を起こす PR-200NE の仕様とがたまたまぶつかっただけということを突き止めるのもなかなか労を費やしました。

音声処理については、iOS 4 になって微妙な挙動が変わったようで、iOS 4 の挙動にあわせるために試行錯誤の繰り返し。


ようやく iOS 4 で期待通りの音声処理が出来るようになりましたが、1 つのバイナリーで OS 3 と OS 4 とに対応するのは現実的ではなさそうでした。

Version 1.x.x 系列は EZ-NET IP Phone III として OS 3 対応として音声処理等の根幹部分は現状維持の方向で、OS 4 対応版は EZ-NET IP Phone IV として今後の機能更新を進めて行こうと思います。

マルチタスキング

iPhone OS 4.0 の売りといえば、マルチタスキングと VoIP 対応ですが、残念ながら、iOS 4.0 の段階では UDP による VoIP には対応していない様子です。

UDP によるバックグラウンド処理が行えないため、UDP を利用した VoIP アプリである EZ-NET IP Phone ではその制約に縛られてしまっています。何か良い打開策があればいいのですけどね。

トーン信号への対応

通話料金を節約することを第一に考えていたため先送りしていたトーン信号 (DTMF) への対応をようやく実装しました。

自宅でのひかり電話子機としての利用も含めて、メインの電話として利用するようになると、やはり音声ガイダンスに対応できないことに強く不便を感じるようになりました。

忙しさにかまけて実装がだいぶ遅れてしまいましたけど、EZ-NET IP Phone IV Version 2.1.0 から利用可能になる見通しです。

まだ審査待ちの段階ですが、平成 23 年を迎える頃にはリリースされると思います。

より捉えやすくするには…

Twitter で EZ-NET IP Phone に関する情報を集めていたところ、「ほんとうだったらすごいよね」 みたいなツイートを目にしました。

そう言われれば、確かに iPhone アプリって嘘っぽいアプリを疑うという風潮もできてきているように思います。それと同じように見られていたのかなと思うと、それはそれでちょっと新鮮な感じでした。


ともあれどんなアプリなのかも含め、どうやって使ったら良いかを少しでも捉えやすくするということは大切ですね。

これまでは、"外出先からひかり電話を使う" という開発のきっかけとなったテーマを主軸に文書を揃えていたのもあってか、今見るととても分かりにくい内容になっているように感じました。

自分では自宅ひかり電話子機としても EZ-NET IP Phone を使用していて、これが意外と便利だったりするので、ひかり電話子機として扱う方法にも焦点を当てた情報を揃えて行ったら、アプリのことがもう少しは解るような内容になるかもしれないですね。


ちなみに自分の中で、EZ-NET IP Phone IV Version 2.1.1 で実装した、着信番号と iPhone 電話帳とを照らし合わせて、名前だけでなく会社名も表示されるようになったのですけど、この機能、ひかり電話子機として利用する上でとても重宝しています。

iOS 5 beta を迎えて

前回の iOS 4 で動作しなくなった教訓を踏まえ、iOS 5 では状況を事前に把握しようと beta 版での動作確認を行ったところ、再び致命的な動作不良に見舞われました。

そもそもコンパイル後のバイナリーは iOS 4 のシミュレーターでも動作しなくなってしまい、既存の iTunes で提供中のバイナリーも、通話状態になったタイミングで iOS ごとハングアップするようになってしまいました。

これは困ったと思いながらも、iOS 5 beta のバージョンが上がるにつれて、iOS ごとハングアップすることはなくなり、いつしかちゃんと動作する感じになり…。

面白いのが、これまで iOS 4 では音声回りの調子が少し悪かった EZ-NET IP Phone III の方が iOS 5 beta 5 では EZ-NET IP Phone IV よりも調子が良かったりしたところです。

こんな感じで、嬉しいことも困ったことも混ざり混ざって、これはきっと今後も iOS のメジャーバージョンアップがされる度に、悲鳴は尽きなそうな感じですね。



    


"ひかり電話" は NTT 東日本/西日本の登録商標です。