リモート セッションでの WebRTC ベースの通話アプリ用マルチメディア リダイレクトを使用した開発者統合
マルチメディア リダイレクトは、リモート セッションでのビデオの再生と通話を、Azure Virtual Desktop、Windows 365 クラウド PC、または Microsoft Dev Box からローカル デバイスにリダイレクトすることで、処理とレンダリングを高速化します。
通話リダイレクトにより、WebRTC ベースの通話アプリのオーディオ通話が最適化され、遅延が減り、通話品質が向上します。 接続はローカル デバイスとテレフォニー アプリ サーバーの間で行われます。WebRTC 通話はリモート セッションからローカル デバイスにオフロードされます。 接続の確立後は、リダイレクトされない通話と同じく、Web ページやアプリ プロバイダーに応じて通話品質は変わります。
通話リダイレクトは、ほとんどの WebRTC ベースの通話アプリで、そのまま動作します。 ただし、サポート対象外の状況が発生したり、通常とは異なるエクスペリエンスをリモート セッションで実現したい場合があります。
この記事では、サポートされている API インターフェイスやインスタンス メソッドに関する情報を提供し、Navigator インターフェイスの mediaDevices
プロパティで使用できる JavaScript コード スニペットを示します。
Navigator インターフェイスは、Web サイトを通話リダイレクトと統合するための Media Capture and Streams API の一部です。 この API は、WebRTC API と共に、WebRTC ベースの通話アプリを使用したオーディオおよびビデオ データのストリーミングをサポートします。 マルチメディア リダイレクトは、API 内の mediaDevices
オブジェクトの実装を置き換えるもので、通話リダイレクトの検出、切断イベントと再接続イベントの処理、診断情報の収集を実行します。
ヒント
マルチメディア リダイレクトとの統合をテストする場合は、すべての Web サイトで通話リダイレクトを使用できるようにすることができます。 詳細については、テスト用にすべてのサイトで呼び出しリダイレクトを有効にする方法を参照してください。
サポートされている API インターフェイスとインスタンス メソッド
通話リダイレクトは、標準的な WebRTC の使用を、リモート セッションからローカル デバイスに通話をリダイレクトする実装にシームレスに置き換えるように設計されています。
次に示すのは、通話リダイレクトで使用される、Media Capture and Streams API と WebRTC API のサポート対象のインターフェイスとインスタンス メソッドの一覧です。
AnalyserNode
AudioContext
HTMLAudioElement
MediaDevices
MediaStream
MediaStreamAudioDestinationNode
MediaStreamAudioSourceNode
MediaStreamTrack
RTCDataChannel
RTCPeerConnection
RTCRtpReceiver
RTCRtpSender
RTCRtpTransceiver
既知の制限事項
通話リダイレクトには、API に関する次の制限があります。
現在サポートされている
WebAudio
ノードの数は限られています。HTMLAudioElement
のsetSinkId
は WebRTCsrcObject
トラックで動作しますが、着信音などのローカル再生は常にリモート セッションの既定のオーディオ出力で再生されます。一部の 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: ローカル コンピューター上のファイル
MsMmrDVCPlugin.dll
のバージョン。これは、Windows アプリとリモート デスクトップ アプリの一部として提供されます。mmrHostVersion: セッション ホスト、クラウド PC、または開発ボックスにインストールされているファイル
MsMMRHost.exe
のバージョン。mmrExtensionVersion: ブラウザーで実行されている Microsoft マルチメディア リダイレクト拡張機能のバージョン。
activityId: テレメトリを特定のセッションに関連付け、マルチメディア リダイレクトがリダイレクトしている現在の Web ページにマップするために Microsoft が使用する一意の識別子。
connectionId: テレメトリを特定のセッションに関連付けるために Microsoft が使用する一意の識別子であり、ローカル デバイスとリモート セッションの間の特定の接続に関連します。
この情報はすべて、ブラウザー拡張機能の詳細でエンド ユーザーに提供されますが、この例ではプログラムを使用して情報を収集する方法を示しています。
通話リダイレクト
既定では、マルチメディア リダイレクトはコンソールに記録されません。 ブラウザー拡張機能には、ユーザーがログを収集するためのボタンがあります。 次の例は、コンソール ログをプログラムで有効にする方法を示しています。 統合に取り組んでいる場合や、ブラウザー拡張機能インターフェイスで提供される方法よりも長い実行時間がかかるログを必要とする問題を調べる場合は、コンソール ログをプログラムで有効にすることができます。
window.navigator.mediaDevices['mmrConsoleLoggingEnabled'] = true;
また、調査に役立つマルチメディア リダイレクト ログをプログラムで収集することもできます。 Web ページのすべてのログは、ドキュメントの mmrExtensionLog
イベントに登録することでも使用できます。
イベント オブジェクトには、detail の下に 2 つのプロパティがあります。
Level: エントリのトレースの種類を示します。これにより、特定のイベントをフィルター処理できます。 Level は次のいずれかの値になります。
- info
- verbose
- warning
- エラー
Message: テキスト ベースのトレース メッセージ。
次の例は、mmrExtensionLog
イベントを登録する方法を示しています。
document.addEventListener('mmrExtensionLog', () =>
console.log("MMR event, level:" + event.detail.level + " : " + event.detail.message);
);
関連するコンテンツ
詳しくは、「リモート セッションでのビデオ再生と通話のマルチメディア リダイレクト」をご覧ください。