Windows Virtual Desktop #32 Media optimization for Microsoft Teams を無効化する

この記事のWVDは”Windows Virtual Desktop Spring 2020 Release”が対象です。

一度、有効化したMedia Optimization を無効化する話です。 公式ドキュメントには手順が見つからず、試行錯誤した結果を紹介します。

無効化する方法(結論)

  • レジストリキー”IsWVDEnvironment” を削除する必要がある
  • Web RTC サービスの停止は不要
  • レジストリキー”IsWVDEnvironment”を削除せずにWeb RTC サービスを停止した場合は、デバイスが認識されるケースとされないケースがある。結果、レジストリキーの削除が確実
  • RDP settings を変更(”camerastoredirect:s:*”の追加など)したあとは、リモートデスクトップクライアント側でフィードを最新化する必要がある

結論は以上です。 以下の結論にいたるまでの試行錯誤を記録としてまとめていますが興味があれば見てみてください。

試行錯誤の記録

Web RTC サービスの停止

まず、Media Optimization を有効化する際にWeb RTC サービスをインストールしていることから、このサービスを無効化すれば結果としてMedia optimization も無効になると推測します。 やってみましょう。

まずはMedia optimization が有効であることを確認します。

サービス”RDWebRTCSvc” がRunning となっているので停止します。

停止しました。

Teams デスクトップアプリを再起動します。

プロファイルからAbout > Version を確認します。 “WVD Media Not Connected” ということで無効化に成功しました。

この状態でデバイスの状態を確認します。 Camera は”None”となりlogicool C615 を認識できていません。 Microphone は”Remote Audio”なのでこちらもlogicool C615 のマイクではなくリモートデスクトッププロトコルにおける仮想的なAudio input デバイスのリダイレクションとなっています。 ただこのMicrophone が Remote Audio になるのはは想定通りの動作です。

一度、WVD の仮想のWindows 10 からサインアウトし、再度サインインします。 状況は変わらず、Camera はNone のままです。WVD の仮想のWindows 10 を再起動もしてみましたがCamera はNone のまま。

また、前回のテストでMedia optimization を導入する前にWVD で利用出来ていたノートPCの内蔵カメラがWVD 上のWindows 10 では認識出来なくなったこともわかりました。  

RDP Settings の再確認

Host pool のリダイレクションの設定から見直します。

“Get-AzWvdHostPool -ResourceGroupName rg-bigriver.jp -Name bigriver |format-list Name, CustomRdpProperty”を実行し、RDP settings の内容を確認します。

CustomRdpPropertyの値は以下です。 前回の記事で有効にしていた ”camerastoredirect:s:*”が無くなっています。 これがローカルデバイスのカメラがリダイレクトされなくなった原因と考えられます。

audiocapturemode:i:1;audiomode:i:0;drivestoredirect:s:;redirectclipboard:i:1;redirectcomports:i:1;redirectprinters:i:1;redirectsmartcards:i:1;screen mode id:i:2;

設定がなくなった理由はさておき、再度設定することにします。

実行した内容は以下。

PS C:\WINDOWS\system32> $properties=”audiocapturemode:i:1;audiomode:i:0;drivestoredirect:s:;redirectclipboard:i:1;redirectcomports:i:1;redirectprinters:i:1;redirectsmartcards:i:1;screen mode id:i:2;camerastoredirect:s:*

PS C:\WINDOWS\system32> Update-AzWvdHostPool -ResourceGroupName rg-bigriver.jp -Name bigriver -CustomRdpProperty $properties
Location Name Type
——– —- —-
eastus bigriver Microsoft.DesktopVirtualization/hostpools

PS C:\WINDOWS\system32> Get-AzWvdHostPool -ResourceGroupName rg-bigriver.jp -Name bigriver |format-list Name, CustomRdpProperty
Name : bigriver
CustomRdpProperty : audiocapturemode:i:1;audiomode:i:0;drivestoredirect:s:;redirectclipboard:i:1;redirectcomports:i:1;r
edirectprinters:i:1;redirectsmartcards:i:1;screen mode id:i:2;camerastoredirect:s:*;

WVD の仮想のWindows 10 から一度サインアウトし、再度サインインします。 リダイレクションの設定を反映させるためです。 しかし、サインイン後のカメラのリダイレクションが機能しません。

