エクスポート (0) 印刷
すべて展開
情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

Windows Phone 8 用の VoIP アプリ

2014/06/18

対象: Windows Phone 8 および Windows Phone Silverlight 8.1 のみ

Windows Phone 8 では、電話のネットワーク接続を介してビデオやオーディオの通話ができる Voice over IP (VoIP) を実装するアプリを作成できます。ユーザーが VoIP アプリをインストールすると、他のアプリ同様にそのアプリは、ユーザーのアプリ リストに表示されます。VoIP アプリの着信通話があると、組み込みの電話機能が表示され、VoIP アプリが電話に統合され表示されます。

メモメモ:

VoIP を使用するには、アプリのマニフェストに ID_CAP_VOIP 機能を設定する必要があります。この機能を設定しないと、アプリが正しく機能しない可能性があります。詳細については、「Windows Phone 8 のアプリ機能とハードウェア要件」を参照してください。

すべての Windows Phone アプリと同様に、新しいプロジェクトを開始する前には、必ず該当する証明書の要件を確認してください。VoIP アプリに関連する要件については、「Windows Phone の特定のアプリの種類に関する追加の要件」を参照してください。

このトピックは、次のセクションで構成されています。

Windows Phone の VoIP アプリは、2 つのプロセスのいずれかで実行される複数のコンポーネントと、すべてのプロセスの外で実行される 1 つのコンポーネントで構成されます。1 番目のプロセスは、アプリの UI を表示するフォアグラウンド プロセスです。2 番目のプロセスは、着信または発信通話の多くの処理を作成、接続、管理するバックグラウンド プロセスです。次の図に VoIP アプリのコンポーネントを示します。

VoIP app architecture

