The outcome: a user puts on a Quest, opens a URL in the headset’s browser, taps “Enter VR,” and is inside your Unreal project — no APK install, no app store, no native build.Documentation Index
Fetch the complete documentation index at: https://docs.streampixel.io/llms.txt
Use this file to discover all available pages before exploring further.
What works, what doesn’t
Streampixel streams pixels, and WebXR puts those pixels onto a stereo display. Combined, they let any WebXR-capable browser become a VR client.| Status | |
|---|---|
| Meta Quest 2 / 3 / Pro (built-in browser) | Supported |
| Apple Vision Pro (Safari) | Supported |
| Pico 4 / Neo 3 (built-in browser) | Supported |
| Desktop VR via Chrome/Edge + WebXR (Index, Vive, Rift) | Supported |
| Native APK / sideloaded app | Out of scope — Streampixel is browser-first |
| iOS Safari (non-Vision Pro) | No WebXR; falls back to flat 2D stream |
Streampixel does not ship a native VR runtime. WebXR is the bridge — if a device’s browser exposes a WebXR session, the SDK can hand the stream to it.
Step 1 — Prepare the Unreal project
VR streaming is not a runtime toggle on the Streampixel side; it is a build-time choice in Unreal. Your project must:- Render in stereo (single-pass instanced is recommended).
- Target a stable framerate matching the headset (72, 90, or 120 Hz).
- Use a forward renderer for best perf on standalone headsets.
Step 2 — Enable XR input in the SDK
The SDK has anxrInput config flag. Enable it on the page that will request the WebXR session:
xrInput: true tells the SDK to listen for WebXR controller, hand, and pose events and forward them to Unreal as input. Without it, the headset will display the stream but controllers will not function inside the UE world.
Step 3 — Trigger the WebXR session
Browsers require a user gesture (a tap or click) to enter immersive mode. Wire up a button:Step 4 — Pick the right codec
Standalone headsets do most decoding in fixed-function silicon. The decoder’s codec support is what determines whether your stream plays smoothly or stutters.| Codec | Quest 2 / 3 / Pro | Vision Pro | Pico | Desktop VR |
|---|---|---|---|---|
| H264 | Hardware-decoded, recommended | Hardware-decoded | Hardware-decoded | Yes |
| VP8 | Software fallback, drops frames | Limited | Limited | Yes |
| VP9 | Software fallback | Software | Software | Yes |
| AV1 | No (not in browser) | No | No | Chrome desktop only |
Step 5 — Tune for the device
| Headset | Native refresh | Recommended target | Per-eye resolution |
|---|---|---|---|
| Quest 2 | 72 / 90 Hz | 72 Hz | 1832×1920 |
| Quest 3 | 90 / 120 Hz | 90 Hz | 2064×2208 |
| Quest Pro | 90 Hz | 90 Hz | 1800×1920 |
| Vision Pro | 90 Hz (varies) | 90 Hz | High DPI per eye |
| Pico 4 | 72 / 90 Hz | 90 Hz | 2160×2160 |
Latency
VR is unforgiving of lag. A delay between head movement and rendered frame that you would never notice on a 2D stream becomes nausea-inducing in stereo. Things that move latency in the right direction:- Closest region. A 30 ms RTT improvement is more valuable than any encoder tweak.
- Wired or 6 GHz Wi-Fi. Standalone headsets on 2.4 GHz Wi-Fi are the most common cause of “this feels laggy” complaints. Quest 3 and Vision Pro on Wi-Fi 6E typically work well.
- H264 over VP9. H264 hardware decode shaves several ms compared to software-decoded VP9.
- Lower
minQPin the dashboard’s adaptive settings, only if your bitrate budget allows it. Quality dips at the same bitrate, but frames arrive faster.
Gotchas
Vision Pro Safari requires HTTPS, no exceptions
Vision Pro Safari requires HTTPS, no exceptions
localhost over HTTP works during development on Quest browsers, but Safari on Vision Pro will not surface the WebXR API on insecure origins. Use a local HTTPS dev server (mkcert, Caddy, or vite --https) to test there.The Enter VR button must be inside a user gesture
The Enter VR button must be inside a user gesture
Controllers and hand tracking need explicit features
Controllers and hand tracking need explicit features
Pass
optionalFeatures: ['hand-tracking'] if your UE project expects hand input. If you require it, use requiredFeatures instead — the session will fail to start on devices without hand tracking, which is the right behavior for hand-only experiences.Audio output device on standalone headsets
Audio output device on standalone headsets
Quest and Pico route audio to the headset speakers by default. Some users with paired Bluetooth headphones experience added audio latency that does not match the visual stream. Document this for your testers; there is no fix on the streaming side.
Battery drain
Battery drain
A standalone headset decoding a 30 Mbps H264 stream while running its display at 90 Hz drains the battery in roughly 90–120 minutes. For longer experiences, recommend tethered power or build in checkpoints.
Next steps
Prepare UE for VR
Project settings, plugins, and rendering paths for VR builds.
Codec settings
Lock H264 as the default for headset audiences.
Performance tuning
Bitrate and resolution recipes that ship without dropped frames.
Regions
Pick the closest region — VR latency is dominated by RTT.