原因がわかりました。 リモートデスクトップクライアント側で一度フィード情報を最新化する必要がありました。 上でRDP settings を変更しています。 変更後は利用者側でフィードを更新する必要があるということです。 これは実運用を考えるとやっかいな動作仕様です。 管理者側でRDP Settings を変更しても、エンドユーザ側でフィードを更新しないと新しい設定を利用できないということになります。 フィードの自動更新は4時間間隔なので夜間に実施、翌朝までに反映されるとは言えますが本当に翌朝の利用時に自動更新されるのか不安になってしまいますよね。 

リモートデスクトップクライアントから”最新の情報に更新”を実行します。そのあとで”SessionDesktop”からWVD の Windows 10 にサインインします。

Teams を起動し、デバイス設定を確認します(プロファイル > 設定 > デバイス)。 Camera に “MARS – Logicool HD Webcam C615″と表示されています。 Preview 部分にカメラ画像がリアルタイムで表示されます。

アカウントによる挙動の違い

念のため何回かサインアウト、サインインを繰り返す、また、仮想マシンを再起動して確認します。 その中でTeams からデバイスが認識されない事象にであいます。 Camera だけではなく、Speaker も Microphone もです。

このとき、デバイスマネージャでは リダイレクションによる Remote Audio もCamera devices もWindows 10 としては正常に認識しています。

Windows のサウンド設定からも Input はリダイレクトによるデバイスの”Remote Audio”として認識されています。 マイクに向かって声を出すと仮想のWindows 10 上の”Test your microphone” の目盛りが増減しますので正常にリダイレクションされています。

また、同じ仮想のWindows 10 に異なる物理PCから同時にサインイン(Windows 10 Multi-session)したのですが、後からサインインした方はTeams で正常にカメラを認識しました。 b2ms-0 という仮想マシンにノートPCからWVD に接続し、Teams からノートPCの内蔵のカメラ “FJ Camera”が認識できています。

以下はTeams で正常にデバイスを認識しているときのスクリーンショットです。logicool のweb camera C615 が正常に認識できています。

このあと1つ発見があります。 テストではMicrosoft アカウントを2つ準備し、それぞれにMicrosoft 365 E5 のライセンスを割り当てテストしているのですが、アカウントA では物理PC(デスクトップとノート)に関わらず正常に動作し、アカウントBは2台の物理PCどちらでもデバイスが正常に認識しません。

OSとしては アカウントAでもBでもデバイス(Speaker / Microphone / Camera )を正常にリダイレクション出来ていることから、WVD の問題というよりは Teams の問題のように思えます。 

正常に動作するアカウントAでは Media Optimization は”WVD Media Not Connected.” として認識されています。これはWeb RTC サービスを停止しつつもレジストリでは”IsWVDEnvironment” の値に”1“をセットし、WVD 環境でのTeams 利用を宣言しているためです。 Teams としてはレジストリキーからMedia Optimization を有効化しようとするのですがWeb RTC サービスに接続できない状態ということです。

画像に alt 属性が指定されていません。ファイル名: image-67.png

正常にTeams でデバイスを認識できなかったアカウントBでは”WVD Media Not Connected.”は表示されません。 同じ仮想マシンのWindows 10 にサインインしているにも関わらずにです。 ”IsWVDEnvironment“のレジストリキー自体はHKLM(ローカルマシンのレジストリ)なのでアカウントの違いは出ないはずですが、結果としては同じ仮想マシン上でアカウントごとにTeams の動作に差異が出ている状況です。

次はレジストリのキーを削除します。“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Teams\IsWVDEnvironment“を削除し、仮想マシンを再起動します。

正常動作しなかった アカウントBでもCamera デバイスとして”logicool HD webcam C615″を認識し、Speaker と Microphone も”Remote Audio” としてリダイレクションされたデバイスが認識出来ました。

結果だけみると レジストリキーに設定した”IsWVDEnvironment“をアカウントによって正常に読み取れていない感じです。 ただ、先にも書いた通り HKLM のレジストリですし、権限としてもAdministrators にフルコントロール、Users にもRead 権限は付与されています。 アカウントAもアカウントBもWindows の世界ではまったく同じ権限を付与しているので差がでないはずなのです。

試行錯誤のまとめ

今現在の、この現象(アカウントにより挙動が違う)の原因究明にはいたっていません。 仕事だったらOSやTeams ログを見たり、Process の挙動みたり、メモリの中身を見ていくことになりますが、あくまで個人でやっているブログなので優先度は下げて先延ばしとします。 とりあえずレジストキリーを削除すれば動作することもわかりましたし。

このあと、Web RTC サービスを起動&レジストリ削除での動作を確認し(デバイスを正常に認識)、今回の目的であったWeb RTC サービスの無効化方法の確認は終わりになります。

今回の記事はここまでとします。