この記事のWVDは”Windows Virtual Desktop Spring 2020 Release”が対象です。
前回に続いて Windows Virtual Desktop Spring 2020 でTeams 会議を試していきます。以下の流れでテストしていきます。 今回の記事は”② Media optimization for Microsoft Teams”について、その中身や使い方などの事前調査が中心です。 実際に使ってみる話は次の記事となります。
- Teams 会議が使えるかざっくりテスト
- 5/29 にPreview 提供された Media optimization for Microsoft Teams
- Windows 10 Multi-session でのTeams
- PoC に役立つTeams パフォーマンス測定 & チューニング
まずは”Windows Virtual Desktop Media optimization for Microsoft Teams” の概要を把握することにします。
ドキュメントを読み込む前の私のイメージは以下です。 ローカルデバイス側で処理する方式自体はかなり昔から存在はしていたので(Citrix でも VMware にも。Teams だけではなくLync やSkype のころから)そのイメージです。
以下の絵の構成どおりかは現時点ではわかっていません。想像です。

あとはドキュメントを読み込む中で明らかにしたいことが2つあります。1つはローカルデバイス間の通信です。下の絵で行くと赤線部分です。 LANを経由するのか、インターネットにでるのかどうか。 仮にLANだとするとそれはそれで色々考える必要があります。 拠点が沢山ある場合の通信の到達性だったり、帯域の考慮だったりです。 また、管理者ないしユーザサイドで簡単にON / OFF できるのかも気になります。 同じブランチのローカルデバイス間はこのOptimization for Microsoft Teams の恩恵を受けることはできますが、帯域が乏しい拠点やワールドワイドのブランチ構成など、場合によってはこのOptimization for Microsoft Teams を利用しない場合が良いケースもありえるためです。

もう1つは Azure 上のWindows 10 仮想マシン間の通信です。 WebSocket モジュールの導入が必要なことから何らかの通信が発生することが予想されます。それはどこを通るのか?

ということでドキュメントの確認を進めます。
2020/5/29 にAzure のUpdates の1つとしてPreview リリースされました。 Windows 向けのリモートデスクトップクライアントの機能として提供されること、同週にリリースされた version 1.2.10260.0 で利用できること、 音声とビデオをローカルデバイスで処理すること、非Windows環境など従来の環境(最適化されていない環境)でも引き続きTeams は利用できること、が案内されています。

上のは話は概要の概要レベルです。 もうちょっと詳しい話は Microsoft Docs で2020/5/29 にマニュアルとして公開されています。

ちなみにURLで言語を変えると日本語ページへアクセスすることも可能です。 “en-us” を”ja-jp” に変えるだけです。

更新日を見るとわかる通り、2020/3/19 と2か月近く古いです。 他の項目でも英語版のみ最新情報が提供されていることが多いので基本は英語ページを確認することをお勧めします。 Chrome の翻訳機能などもありますし。

とりあえずこのページの内容を確認していきます。
冒頭に2つの注意書きがあります。1つ目はパブリックプレビューなんで本番環境に適用する前にはちゃんと事前に検証してね、一部機能はまだうごかないかもよ、とのこと。 2つ目はWindows 10 上のクライアントしか対応しないよ、とのこと。

後半の1つ目の段落では、Teams 自体の概要、そして、WVD に限らず VDI 環境でのTeams 利用はまた別のドキュメントを見てね、と。 この別のドキュメントは必読な内容だったりするので別途触れます。
2つ目の段落では、Azure のUpdate の告知サイトと同じ内容ですね。 音声とビデオをローカルデバイスで処理するよ、非Windows の従来のやり方も継続して使えるよ、と。
あと紹介されているリンクでは Teams 会議を利用する際に必要となるHost pool の3か所の設定が具体帝に記載されています。 前の記事でも触れていますが、camerastoredirect だけはAzure Portal から設定できず、PowerShell からとなることだけ注意が必要です。

前提条件の話。 条件は大きく3つ。 少ないと思うのはまだ早いです。 それぞれ別のページに詳細があります。 先に言ってしまうと1つ目の”Prepare your network“が結構やっかいです。 ローカルデバイス側で必要となる通信環境の話です。

