Dawn Stream cloud streaming
Dawn Engine Dawn Stream pushes the locally rendered viewport to a browser over WebRTC and injects remote browser input back into the engine. The full application runs on a GPU host; end users only need a browser for try-before-you-buy, review, or demos—no client install.
Maturity: MVP delivered (core pipeline works). Shipped as the DawnStream Gem; off by default. Enable and start streaming explicitly. The recommended demo tier is 720p / 30 fps. With a real WebRTC stack and hardware encode, 1080p is a viable production-oriented tier. Higher concurrency and full cloud orchestration continue on the roadmap.
It does not replace the Multiplayer Gem: Dawn Stream carries encoded video and remote input, not authoritative game-state replication.
What problem this solves
Cloud rendering, digital-twin kiosks, remote review, and web demos often require shipping a full client or hand-rolling capture, encode, playback, and input return. Dawn Stream provides an end-to-end path:
- Dawn Engine renders on a GPU host;
- the Gem captures the Atom viewport, encodes, and sends over WebRTC;
- the browser plays low-latency video and returns input on a DataChannel;
- a signaling service handles discovery, auth, and SDP/ICE exchange.
With the Gem disabled or streaming stopped, local input, rendering, and networking behave as before. You do not need to add level components for everyday streaming—the system component activates with the Gem.
How it works
Browser Viewer ──HTTPS/WSS signaling──► Signaling Server
│ │
├── WebRTC media (video / optional audio) ► DawnStream Runtime (in-engine)
└── DataChannel input / control ──────────► RemoteInputDevice → AzFramework
▲
Frame Capture ← Atom Viewport
▼
Encoder → WebRTC
- The Streamer (Dawn Engine app) connects to signaling and registers capabilities.
- The Viewer (browser) authenticates, joins, and completes SDP/ICE.
- The engine captures viewport frames → color convert / encode → WebRTC RTP.
- Browser input arrives on the DataChannel into
RemoteInputDevice; gameplay treats it like a local device. - A bitrate loop reacts to loss / REMB; keyframes are on-demand via PLI/FIR (recommended default).
Layout under Gems/DawnStream/:
| Component | Role |
|---|---|
Code/ | Engine gem: config, signaling client, session, capture, WebRTC, remote input, diagnostics |
Signaling/ | Reference signaling server (Node.js, zero runtime deps) |
Frontend/ | Browser SDK + reference player player.html |
SFU/ | Optional Selective Forwarding Unit (fan-out; not required for MVP) |
Protocol/conformance/ | Cross-end golden protocol vectors |
Tools/ | E2E, weak-network, and soak harnesses |
Quick start (summary)
- Start signaling:
cd Gems/DawnStream/Signaling→node src/main.ts --port 8090→ check/healthz. - Enable the Gem; set
DAWNSTREAM_AUTH_TOKEN/PS_*env vars; launch with--dawnstream-enabled --dawnstream-mode AlwaysStreaming. - Build and open the reference player with
?signaling=.&token=..
Without libwebrtc / native CMake gates the engine uses a stub adapter (signaling and input work; no real video). Full steps and acceptance checks: Getting started.
Handbook chapters
| Chapter | Contents |
|---|---|
| Getting started | Prerequisites, three-step loop, acceptance checklist, stub behavior |
| Building for real media | Route A/B CMake gates, encoder probe, zero-copy warnings |
| Signaling | Standalone vs embedded, tokens, flags, health checks |
| Browser and input | player.html, URL params, Input Owner, filters |
| Configuration | Precedence, recommended tiers, setreg / CLI by block |
| Diagnostics | ps_* commands, stats fields, CSV, troubleshooting |
| Deployment | Topologies, TURN, firewall, NVENC, security checklist |
| Reference | Command / key cheat sheets, API summary, limits |
Glossary
| Term | Meaning |
|---|---|
| Streamer | Dawn Engine process that captures, encodes, and sends media |
| Viewer | Browser client that plays video and sends input |
| Signaling | WebSocket service for auth, discovery, and SDP/ICE relay (not media) |
| Input Owner | The viewer currently allowed to inject input |
| Stub adapter | Default WebRTC backend when media CMake gates are off—no real frames |
| Route A | libwebrtc wrapper with internal software encode |
| Route B | Native libwebrtc + optional hardware encode (e.g. NVENC) |
| Embedded signaling | In-process signaling server (local / Editor demos) |
| SFU | Optional Selective Forwarding Unit for one-to-many fan-out |
Limits and related capabilities
You can rely on:
- Optional gem; single-streamer / single-viewer end-to-end video and mouse/keyboard input when media gates are on;
- setreg + CLI + diagnostic console commands; standalone or embedded signaling; STUN/TURN config entry points;
- Route A software encode for demos; Route B hardware encode and GPU color convert when built correctly;
- Bitrate feedback, on-demand keyframes, input ownership and disconnect release.
Do not assume:
- Real video without CMake media gates (stub has no media);
- Streaming on by default (needs
Enabledplus mode / CLI); - Zero-copy is safe for long-lived reconnect loops (off by default for a reason);
- Dawn Stream replaces multiplayer state sync or every need for a local client;
- Multi-viewer arbitration, full cloud orchestration, SFU, HDR/XR, and similar are default deliverables (mostly extensions or experimental flags).
Next steps
- Getting started — shortest path to a working local loop.
- Introduction — Dawn Engine capabilities and how it differs from O3DE.
- World Streaming / Double-precision rendering — large-world scenes often pair with cloud tryouts.
Getting started
Prerequisites, three-step local loop, acceptance checks, and stub-media behavior for Dawn Stream.
Building for real media
Enable Route A or Route B WebRTC, probe encoders, understand zero-copy capture, and confirm real media with diagnostics.
Signaling
Standalone and embedded signaling, auth tokens, server flags, health checks, and production notes.
Browser and input
Reference player URL parameters, embedding tips, Input Owner, key filters, and gamepad/text input.
Configuration
Config precedence, recommended tiers, and Settings Registry / CLI keys by block for Dawn Stream.
Diagnostics
Console commands, stats field meanings, CSV logging, and troubleshooting for Dawn Stream.
Deployment
Production topologies, TURN, firewall ports, NVENC concurrency, and security checklist for Dawn Stream.
Reference
Cheat sheets for Dawn Stream console commands, CLI flags, APIs, and capability limits.