後編 SIPアプリケーションを拡張する

SIP Communicatorを評価すると?

 さて、実際にコミュニケーションアプリケーションを構築しアプリケーションを動作させてみていかがでしたでしょうか? 音声や映像の送受信に遅延を感じた方もいらっしゃるでしょう。一点気を付けていただきたいのが、この遅延は音声や映像の入出力、フォーマット変換が原因で、JSLEEやJAIN SIPによるところではないということです。今回使用したSIP Communicatorは、音声や映像、画像を操作するためにJMFを用いています。そのため、メディアフォーマット変換を専用のH/Wではなく、JVM上で行うため、専用H/Wデバイスと比べると若干の遅延は発生します。しかしその一方で、遅延はほとんど感じなかったという方もいらっしゃるでしょう。もちろん、人それぞれの感覚の違いはありますが、おそらくJMFのパフォーマンスを十分に生かせるマシンを用意された方は、それほどの遅延は感じなかったのではと思います。

 人間が検知できる音声遅延は50msが限界だといわれています。それより短くても人間は遅延があったことを検知できないのです。一方、電話サービスの遅延は、最悪でも150‐200msが限界だといわれています。それ以上になると、サービスとして品質が悪いということになってしまうようです。

 今回使用したSIP Communicatorは、実は音声データを300msバッファしてから、それをコンバートするという仕組みになっています。SIP Communicatorのソースコードをダウンロードして中をのぞいてみると、ハードコーディングされている個所を見つけることができるはずです。よって、ハイスペックなマシンを持っている方であれば、このバッファ時間を短くすることで遅延をより短くすることができます。逆に、バッファ時間を短くし過ぎても、コンバート処理作業でボトルネックが生じてしまえば、遅延を減らすことはできません。

 今回のサンプルアプリケーションでは、JSLEE、JAIN SIPに加え、JMFというテクノロジを使用したわけですが、コミュニケーションアプリケーションのクライアントサイドでもパフォーマンスを満たしさえすれば、Javaを用いることのメリットである、アプリケーションの移植性の良さ、柔軟性、Java Web StartやAppletといった、配布のしやすさ、管理性の良さを生かすことで、より良い環境の構築ができるでしょう。

 さて、今回は、主にJSLEEサーバを用いたテレビ電話環境の構築について解説を行ってきました。ただし、読者の皆さんの中には、JSLEEサーバを活用するためには、この後、何をすればいいんだ? JSLEEアプリケーションの開発は、どのように行えばよいのか? という疑問をお持ちの方もいるでしょう。また、お気付きの方もいらっしゃるでしょうが、Rhino-SDKの評価版ダウンロードサイトには、Eclipseのプラグインモジュールが提供されています。そうです、JSLEEのコンポーネントは、J2EEコンポーネントと同様にEclipseを用いて容易に構築、配備することができるのです。JSLEEサーバの操作、コンポーネントの開発は、またの機会にお話しすることにしましょう。

次世代コミュニケーションのかたちを考える

 私は常々コミュニケーションツールの多さに飽き飽きしています。私は(皆さんも同じでしょうが)、会社のデスクに固定電話もあれば、個人の携帯電話、さらには会社から支給された携帯電話にパソコン、とハードウェアだけでもこれだけたくさんのコミュニケーションデバイスを持っています。さらに、ソフトウェアを考慮すると、携帯電話には留守電サービスやメールサービスが存在し固定電話には転送サービスや留守電サービス、PCでは会社標準のメールサービスに加え、Webメールなど、数多くのコミュニケーションツールが存在します。

 もちろん、用途に応じてどのツールを使用するかは都度選択するわけですが、その一方で至急コミュニケーションを取りたいとなった場合、どのツールを選択するかは悩みます。取りあえず、連絡を取りたい相手の携帯電話に呼び出しを行うのが最適な手段になるのでしょうが、携帯電話に連絡をしてもつながらなかったときに、留守電を残して待つべきなのか、他の手段を考えるべきか、いろいろと悩みます。というのも、連絡を取りたい相手が私だとしたら……

  私は、うっかり携帯電話を自宅に忘れることもあれば、携帯電話のバッテリーがなくなることもあります。海外出張に行き、携帯電話をレンタル(私の携帯電話は海外では使えませんので)していることもあれば、国内でも圏外の場所にいることもあります。加えて私は、自分の会社の席にいるのであれば、携帯電話より受話器の大きな話しやすい(個人の好き嫌いですが)固定電話を好みますし、また、相手がプライベートな付き合いの人間であれば、すぐに席を立つことができる携帯電話の方がよいこともあります。

 私は、自分がこのような状況のときにいつも、自分が受信したいデバイスを状況に合わせて選択できないものかと思います。自分の状態と希望の通信手段を相手に伝えることができれば、なんと便利かと思います。今回、サンプルアプリケーションで使用したSIPは、まさにこのような問題を解決するプロトコルであり、そのプロトコルをJavaで制御するためのAPIがJAIN SIPです。さらに、SIPメッセージを受け、実行されるサーバサイドのアプリケーション実行基盤がJSLEEになります。JSLEEはプロトコル非依存な環境を提供します。その結果、公衆回線網や携帯電話網のサービスと連携したりすることができるのです。繰り返しになりますが、JSLEEの詳細については、前回の記事をご覧ください。

 さて、それではここから先は、冒頭で触れたとおり今回構築したコミュニケーションアプリケーションと現在いろいろな用途で活用されているエンタープライズアプリケーションが連携することでどのような新しいサービスが生まれるかを考えてみましょう。

