リモート セッションでの WebRTC ベースの呼び出しアプリのマルチメディア リダイレクトとの開発者の統合

マルチメディア リダイレクトでは、Azure Virtual Desktop、Windows 365 クラウド PC、または Microsoft Dev Box からリモート セッションでのビデオ再生と呼び出しをローカル デバイスにリダイレクトして、処理とレンダリングを高速化します。

通話リダイレクトにより、WebRTC ベースの呼び出しアプリのオーディオ呼び出しが最適化され、待機時間が短縮され、通話品質が向上します。 接続は、ローカル デバイスとテレフォニー アプリ サーバーの間で行われます。ここで、WebRTC 呼び出しはリモート セッションからローカル デバイスにオフロードされます。 接続が確立されると、呼び出し品質は、リダイレクトされていない呼び出しと同様に、Web ページまたはアプリ プロバイダーに依存します。

通話リダイレクトは、変更を加えることなく、ほとんどの WebRTC ベースの呼び出しアプリで機能します。 ただし、サポートされていないシナリオがある場合や、リモート セッションで別のエクスペリエンスを提供したい場合があります。

この記事では、サポートされている API インターフェイスとインスタンス メソッドに関する情報を提供し、ナビゲーター インターフェイスの mediaDevices プロパティで使用できる JavaScript コード スニペットについて説明します。

ナビゲーター インターフェイスは、Web サイトと通話リダイレクトを統合するための メディア キャプチャおよびストリーム API の一部です。 これらの API は、WebRTC API と共に、WebRTC ベースの呼び出し元アプリを使用したオーディオおよびビデオ データのストリーミングをサポートします。 マルチメディア リダイレクトは、呼び出しリダイレクトを検出し、切断イベントと再接続イベントを処理し、診断情報を収集するために、API 内の mediaDevices オブジェクトの実装を置き換えます。

ヒント

マルチメディア リダイレクトとの統合をテストする場合は、呼び出しリダイレクトを有効にして、すべての Web サイトで使用できるようにします。 詳細については、「 テストのためにすべてのサイトの通話リダイレクトを有効にする」を参照してください。

サポートされている API インターフェイスとインスタンス メソッド

呼び出しリダイレクトは、標準の WebRTC の使用を、リモート セッションからローカル デバイスに呼び出しをリダイレクトする実装にシームレスに置き換えるために設計されています。

Media Capture and Streams APIWebRTC API からの呼び出しリダイレクトで使用されるサポートされているインターフェイスとインスタンス メソッドの一覧を次に示します。

既知の制限

呼び出しリダイレクトには、次の API 制限があります。

  • 現在サポートされている WebAudio ノードの数は限られています。

  • setSinkId HTMLAudioElementでは WebRTC srcObject トラックに対して機能しますが、着信音などのローカル再生は常にリモート セッションの既定のオーディオ出力で再生されます。

  • 一部の API は通常の条件下では同期的に返されますが、呼び出しリダイレクトで使用する場合はプロキシである必要があるため、オブジェクトの状態はすぐには使用できない可能性があります。

呼び出しリダイレクトを検出する

呼び出しリダイレクトがアクティブかどうかを検出するには、MediaDevices オブジェクトの isCallRedirectionEnabled プロパティをチェックします。 このプロパティが trueされている場合、呼び出しリダイレクトはアクティブです。 このプロパティが undefined または falseされている場合、呼び出しリダイレクトはアクティブではありません。

window.navigator.mediaDevices['isCallRedirectionEnabled'] = true;

リモート セッションからの切断を検出する

Web ページで呼び出しリダイレクトを使用しているときにユーザーが切断してリモート セッションに再接続すると、オブジェクトをサポートしていたローカル WebRTC インスタンスは使用できなくなります。 通常、ユーザーがページを更新すると、再度呼び出しを行うことができます。

