NVIDIA CloudXR Server

CloudXR Server Prerequisites

  • A VR-ready system with an NVIDIA GPU, including Quadro GPUs, which is based on the NVIDIA Pascal™ GPU architecture or later.

  • Steam (not required with SteamVR Enterprise)

  • SteamVR

  • NVIDIA CloudXR SDK server portion

  • OpenVR application to stream to client

Remote Desktop Software

If you need to remotely control your server, we recommend that you use VNC. Other compatible remote desktop solutions that we have tested include NICE DVC and Teradici.

Warning

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.

Setting up the CloudXR Server

Use the Installer\CloudXR-Setup.exe file to set up the NVIDIA CloudXR server. When prompted to select the components to install, ensure that you select only the server portion with redistributables.

  1. Install Steam and SteamVR.

    Note

    Steam is not required with the SteamVR Enterprise version.

  2. To install the NVIDIA CloudXR software, run the CloudXR-Setup.exe file.

  3. When prompted to select components, select the components for the server-side installation.

    1. Select the server components.

    2. Deselect the client component.

    3. Select the Redistributables checkbox, which is required only for the first-time install.

    4. Select the Audio Capture Driver checkbox, which installs the driver for the virtual audio input/output devices required to enable sending and recieving audio between server and client.

    ../_images/server_setup.png

    Choosing the CloudXR Server

    Note

    The installer completes the following tasks:

    • Automatically opens the Windows Firewall port that is required to establish a CloudXR session.

    • Checks for the HEVC codec capability.

      If this capability is not detected, the installation will fail.

    See Command-Line Options for information additional ways to customize the CloudXR server.

  4. Launch SteamVR.

    As long as no headset is connected locally to the server, this step launches the CloudXR server driver.

    Until the client is started and is connected, the Steam interfaces displays the Headset Not Detected message. However, the first time the CloudXR server driver is run, the Steam interface will display the Plug in your VR Device message.

    The headset icon at the bottom of the SteamVR mini window changes to indicate that CloudXR has been installed and is active. The icon displays the letters CXR on the headset as shown in The CloudXR icon. The icon turns green when the headset is active and is greyed out when the headset is inactive. You will not see the icons in the SteamVR mini window until a client attempts to connect to the server.

    ../_images/cloudxr_icon.png

    The CloudXR icon

CloudXR Server Installer Command-Line Arguments

Note

To help automated installs, the installer accepts basic scripting.

Option

Action

/S

Silent install with the default options: a server driver only, with all sub-components.

/FORCE=1

Install even if SteamVR is not found. The CloudXR server driver needs to be manually registered with SteamVR.

Running OpenVR Applications on the Server

You typically launch the application that will be streamed after a client is connected to the server. Otherwise, the application will report that there is no connected headset. When a client first connects, it reports its specifications, such as resolution and refresh rate, to the server driver, which can then be provided to the application.

You may also pre-configure the server for a particular client device which will allow you to start the server side application before a client connects. The tradeoff is that the server will now only accept connections from the pre-configured client and reject any other client devices. To use this feature you will need to create a file named CloudXRClientDescriptor.txt and place it in the C:\Users\*user-name*\AppData\Local\NVIDIA\CloudXR\ folder.

Here are a few example files for some common client devices:

#Oculus Quest 2
deliveryType : 2
width : 1832
height : 1920
maxResFactor : 1.2
ipd : 0.058077
fps : 72
proj : -1.279942 1.279942 -1.191754 1.191754 -1.279942 1.279942 -1.191754 1.191754
ctrlType : 2
#HTC VIVE Focus 3
deliveryType : 2
width : 1720
height : 1720
maxResFactor : 1.2
ipd : 0.062217
fps : 90
proj : -1.616406 0.839576 -1.119243 1.117210 -0.830801 1.634623 -1.119848 1.129838
ctrlType : 2
#iPad Pro 11
deliveryType : 1
width : 1154
height : 770
maxResFactor : 1
ipd : 0.062000
fps : 60
proj : -0.611422 0.617268 -0.411303 0.408533 -0.611422 0.617268 0.000000 0.000000
ctrlType : 0

Note

The contents of these files can change for different IPD values or refresh rates.

To generate a CloudXRClientDescriptor.txt file for a device, connect the device to a server without a preconfigured client, and look for HandleDeviceDescriptor() in the CloudXR Server log.

[17:40:00.448] VisionServerDriver::HandleDeviceDescriptor()
// width, height, fps and maxResFactor (max h / h or max w / w typically 1.2 for HMDs and 1 for tablets)
[17:40:00.459] Render parameters: 1832 x 1920 @ 72.00 (max 2198 x 2304)
[17:40:00.459] Target queue time: 0.012000
// deliveryType and ipd
[17:40:00.459] Display type: 2, IPD: 0.067588
// proj (keep the values remove the parentheses and x)
[17:40:00.459] Projections: (-1.000000 1.000000 -1.191754 1.191754) x (-1.000000 1.000000 -1.191754 1.191754)
// ctrlType
[17:40:00.459] Controller type: 2

Similarly, the virtual audio devices that the application will use to read and write audio data are only created after the client connects. To minimize the possibility of the OpenVR application selecting the wrong audio device, we reccomend that you disable the physical audio input and output devices on the server. This step is optional because the CloudXR server will attempt to set the virtual devices as the default ones, but some applications might not be written to handle this gracefully.

Server applications can be started in the following ways:

  • By pressing a button on the controller to invoke the SteamVR menu on the server.

Pressing the system button on a controller typically brings up the system menu on the client device and does not forward the command to the server. In the sample applications that are provided with this SDK, we have remapped one of the controller buttons to invoke the server driver system menu. On the Quest, for example, it is the left controller menu button.

  • By manually launching the application on the server.

  • By starting the application using a separate launch procedure, which is not provided by the NVIDIA CloudXR SDK.