Dawn Stream diagnostics
Use console commands and stats to verify sessions, capture path, bitrate, and input. Prefix ps_* is historical (Pixel Streaming alignment); the product name is Dawn Stream.
Console commands
| Command | Purpose |
|---|---|
ps_startStreaming / ps_stopStreaming | Start / stop streaming |
ps_dumpStats | Print aggregated session stats |
ps_setBitrate <kbps> | Change target bitrate (clamped to min/max) |
ps_forceKeyframe | Request an IDR/keyframe |
ps_disconnectViewer [viewerId] | Drop a viewer (empty = active viewer) |
ps_statOverlay [0|1] | Toggle ImGui HUD |
ps_setInputOwner <viewerId|-> | Grant or revoke input (- revokes) |
ps_registerAppData <name> / ps_sendAppData <name> <text> | Binary app-message diagnostics |
ps_recordInput / ps_stopRecord [path] | Input recording (needs Experimental) |
ps_replayInput <path> / ps_stopReplay | Input replay |
ps_recordMedia <basePath> / ps_stopMedia | Media recording (needs Experimental) |
Enable Diagnostics.LogStats for periodic logs; StatsCsvPath (or --dawnstream-stats-csv) writes a time series. The reference player status bar shows client decode / jitter; the server emits stats.serverReport about every 2 s.
ps_dumpStats field guide
| Field | Meaning |
|---|---|
status | Runtime state (Disabled, streaming, …) |
viewer / owner / viewers | Primary viewer id, input owner, count |
backend | stub or libwebrtc (native also reports via backend string) |
WxH / codec | Encode size and codec |
conv | Whether GPU color convert is active |
capPath | zerocopy or readback |
capFps / sendFps | Capture vs send framerate |
captured / submitted / dropped | Frame counters |
capLat / convLat / encLat | Capture / convert / encode latency (ms) |
clientDec / clientJitter | Viewer-reported decode and jitter buffer (ms) |
target / actual | Target vs measured bitrate (kbps) |
rtt / loss | RTT and packet loss |
keyframes / kfReq | Keyframes sent / requests |
inAccepted / inRejected | Input events accepted / rejected |
reconnects | Signaling reconnect count |
transport / relay / proto | ICE candidate types and TURN relay flag |
How to read quickly
backend=stub+ black video → open media CMake gates ( Building for real media).capFps≈0with real backend → capture pass miss or no frames; checkCapturePassHierarchy.capFps>0butsendFps≈0→ encode / WebRTC send path issue.inAcceptedrising, game not moving → gameplay binding / focus, not Dawn Stream reject.inRejectedrising → not input owner or filter/schema rejection.capPath=zerocopywith rising RSS on reconnect → turn zero-copy off.relay=true→ media via TURN (expected on locked networks; watch latency).
CSV and overlays
Diagnostics.StatsCsvPath+ interval → machine-readable series for soak / weak-network tools underGems/DawnStream/Tools/.ps_statOverlay 1orDiagnostics.StatOverlay→ on-screen HUD in supported builds.- Player UI:
statsPanel,graphsURL params ( Browser and input).
Troubleshooting
| Symptom | Likely cause | What to try |
|---|---|---|
| Black video | Stub adapter; capture pass miss; codec negotiation | Confirm media gates; ps_dumpStats for backend/capFps/sendFps; check CapturePassHierarchy / CaptureSlot |
| Cannot reach signaling | Bad URL/port; token mismatch; firewall | Hit /healthz; align DAWNSTREAM_AUTH_TOKEN with PS_*; start with local ws:// |
| ICE failure | Missing TURN; UDP blocked | Configure TURN; try forceTurn; check IcePortMin/Max |
| Video but no input | Not input owner; key filter; blur release | Confirm owner; check KeyFilter; click video to focus |
| Stutter / low FPS | Low bitrate; software encode overload; resolution too high | Drop to 720p30; hardware encode; tune min/max bitrate; inspect dropped |
| Rising memory | Zero-copy on with frequent reconnects | Keep ZeroCopyCapture=false or limit reconnect rate |
| Stuck keys | Abnormal disconnect | Expect ReleaseAll; ps_disconnectViewer then reconnect |
| Capture works in Editor but not GameLauncher | Pass hierarchy root renamed | Rely on runtime remap; or set hierarchy to match window pipeline |
Next steps
- Deployment — production monitoring checklist.
- Reference — API and limits summary.