■各人の状態やコメントを入れて使いやすくする

 今回構築したJSLEEとJAIN SIPを用いたアプリケーションでは、SIPアドレスを用い相手を呼び出し、SIPアプリケーションがそのSIPアドレスとIPアドレスのマッチングを行い、相手とのセッションを確立しました。例えばこのサービスに、SIPアプリケーション上で扱うデータをSIPアドレス、IPアドレスに加え、各人の状態やコメントなどを入れるとどうなるでしょう。

 まず、SIPレジストラサービスに自身の状態と受信したいデバイス、サービスを登録しておきます。そうすることで、アプリケーションが受信者の状態を判断し、受信者は、期待するデバイス、サービスにて応答することができるのです。また、ミーティング中、移動中などで応答できない場合でも、コメントに「ミーティング中なので30分後に連絡可能」と登録しておくことで、発信者は、安心して留守番電話にメッセージを残せます。電車で移動中であれば、電話は一切取れないため、SIPサーバに着信先を携帯電話ではなく、携帯電話のメールとして受信アドレスを登録することもできるでしょう。

 このように、受信者の状態や希望する媒体を送信者に伝えることで、使い勝手のよいコミュニケーションアプリケーションとなるでしょう。このようなアプリケーションは、今回構築したアプリケーションにチョット手を加えるだけで構築することができるのです(ただし、転送先等、呼び出し相手がIP上ではない場合に、公衆回線網や携帯回線網をどのように使用するかは、頭をひとひねりする必要がありますが)。

図2 受信者の状態のコメントを加えることで使い勝手のよいコミュニケーションアプリケーションになる

■他のアプリケーションと連携する

  また、これらの状態情報を社内のカレンダーサーバと連携しても面白いでしょう。カレンダーサーバ(スケジュール管理サーバ)に日々の業務の予定を入れるとSIPレジストラサービスの情報も更新され、発信者は、随時相手の状態を得ることができます。

図3 カレンダサーバと連携することで、相手の状態を得ることができる

 そのほかにも、すでに実現されているサービスですが、社員名簿WebにSIPアドレスが表示されており、さらに状態が表示されている。先方が電話可能状態であれば、それをクリックすると相手の電話が鳴り、かつ自分の電話も鳴り、それに応答することで通信が可能になるといったサービスもそれほど難しくなく実現できるでしょう。

 お客さまからの電話を受けたとき、お客さまが会話をされたい人間が違うフロアにいることもあるでしょう。そのような場合に、いまはまずは社員検索システムで内線番号を調べ、受話器を上げダイヤルし、その揚げ句に外出中で、結果お客さまには1分近く待ってもらって、「外出中です」なんて告げることもよくあることでしょうが、このような問題も解決できるでしょう。

図4 お客さまへの電話応答をスピーディーにできる

 また、社内のポータルサーバ上に自分の所属するプロジェクトのメンバーの情報が表示されていて音声や映像交換ができたり、ホワイトボード共有ができたり、などのバーチャルオフィスも考えられるでしょう。近年、IT業界の不景気でオフィスを縮小化する企業も少なくなく、在宅勤務や会社に固定席がない、フリーオフィス形態を取っている企業があると聞きます。このような場合に、一緒に働くべき人間がどこにいるか分からずに、会社の内線、携帯電話をかけまくって、相手を見つけ出すようなこともあります。このような場合にもバーチャルオフィスは有効でしょう。

■サービスの課金処理も実装可能に

 さらに、 SIPプロキシサービスは、サービスの開始時間や終了時間、通話場所、使用サービスなど、通話に関するすべての情報を取得することができます(SIPプロキシサービスは、セッションの確立や終了をすべて検知するため)。そこで、これら取得情報をJ2EE上の課金サーバに渡し、課金処理を行うこともできるでしょう。また、その課金情報からポイントを計算し、マイルポイントと共有化できるということもあるでしょう。もちろん、このマイルポイントは、インターネット上のさまざまなサービスで共有されているのです。J2EEアプリケーションの世界では、それほど珍しくない、インターネットを介したアプリケーション連携ですが、その輪の中にコミュニケーションアプリケーションを入れることも十分考えられるでしょう。

 このように非常に簡単な例をいくつか挙げましたが、コミュニケーションアプリケーションとエンタープライズアプリケーションの連携によって、いままでになかったサービスが生まれるのです。

まとめ

 今回、アプリケーションを構築するために使用したJSLEEは、コミュニケーションアプリケーションの分野だけではなく、金融、証券サービスをはじめとする、いわゆるミッションクリティカルなサービスを構築する必要がある分野から注目されています。これは、JSLEEがトランザクション制御に強く、かつ高速で高可用性を実現できるアプリケーションの実行基盤だからです。例えばオンライントレードでは、瞬時に爆発的なトランザクションが発生することもあるでしょう。そのときに、お客さんが一度コミットした売り買いを「障害が発生したため処理できませんでした」とはいえないでしょう。このように、JSLEEはコミュニケーションアプリケーションが必要とする実行基盤を提供するものであり、コミュニケーションアプリケーションのためだけの実行基盤ではないこともご理解ください。

 今回はJSLEEコンポーネントの開発まで話を進めることはできませんでしたが、ぜひサンプルアプリケーションのソースコード、管理者ガイド、jslee.orgの情報を参考に、新しいアプリケーションの創造にお役立てください。また、皆さまからの声がございましたら、今後JSLEEコンポーネント作成についても触れたいと思います。

2/2

 INDEX

Javaで音声チャットアプリを作ろう(後編)
  Page1
環境の構築
Page2
SIP Communicatorを評価すると?
次世代コミュニケーションのかたちを考える





Java Solution全記事一覧



Java Agile フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Java Agile 記事ランキング

本日 月間