“Prepare your network“ のポイントを紹介します。
- Office 365 が利用できるネットワーク環境であること (URL)
- Teams 利用のための通信ポートのオープン
- UDP ports 3478 through 3481
- IP addresses 13.107.64.0/18, 52.112.0.0/14, and 52.120.0.0/14
- Skype for Business と連携する場合はDNSレコードを追加
- sip のCNAME
- lyncdiscover のCNAME
- Network の最適化に関するタスク (URL)
- ネットワーク帯域幅の要件 (URL)
最後のネットワーク帯域幅の要件は少し詳しく紹介します。
まず、Teams がどのように音声とビデオに優先度をつけ、どのように帯域を消費するのか、その考え方の説明があります。 まず、帯域幅が不十分な場合は音声が優先されます。 帯域幅に制限が無い場合、ビデオについて1080の解像度と30fps(フレームレート)まで自動的に最適化します。 コンテンツ(画面共有)の場合は15fpsです。
表では利用シナリオごとに消費帯域の目安が提示されています。 リモート会議でカメラ無しでの音声とコンテンツ共有だけの場合は130 kbps です。ただし、これは peer to peer の場合です。 複数人の場合は500kbps / 1Mbps と一気に諸費帯域が増えることを留意しましょう。

次は、Teams desktop app の構成についてです。 (URL)
この構成の対象はWVDの仮想のWindows 10 です。 ローカルデバイス側ではなく Azure 上のVirtual Machine です。 必要なタスクは2つです。 1つは HKLM のレジストリの変更です。 2つ目は “Teams WebSocket Service” のインストールです。 実際のインストールとテストは次の記事で紹介します。

仮想のWindows 10 で必要なタスクが完了したら最適化の機能が有効になったかどうかを確認します。 (URL)
最後に既知の問題と制限事項についてです。 (URL)
クライアント(Teams desktop app)のインストールと設定に関する既知の問題と制限事項
- VDI上のTeams は自動更新されないためイメージを更新し展開しなおすか、MSIによる複数VMへの展開を考えよう
- UTC のTimezone しか表示できないとのこと(私は+9すればよいなとあまり気にならないのですが気にする人は多そうですね)
- Media optimization はWindows 10 のみサポート
- explicit HTTP proxies は非サポート
- explicit がNG。 つまり、透過型プロキシしかサポートしないということです。 PACでも手動でもプロキシ、Webフィルタリングや情報漏洩対策やマルウェア対策などのための、を個別に指定する運用を想定している場合は対策が必要ですね(Teams に関する通信をプロキシ対象から除外するか(できるのか???)、Azure のネットワークの中でポリシールーティングかけて透過プロキシに転送しつつ、上位のプロキシと階層化を組むなど)。

Teams 電話とTeams 会議に関する既知の問題と制限事項。
上のexplicit HTTP proxy が利用出来ないほどのインパクトがある制限は特にありません。
- ライブイベントは未対応
- 通話中または会議中にTeamsアプリを最小化すると復帰後に正常動作しないことがある
- アプリケーション共有は未サポート
- マルチモニター環境ではすべてのモニターが共有される
- 制御を渡したり、取得する機能は未サポート
- 1度に1つのの画面共有のみサポート
- 着発信のビデオストリームは720p の解像度に制限
- HIDボタン、LEDコントロールは未サポート

あとはトラブルシューティングに役立つログの話。 ログは “%appdata%\Microsoft\Teams\logs.txt “に出力されます。
Web client を利用している場合は”Ctrl + Alt + Shift + 1. “を押下すると”%userprofile%\Downloads\MSTeams Diagnostics Log DATE_TIME.txt “に出力される。

まとめです。実は知りたかった情報は公式のマニュアルでは見つかっていません。 ローカルデバイスで音声とビデオを処理するにあたり、Peer to Peer でどのような通信フローが構成されるのかもっと具体的に知りたかったのです。 次の記事になりますがパケットキャプチャしながら調べてみることにします。
