# Tutorial — Pixel Streaming 2
*Augmented Traveler local tutorial.* Back to [[Unreal — Tutorials]] · build first: [[Tutorial — Packaging Builds for Each Surface]]
How to run a figure on a **GPU server** and stream it to a **web browser**, whether on a phone, a school Chromebook or a museum tablet, with **Pixel Streaming 2**. The visitor sees the full-quality (Cine) character without installing anything.
> **Draft.** The launch argument names may differ between Pixel Streaming and Pixel Streaming 2. Confirm them in Epic's migration guide on the first test.
## 1. When to use it
| Good for | Not good for |
|---|---|
| School and classroom access (web link, no install) | Crowds of simultaneous users (**one GPU instance per active visitor**, so cost grows with users) |
| Showing the Cine character on weak devices | Poor connections (it needs a stable, low-latency link) |
| Remote demos to partners and funders | Offline venues |
## 2. The parts
```
Unreal app (packaged, Pixel Streaming 2 plug-in)
⇅ WebRTC video/audio/input
Signalling web server "Wilbur" (+ optional SFU) — from Epic's PixelStreamingInfrastructure repo
⇅
Browser frontend (TypeScript library; our own caption/ask UI)
```
- **Pixel Streaming 2** was introduced in 5.5. In 5.8 the original plug-in still ships alongside it, for migration. **We use Pixel Streaming 2 only.**
- **Infrastructure** lives at `github.com/EpicGamesExt/PixelStreamingInfrastructure`, with **one branch per engine version**. Use the **UE5.8** branch.
## 3. Local test (one machine)
1. Turn on the **Pixel Streaming 2** plug-in in the project. Package a Development Win64 build.
2. **Clone the infrastructure repo** at the UE5.8 branch. In `SignallingWebServer/platform_scripts/cmd/`, run `setup.bat` once, then `start_with_stun.bat`.
3. **Launch the app** with the streamer URL, for example `-PixelStreamingURL=ws://127.0.0.1:8888 -RenderOffScreen`. *Check the argument name for Pixel Streaming 2.*
4. Open `http://127.0.0.1` in a browser. Click to start, then test the microphone and the push-to-talk button.
5. **Defaults to know:**
- streamer port **8888**, player port **80**;
- bitrate cap 40 Mb/s;
- "stream sharing" was removed; use the **SFU** for one-to-many.
## 4. Our frontend
- **Use Epic's TypeScript frontend library** and add our UI: captions, an "Ask" button, a "Pause", and a credit line on the label.
- **Microphone:** browsers require HTTPS and a user click before opening the mic. Plan the prompt wording with the accessibility designer.
- **Schools:** the classroom endpoint and allowlist are owned by the DevOps engineer ([[Position — DevOps Engineer]]).
## 5. Hosting options
| Option | Notes | Link |
|---|---|---|
| Our own cloud VMs (AWS, Azure, GCP) with GPUs | Most control. The TensorWorks cloud guide covers set-up | https://github.com/TensorWorks/PixelStreamingCloudGuide |
| Azure reference architecture | Microsoft's pattern for Unreal Pixel Streaming | https://learn.microsoft.com/sv-se/gaming/azure/reference-architectures/unreal-pixel-streaming-in-azure |
| Managed platform (e.g. Arcware) | Fastest to run; per-minute pricing; less control | https://www.arcware.com/cloud |
| Epic's hosting and networking guide | STUN/TURN, ports, scaling | https://dev.epicgames.com/documentation/en-us/unreal-engine/hosting-and-networking-guide-for-pixel-streaming-in-unreal-engine |
**Budget note:** streaming is paid per GPU-hour. Keep a session limit (for example 10 minutes) and an idle timeout. Put the hosting cost into the next budget revision once a pilot sets real numbers.
## 6. Check before a public link
- [ ] HTTPS with a valid certificate; TURN server for school networks
- [ ] Session limit and idle timeout; a "busy, try again" page when all instances are in use
- [ ] Mic permission flow tested on iPhone Safari, Android Chrome and a Chromebook
- [ ] Captions on by default
- [ ] Logs contain no audio or personal data beyond what the privacy policy allows
## Sources
- Epic, Pixel Streaming 2 overview: https://dev.epicgames.com/documentation/unreal-engine/pixel-streaming-2-overview-in-unreal-engine?lang=en-US
- Epic, Getting started with Pixel Streaming: https://dev.epicgames.com/documentation/en-us/unreal-engine/getting-started-with-pixel-streaming-in-unreal-engine
- Epic, Pixel Streaming 2 migration guide: https://github.com/EpicGamesExt/PixelStreamingInfrastructure/blob/master/Docs/pixel-streaming-2-migration-guide.md
- Epic, PixelStreamingInfrastructure repo: https://github.com/EpicGamesExt/PixelStreamingInfrastructure
- Epic, Signalling server README: https://github.com/EpicGamesExt/PixelStreamingInfrastructure/blob/master/SignallingWebServer/README.md
- Epic, Hosting and networking guide: https://dev.epicgames.com/documentation/en-us/unreal-engine/hosting-and-networking-guide-for-pixel-streaming-in-unreal-engine
- Epic, UE 5.8 release notes (UE Remote uses Pixel Streaming 2): https://dev.epicgames.com/documentation/unreal-engine/unreal-engine-5-8-release-notes?lang=en-US
- Full list: [[Sources — 2026-09-19]]