VoIP アプリの各コンポーネントの簡単な説明は、次のリストのとおりです。

  • フォアグラウンド アプリ

    アプリの UI を提供するコンポーネントです。すべての Windows Phone アプリ同様に電話のアプリ リストに表示され、アプリのタイルとしてスタート画面に固定できます。このコンポーネントは、他のアプリ同様にフォアグラウンド プロセスで実行されます。フォアグラウンド アプリは、UI を提供する以外に、着信の際にプッシュ通知チャネルを設定します。また、バックグランド プロセスを起動し、アウトプロセス サーバーを使用して、バックグラウンドのコンポーネントに通話の終了要求などのコマンドを渡します。

  • アウトプロセス サーバー

    フォアグラウンド アプリとバックグラウンド コンポーネントがプロセス間の通信に使用するサーバーです。

  • バックグラウンド エージェント

    VoIP アプリで使用される 4 つのバックグラウンド エージェントです。これらのエージェントはマネージ コードを使用して記述され、VoIP 通話の新しいフェーズの開始を示すために起動されます。一般的にこれらのエージェントのコードは少量で、処理の多くを実行する次のコンポーネントの 1 つに通話の状態のみを渡します。

    • VoipHttpIncomingCallTask.新しい着信がプッシュ通知チャネルにあると起動します。Windows Phone ランタイム アセンブリに新しい通話を作成する必要があることを通知します。

    • VoipForegroundLifetimeAgent.フォアグラウンド アプリによって起動され、アプリがフォアグラウンドに存在する限り実行され続けます。これは、バックグラウンド プロセスを開始し、発信通話を迅速に作成できるようにそのプロセスを有効に保ち続けます。

    • VoipCallInProgressAgent.通話がアクティブになると起動します。オーディオとビデオをエンコードおよびデコードできるよう、CPU サイクルの割り当てが増えたことをアプリに通知します。

    • VoipKeepAliveTask.フォアグラウンド アプリが実行されているかどうかに関係なく、既定で 6 時間ごとに定期的に実行されます。これによってアプリは VoIP サービスをピングでき、アプリがデバイスにまだインストールされていることを示すことができます。ユーザーがアプリをアンインストールすると、このエージェントは実行できなくなり、サービスでアプリのプッシュ通知チャネルに着信通話を送信できなくなります。

  • Windows Phone ランタイム アセンブリ

    VoipCallCoordinatorおよび VoipPhoneCall オブジェクトを使用し、VoIP 通話のほとんどの接続および管理処理を実行するアセンブリです。これはマネージではなく Windows Phone ランタイム アセンブリなので、オーディオおよびビデオ処理に使用可能なネイティブ API を呼び出すことができます。

  • ネイティブ コア アセンブリ

    多くの VoIP アプリの開発元は複数のプラットフォームをサポートしており、コア ライブラリをよく C または C++ で記述しています。このライブラリは、コードの再利用およびアプリ開発の高速化のために、Windows Phone VoIP アプリで使用できます。

  • VoIP クラウド サービス

    リモートで実行される VoIP サービスです。

  1. ユーザーが初めて VoIP アプリを起動するとき、プッシュ通知チャンネルは作成されます。プッシュ通知チャネルの設定の詳細については、「Windows Phone 8 のプッシュ通知」を参照してください。

  2. 新しい着信通話を開始する際、VoIP クラウド サービスはアプリのプッシュ通知チャネル用に URI にプッシュ通知を送信します。

  3. オペレーティング システムによってアプリの VoipHttpIncomingCallTask エージェントが起動します。

    着信通話エージェントが実行されている間、以下が実行されます。

    1. まだロードされていない場合、アプリの Windows Phone ランタイム アセンブリが着信通話エージェントにロードされます。

    2. 着信通話エージェントはその MessageBody プロパティからプッシュ通知ペイロードを取得し、その後、OnIncomingCallReceived などの名前のカスタム メソッドを呼び出して、それが Windows Phone ランタイム アセンブリに渡されます。

    3. OnIncomingCallReceived で、Windows Phone ランタイム のアセンブリである VoipCallCoordinator.RequestNewIncomingCall に、呼び出し元の名前や発信者の連絡先の写真の URI などのプッシュ通知ペイロードの情報が渡されます。この情報により、電話は組み込みの電話 UI をユーザーに表示できるようになります。

    4. VoipCallCoordinator.RequestNewIncomingCall メソッドにより、要求された通話を示す VoipPhoneCall オブジェクトが返されます。Windows Phone ランタイム アセンブリで、他のメソッドで使用できるようにこのオブジェクトが格納されます。その後、通知オブジェクトの AnswerRequested および RejectRequested イベントのハンドラーが登録されます。

    5. AnswerRequested イベント ハンドラーでは、たとえば通話の課金を開始するように知らせるために、新しい通話が開始されたことなどをクラウド サービスに通知できます。その後、NotifyCallActive を呼び出し、通話が現在アクティブであることをシステムに通知します。

    6. RejectRequested イベント ハンドラーが呼び出されると、通話が拒否され、オペレーティング システムでプロセスが終了するまでの 10 秒ですべてのリソースをクリーン アップする必要があります。これは、もう一方の VoIP バックグラウンド エージェントが実行されていないことを前提としています。

  4. NotifyCallActive を呼び出すと、オペレーティング システムによって VoipCallInProgressAgent が呼び出されます。このエージェントが実行されると、オーディオをエンコードおよびデコードするためのバックグラウンド プロセスの CPU の割り当てが増えます。VoipCallInProgressAgent の実行中に以下を実行します。

    1. まだ読み込まれていない場合は、Windows Phone ランタイム アセンブリを読み込みます。

    2. Windows Phone ランタイム アセンブリで、MuteRequestedUnmuteRequested、および AudioEndpointChanged イベントのハンドラーを登録していない場合は登録します。

    3. 受信通話エージェントの実行中に、VoipPhoneCall オブジェクトの EndRequestedHoldRequestedResumeRequested イベントのイベント ハンドラーを登録します。必要に応じて、オブジェクトの最初の作成時にすべての VoipPhoneCall イベントを登録できます。

    4. フォアグラウンド アプリで受信ビデオ ストリームを MediaElement にフックします。ビデオ ストリームの設定の詳細なチュートリアルについては、「Windows Phone 8 での VoIP 通話向けビデオ ストリーミングを実装する方法」を参照してください。

    5. Windows Phone ランタイム アセンブリが HoldRequestedResumeRequested など、通話状態の変更のイベントを受信したら、ビデオのストリーミングを中断したり再開するなど、適切なアクションをとります。

    6. 通話を終了するためにユーザーが UI のボタンを押すと、フォアグラウンド アプリが通話を終了する Windows Phone ランタイム アセンブリのメソッドを呼び出します。これによって、通知オブジェクトは null に設定され、NotifyCallEnded が呼び出されます。ユーザーが別の VoIP アプリからの VoIP 通話に応答したときや、ユーザーが既に携帯電話および VoIP での通話中に 2 番目の携帯電話通話に応答したときなど、オペレーティング システムが呼び出しを終了するときに生成される EndRequested でも、これを行う必要があります。

  1. フォアグラウンド アプリが起動したら、以下を実行します。

    1. Launch() を呼び出し、バックグラウンド プロセスを起動します。これによって、オペレーティング システムによってアプリのバックグラウンド プロセスが実行され、VoipForegroundLifetimeAgent エージェントの OnLaunched() メソッドが呼び出されます。アプリがフォアグラウンドで実行され続ける限り、フォアグラウンドのライフタイム エージェントはアクティブに維持されます。

    2. まだロードされていない場合は、VoipForegroundLifetimeAgent から、Windows Phone ランタイム アセンブリをロードします。

    3. カスタム イベントを使用し、バックグラウンド プロセスの準備が完了したこと、およびすべてのアセンブリがロードされたことをフォアグラウンド アプリに通知します。その後、Windows Phone ランタイム アセンブリへの参照をフォアグラウンド アプリに作成します。

  2. ユーザーが通話先を選択し、アプリの [通話] ボタンを押したら、以下を実行します。

    1. MakeOutgoingCall などの名前のカスタム メソッドを Windows Phone ランタイム アセンブリで呼び出します。

    2. MakeOutgoingCallRequestNewOutgoingCall メソッドを呼び出し、最小化された電話の UI に表示されるように呼び出している相手の名前、および通話でオーディオのみを使用するかオーディオとビデオを使用するかを渡します。

  3. RequestNewOutgoingCall メソッドによって要求された通話を表す VoipPhoneCall オブジェクトが返されます。Windows Phone ランタイム アセンブリで、他のメソッドで使用できるようにこのオブジェクトが格納されます。その後、通話オブジェクトの AnswerRequested および RejectRequested イベントのハンドラーが登録されます。

  4. NotifyCallActive を呼び出し、通話が現在アクティブであることをシステムに通知します。

  5. オペレーティング システムによって VoipCallInProgressAgent が起動します。このエージェントが実行されると、オーディオをエンコードおよびデコードするためのバックグラウンド プロセスの CPU の割り当てが増えます。VoipCallInProgressAgent が実行されている間に、以下を実行します。

    1. まだ読み込まれていない場合は、Windows Phone ランタイム アセンブリを読み込みます。

    2. Windows Phone ランタイム アセンブリで、MuteRequestedUnmuteRequested、および AudioEndpointChanged イベントのハンドラーを登録していない場合は登録します。

    3. 受信通話エージェントの実行中に、VoipPhoneCall オブジェクトの EndRequestedHoldRequestedResumeRequested イベントのイベント ハンドラーを登録します。必要に応じて、オブジェクトの最初の作成時にすべての VoipPhoneCall イベントを登録できます。

    4. フォアグラウンド アプリで受信ビデオ ストリームを MediaElement にフックします。ビデオ ストリームの設定の詳細なチュートリアルについては、「Windows Phone 8 での VoIP 通話向けビデオ ストリーミングを実装する方法」を参照してください。

    5. 通話を終了するためにユーザーが UI のボタンを押した場合、フォアグラウンド アプリが通話を終了する Windows Phone ランタイム アセンブリのメソッドを呼び出します。これによって、通知オブジェクトは null に設定され、NotifyCallEnded が呼び出されます。ユーザーが別の VoIP アプリからの VoIP 通話に応答したときや、ユーザーが既に携帯電話および VoIP での通話中に 2 番目の携帯電話通話に応答したときなど、オペレーティング システムが呼び出しを終了するときに生成される EndRequested でも、これを行う必要があります。

VoIP API の使い方を示し、ループバックするオーディオおよびビデオを使用して着信および発信の VoIP 通話をシミュレートできる VoIP サンプル アプリを確認するには、「ChatterBox VoIP サンプル アプリ」を参照してください。

表示:
© 2014 Microsoft