Dawn Stream browser and input

The reference player and TypeScript SDK live under Gems/DawnStream/Frontend. Prefer current Chrome / Edge / Firefox (WebRTC, DataChannel, Pointer Lock).

Reference player

cd Gems/DawnStream/Frontend
npm install && npm run build
# Serve the build, then open player.html with query params

Example:

http://localhost:8080/player.html?signaling=ws://127.0.0.1:8090&token=<viewer-token>&autoConnect

Keys are case-insensitive. Boolean flags accept a bare name (?forceTurn == ?forceTurn=true); values false / 0 / off / no are false.

Common URL parameters

ParamPurpose
signalingSignaling WebSocket URL
tokenViewer auth token
streamerTarget streamer id (default matches engine StreamerId)
autoConnectConnect on load (hideUI also auto-connects)
hideUIMinimal chrome
forceTurnPrefer TURN for ICE
preferredCodecCodec preference hint (e.g. h264)
waitForStreamerRetry join until streamer is up
streamerAutoJoinIntervalMsJoin retry interval
mouseInput / keyboardInput / touchInput / gamepadInputToggle device classes
keyFilterMode / keyAllowlist / keyBlocklistClient-side key filter
controlSchemeSet locked for pointer-lock style control
startVideoMuted / autoPlayMedia autoplay policy helpers
statsPanel / settingsPanel / fullScreenControls / videoQpIndicatorUI element modes
graphsStats graphs (default on with builtin stats panel)
upstreamVideo / upstreamAudioExperimental uplink (needs matching engine flags)
webxr / onScreenController / recordingControlsOptional UI / experimental features

For embedding into your own page, build the Frontend package and use the SDK entry under Frontend/src/sdk/ (signaling connection, input controller, stats). Start from player.html / player.ts as the reference wiring.

Input Owner

  • With the MVP default MaxViewers=1, the authenticated viewer becomes Input Owner automatically.
  • Only the owner’s input is injected into AzFramework via RemoteInputDevice.
  • Blur or disconnect triggers ReleaseAll so keys/buttons do not stick.
  • Host can change owner at runtime: console ps_setInputOwner <viewerId|-> (- revokes). Arbitration policies (Input.ControlArbitration) matter when MaxViewers > 1—see Configuration.

Engine-side input settings

ConcernKeys
Keep local devices active while streamingInput.AllowLocalInput (default true)
Release remote presses on focus lossInput.ReleaseOnFocusLost (default true)
Filter keysKeyFilterMode = Off / allow / block + lists
Gamepad / text / XR notificationsGamepadInput, TextInput, XrInput

Client URL filters and engine KeyFilter can both apply—keep allow/block lists consistent when debugging “video but no keys”.

Optional entity component

Everyday streaming needs no level components. Optional:

  • DawnStream Video (DawnStreamVideoComponent) — display an upstream camera track. Requires Experimental.UpstreamVideo and a viewer that enables upstreamVideo.

Next steps


Copyright © 2026 DawnEngine. All rights reserved.

DawnEngine is a commercial 3D engine distributed under the DawnEngine end-user license agreement. Engine binaries and source are proprietary and are not covered by the licenses below.

Documentation only: the prose and templates on this site are a derivative work of Open 3D Engine (O3DE) documentation by the O3DE Contributors, used under CC BY 4.0 (documentation content), Apache 2.0 (site code), and the MIT license (inline code samples).

The open-source 3D engine that DawnEngine is built on top of is Open 3D Engine . DawnEngine is not affiliated with, endorsed by, or sponsored by The Linux Foundation or the O3DE project. “O3DE” and “Open 3D Engine” are trademarks of The Linux Foundation.