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.
Running Windows 10, a Windows 10 Server, or a Window 2019 Server or later
An NVIDIA driver version 440.97 or later
Microsoft June 2010 DirectX SDK.
Refer to https://www.microsoft.com/en-us/download/details.aspx?id=8109.
Steam (not required with SteamVR Enterprise)
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.
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¶
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.
Install Steam and SteamVR.
Steam is not required with the SteamVR Enterprise version.
To install the NVIDIA CloudXR software, run the
When prompted to select components, select the components for the server-side installation.
Select the server components.
Deselect the client component.
Select the Redistributables checkbox, which is required only for the first-time install.
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.
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.
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.
CloudXR Server Installer Command-Line Arguments¶
To help automated installs, the installer accepts basic scripting.
Silent install with the default options: a server driver only, with all sub-components.
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
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
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
launchprocedure, which is not provided by the NVIDIA CloudXR SDK.