Web ページでは、すべての WebRTC オブジェクト、オーディオまたはビデオ要素、 MediaStream または MediaStreamTrack インターフェイスを破棄して再作成することで、これらの切断イベントと再接続イベントを検出して処理できます。 この方法により、Web ページを更新する必要がなくなります。

これらのイベントの通知を受け取るには、次の例に示すように、MediaDevices オブジェクトにrdpClientConnectionStateChanged イベントを登録します。 このイベントには、 connected または disconnectedのいずれかの新しい状態が含まれています。

navigator.mediaDevices.addEventListener('rdpClientConnectionStateChanged', () => 
    console.log("state change: " + event.detail.state);
);

コール リダイレクト 診断

次の例では、 MediaDevices オブジェクトで公開されるプロパティの一覧を示します。 これらは、使用されている呼び出しリダイレクトのバージョンとセッション識別子に関する特定の診断情報を提供します。 この情報は、Microsoft に問題を報告する場合に役立ち、独自のテレメトリまたは診断 データの一部として収集することをお勧めします。

window.navigator.mediaDevices['mmrClientVersion'];
window.navigator.mediaDevices['mmrHostVersion'];
window.navigator.mediaDevices['mmrExtensionVersion'];

window.navigator.mediaDevices['activityId'];
window.navigator.mediaDevices['connectionId'];

各プロパティが表す内容を次に示します。

  • mmrClientVersion: Windows Appとリモート デスクトップ アプリの一部として提供されるローカル コンピューターにMsMmrDVCPlugin.dllファイルのバージョン。

  • mmrHostVersion: セッション ホスト、クラウド PC、または開発ボックスにインストール MsMMRHost.exe ファイルのバージョン。

  • mmrExtensionVersion: ブラウザーで実行されている Microsoft マルチメディア リダイレクト拡張機能のバージョン。

  • activityId: テレメトリを特定のセッションに関連付け、現在の Web ページ マルチメディア リダイレクトにマップするために Microsoft が使用する一意の識別子。

  • connectionId: テレメトリを特定のセッションに関連付けるために Microsoft が使用する一意の識別子であり、ローカル デバイスとリモート セッションの間の特定の接続に関連します。

この情報はすべて、ブラウザー拡張機能の詳細でエンド ユーザーが利用できますが、この例ではプログラムによる収集方法を提供します。

リダイレクト ログを呼び出す

既定では、マルチメディア リダイレクトはコンソールにログを記録しません。 ブラウザー拡張機能には、ユーザーがログを収集するためのボタンがあります。 次の例は、コンソール ログをプログラムで有効にする方法を示しています。 統合に取り組んでいる場合や、ブラウザー拡張機能インターフェイスのオプションよりも実行時間の長いログが必要な問題をキャプチャする場合は、コンソール ログをプログラムで有効にすることをお勧めします。

window.navigator.mediaDevices['mmrConsoleLoggingEnabled'] = true;

また、調査に役立つマルチメディア リダイレクト ログをプログラムで収集することもできます。 Web ページのすべてのログは、ドキュメントの mmrExtensionLog イベントに登録することでも使用できます。

イベント オブジェクトの詳細には、次の 2 つのプロパティ があります

  • レベル: エントリのトレースの種類を示し、特定のイベントをフィルター処理できます。 Level は、次のいずれかの値です。

    • info
    • 冗長
    • warning
    • error
  • メッセージ: テキスト ベースのトレース メッセージ。

次の例は、 mmrExtensionLog イベントに登録する方法を示しています。

document.addEventListener('mmrExtensionLog', () =>
    console.log("MMR event, level:" + event.detail.level + " : " + event.detail.message);
);

Web サイトを送信してレビューまたはサポートを依頼する

ISV を代表し、Web サイトを 通話リダイレクトのために Web サイトの一覧に追加する場合、または Web サイトと通話リダイレクトの統合に関するサポートが必要な場合は、 このフォームに記入して送信してください。

ビデオ再生とリモート セッションでの呼び出しに対するマルチメディア リダイレクトの詳細を確認します。