A VR app

Testing a VR Pixel Streaming build locally has one requirement the others do not: the page must be served over HTTPS, because browsers will not hand WebXR to an insecure page.

Before you start

A packaged Windows build of a VR-configured project, and a headset on the same network as the machine. Everything up to the last step happens on the computer; only the final step happens in the headset.

Step 1. Fetch the signalling server

Fetch Epic's signalling server exactly as in Step 2 of the flat local test (get_ps_servers.bat). Do not start it yet — it needs HTTPS first.

Step 2. Turn on HTTPS

In the SignallingWebServer folder, open config.json and set, on Unreal Engine 5.5 and newer (Pixel Streaming 2):

"https": true

On Unreal Engine 5.4 and older the key is "UseHTTPS": true — spelled exactly so, capitals included.

Setting https to true in config.json
This step is not optional for VR

WebXR — the browser API that puts the stream into the headset — is only available on a secure page. Over plain HTTP the stream still works as a flat picture, and the XR button simply never appears. If you get that far and cannot find the button, this is why.

Step 3. Add the certificate

HTTPS needs a certificate. Download the certificate ZIP and extract it into the SignallingWebServer folder.

The extracted certificate folder contents

Step 4. Start the signalling server

Start it as in Step 3 of the flat local test: SignallingWebServer\platform_scripts\cmd\start.bat. On Unreal Engine 5.4 and older the script is run_local.bat in the same folder. Leave the terminal open.

Step 5. Launch the app with VR arguments

Launch the app as in Step 4 of the flat local test, with three more arguments at the end:

-PixelStreamingEnableHMD -ResX=1920 -ResY=1080

The whole set of arguments then reads:

-log -AudioMixer -PixelStreamingIP=localhost -PixelStreamingPort=8888 -RenderOffScreen -AllowPixelStreamingCommands -PixelStreamingEnableHMD -ResX=1920 -ResY=1080
The VR streaming arguments in the shortcut Target field

-PixelStreamingEnableHMD is what makes it a VR stream. On Unreal Engine 5.5 and newer (Pixel Streaming 2) its current name is -PixelStreamingHMDEnable; the older name is still accepted, so a log line about it is a notice, not a failure. The resolution flags matter too:

Run the shortcut, and leave its terminal open too.

Step 6. Open it in the headset

  1. On the computer, run ipconfig and copy the IPv4 address.

  2. In the headset's browser, go to that address over HTTPS — for example https://192.168.1.25. Accept the certificate warning.

  3. Press the XR button to enter immersive mode.

You should be inside your app

If instead you see a plain server page with no stream, the build was packaged without Pixel Streaming enabled — the same failure as the flat local test. If you see the stream but no XR button, HTTPS is not actually on.

The signalling server page shown when Pixel Streaming was not enabled

Last updated