Holographic Remotingでクライアント(HoloLens2)からサーバ(PC)に向けて接続する
今回はHolographic Remotingの小技をメモします。
Holographic Remotingを使用する場面として、UnityのHolographic Emulationや以前記事にしたUnityアプリケーションでのHolographic Remotingリモートアプリを作成する場合があります。
xr-physics-work-etc.hatenablog.com
これらの場合、どちらもPC側からHoloLens2に接続を行います。
HoloLens2側のアプリである、Holographic Remoting Playerも、普通にアプリを起動すると、接続を待ち受けるモード(Listen)で起動されます。
しかし、下記説明を見るとHoloLens2からPCに接続しに行くこと(Connect)もできるようです。
今回はHoloLens2からPCに接続しに行く方法についてメモします。
動作確認準備
1. サンプルを取得する
今回は、リモート側アプリとして、Holographic Remotingの公式サンプルを使用します。
gitを用いて、リポジトリをcloneするか、Download ZIPを選択しZIPファイルをダウンロードします。
HoloLens2側で使用するHolographic Remoting Playerは、公式サンプルのものとMicrosoft Storeにあるものとはほぼ同じため、Microsoft Storeものを使用します。
2. サンプルアプリをビルドする
今回、リモート側アプリはdesktopを使用します。
MixedReality-HolographicRemoting-Samples/remote/desktop/
中のSampleRemote.sln
をダブルクリックします。
ビルドの設定をRelease x64
に変更します。
上部メニューからビルド
→デバッグなしで開始
を選択しビルドを行います。
なお、私の環境では下記エラーが発生しました。
ソリューションのプロパティからSpectre軽減策
を無効化することで解消しました。
ビルドに成功すると、\MixedReality-HolographicRemoting-Samples\remote\desktop\bin\Release
にSampleRemote.exe
が生成されています。
これが、Holographic Remotingのリモート側アプリです。
3. HoloLens2→PCの接続方法を確認する
リモートアプリについて、ソリューションからSampleRemoteApp.c
の中身を確認すると、コマンドライン引数から様々な設定ができることがわかります。
L216から、-listen
をコマンドライン引数につけるとリモートアプリがHoloLens2からの受信待ちの状態で、アプリが起動することがわかります。
同様にHolographic Remoting Playerアプリ側も確認します。
HolographicRemoting\MixedReality-HolographicRemoting-Samples\player\sample
のSamplePlayerMain.cpp
を確認すると、特にコマンドライン引数などで設定されていない場合は、m_playerOptions
に格納されているデフォルトの設定が適用され、Listenモードで起動します。
SamplePlayerMain.cpp該当部分 github.com
m_playerOptions
デフォルト値 github.com
HoloLens2の場合は、コマンドライン引数で指定することは(私の知る限りは)できません。
SamplePlayerMain.cpp
のL650を確認すると、プロトコルを使用して設定できるようです。
HolographicRemoting\MixedReality-HolographicRemoting-Samples\player\sample
のPackage.appxmanifest
から宣言の項目を確認すると、プロトコルの設定がされています。
そのため、URIスキームを使用してHolographic Remoting Playerを起動することで、引数を与えた状態で起動をすることができます。
動作確認
まず、リモートアプリを引数を与えて実行します。
Windows Powershellで\MixedReality-HolographicRemoting-Samples\remote\desktop\bin\Release
に移動し、下記のコマンドでリモートアプリを実行します。
.\SampleRemote.exe -listen
特にポート番号を指定していないので、待ち受けているポートは8265
です。
実行するとウィンドウが表示されます。
タイトルバーを見るとPress Space To Connect
と表示されており、スペースキーを押すと接続が開始されることがわかります。
スペースキーを押下すると、接続対象のIPアドレスが表示されますが、0.0.0.0
で表示されているためListen状態で接続待ちしていることがわかります。
そのあと、PC側のIPアドレスをipconfigなどで確認しておきます。
次にHoloLens2側でブラウザを開き、URLを入力する欄に下記URIを設定します。
ms-holographic-remoting://[PCのIPアドレス]:8265
※どうやら2021年8月1日現在、最新のWindowsHolographic バージョン 21H1で使用できるCromium版のEdgeブラウザでは、ブラウザからURIスキームを使用してのアプリ起動ができないようです(私のやり方が悪いだけ?)。この場合は、別途HoloLens2用アプリに組み込んで実行する必要があります。
IPアドレスが正しく設定されていれば、Holographic Remoting Playerが起動され、PC側のリモート側アプリに接続されます。
通常の方法でHolographic Remoting Playerを起動すると①のような表示になりますが、今回の方法で起動すると②のようになり、HoloLens2側から接続しに行っていることがわかります。
① Waiting for connection on
② Connecting to
これでHoloLens2からPCに接続する方法でHolographicRemoting接続することができました。
なお、Unityから触れるHolographic RemotingのAPIではリモートアプリから接続しに行くAPIしかないようです。
UnityからもListenの設定ができればよりHolographic Remotingの用途が広がるような気がします。
何か方法はないものか。。。