###### tags: `CloudXR` `Nvidia` `Unity` `VR`
# NVIDIA CloudXR SDK
VR Streaming Solutuin.
## Cloud XR Setup
* Date: 2021/9/10 - Build success.
* SteamVR Version: 1.19.7
* CloudXR Version: 3.0 (2021-08-04-CloudXR-SDK)
* Platform: Windows 10/11 - 21H2
https://docs.nvidia.com/cloudxr-sdk/index.html
Cloud XR Server 測試畫面:


### Setup CloudXR Server
解壓縮 2021-08-04-CloudXR-SDK

### Run CloudXR-Setup
執行 `...\2021-08-04-CloudXR-SDK\Installer\CloudXR-Setup.exe`
安裝完成後, 開啟 SteamVR/左上角 Menu/Settings/確認CloudXRRemoteHMD 已開啟
<font color=#FF0000>若不使用 CloudXR 需關閉, 否則會無法正常執行原本的 SteamVR</font>


### Build CloudXR Client APP (Android OVR)
1. 開啟 Android Studio

2. Build APK

3. 若發生錯誤
在 `…\2021-08-04-CloudXR-SDK\Sample\Android\OculusVR\app\libs`
補上以下資料:
+ CloudXR.aar → 路徑 …\2021-08-04-CloudXR-SDK\Client\Lib\Android
+ oboe-1.5.0.aar → https://github.com/google/oboe/releases/
+ ovr_sdk.zip → https://developer.oculus.com/downloads/package/oculus-mobile-sdk/1.35.0/ (下載完成後將檔名改成 ovr_sdk.zip)

4. Build Success!!
Build 成功後產生 app-debug.apk 在以下路徑:
`…\CloudXR-SDK\2021-08-04-CloudXR-SDK\Sample\Android\OculusVR\app\build\outputs\apk\debug`
將 app-debug.apk 複製至 adb 資料夾內, 我這邊為 C:\adb (路徑不限看個人)

另外, 在 adb 內資料夾建立文字檔, 檔名為 CloudXRLaunchOptions.txt
新增以下內容 ip 請自行修改為 Server 電腦 的IP (可利用 cmd/ipconfig 查詢)
``-s 172.20.10.2``
5. 安裝 app-debug.apk
進行此步驟, 前先接上 Oculus Quest 2, 並確保電腦可存取 Oculus quest 2 內的文件.
輸入 adb install app-debug.apk

6. 複製 CloudXRLaunchOptions.txt
輸入
```
adb push CloudXRLaunchOptions.txt /sdcard/cloudXRLaunchOptions.txt
```

### Run CloudXR
1. Server → PC, Client → Quest2 需先連到同一個網域(建議為5G網路)
2. 開啟 SteamVR
還未開啟 Client 時, SteamVR 顯示的狀態如下

3. 開啟 Oculus Quest2 app-debug
Client 開啟成功後, 顯示的狀態如下:

4. 移除 USB Type C
## 防火牆/Port 設置
1. 防火牆允許應用程式如下圖:


VRServer, VRService路徑 `...\Program Files (x86)\Steam\steamapps\common\SteamVR\bin\win64`
2. Port 為 47999-48005, 需要為開啟狀態

## 在雲端環境中運作 CloudXR
1. 雲端空間的VM 開啟 Web搜尋列 輸入 ipconfig.me

2. 確認防火牆/Port
3. 建立 CloudXRLaunchOptions
4. 開啟 SteamVR
5. 開啟 Client CloudXR-app
## Issue
1. Client/Server 顯示影像為綠色
修正方法 改為使用 VNC

> Microsoft Remote Desktop (RDP) is known to be incompatible with CloudXR, and it causes side effects such as a green video stream, and sometimes, network connection issues.
* https://docs.nvidia.com/cloudxr-sdk/usr_guide/cxr_server.html
* https://forums.developer.nvidia.com/t/connecting-to-cloudxr-server-vr-headset-stays-blind/187718
# Reference
1. Stream virtual reality content from a virtual workstation using NVIDIA CloudXR
https://cloud.google.com/community/tutorials/streaming-vr-content-from-a-virtual-workstation-using-nvidia-cloudxr
2. Field Notes: Streaming VR to Wireless Headsets Using NVIDIA CloudXR
https://aws.amazon.com/tw/blogs/architecture/field-notes-streaming-vr-to-wireless-headsets-using-nvidia-cloudxr/
3. SteamVR 做為企業 / 政府用途
https://partner.steamgames.com/doc/features/steamvr/enterprise