Streamer Service

The Streamer is the per-session workhorse: one instance of webstream.exe (no flag — this is the default mode) runs inside each pooled RDP session, captures the Windows application, relays input, streams audio, and enforces the workspace policy at the point where the user actually interacts with files, printing, and the clipboard.

Function

Ports and endpoints

Ports are derived from the pool account: basePortNumber + userNumber × 10. With the default base of 9000, webs01 listens on 9010, webs02 on 9020, and so on.

ListenerPort (webs01 example)Routes
WebSocket9010/capture (frames + input), /control (session control, clipboard, resize), /audio (Opus stream)
HTTP9011Session-scoped HTTP (file transfer endpoints, dialog assets)

The streamer serves plain WS/HTTP; browsers reach it only through the Gateway proxy, which terminates SSL and holds the session affinity.

Message contracts

Local — to the Session Manager (startup)

MessageDirectionWhen
REQUEST_SESSION_INFO:{username}Streamer → Session Manager (/control WebSocket)Startup, to obtain its session identity.
SESSION_INFO:{sessionUuid}|{commandLineParams}Session Manager → StreamerReply; the streamer then binds its ports and begins capture.

Outbound — to the Metrics Engine

EndpointMethodFrequencyPayload
/metrics/streamer/flushPOSTEvery 10, 30, or 60 s (metrics.server.flushIntervalSeconds){ nodeId, hostName, environment, region, userName, sessionId, tsUtc, intervalSecs, summary{…}, events[], instanceType, processorCount, totalMemoryGB } plus a one-time sessionContext block carrying { iamUsername, iamUserId, orgId, workspaceId, workspaceName, workspaceType }.
/activity/logPOSTSession, file, clipboard, and print events: immediate. Input activity: batched every 10 s (activityLogging.batchIntervalSeconds).{ type, nodeId, sessionId, username, timestamp, iamUsername?, workspaceName?, data } where type is session, input, clipboard, etc.

Both POSTs are asynchronous fire-and-forget with a 5-second timeout — telemetry never blocks the capture loop, and a down Metrics Engine does not affect streaming.

Outbound — to the Gateway (licence registry)

EndpointMethodFrequencyPayload / response
/gateway/license/streamer-checkinPOSTStartup, then every 15 s{ streamerGuid } → 200 OK, 403 (licence invalid), or 409 (session cap reached)
/gateway/license/streamer-checkoutPOSTLogoff / exit{ streamerGuid }{ success, activeStreamers }

Configuration

The Streamer consumes the largest share of app.config.xml:

Section / propertyPurpose
webstreamSettings.streamerModeperformance (fps priority), balanced, or lean (optimal for large regions).
webstreamSettings.remoteCompressionLevelPNG compression: 0 fastest (default), 1 optimal, 2 smallest.
webstreamSettings.remoteMaxDesktopWidth / HeightUpper bound on session resolution (default 3840×2160).
webstreamSettings.elevateStreamerPriorityRun at High priority for improved latency on dedicated streaming servers.
webstreamSettings.appRemoteStartExe / appRemoteAppMode / appRemoteStartArgsThe application to project, with {SESSION_ID} and {USERNAME} placeholders. The special value remotedesktop activates full desktop mode.
webstreamSettings.remoteDesktopSettingsDesktop features, session termination (maxSessionDurationMinutes, idleTimeoutMinutes), process allow/block lists, audio capture mode, isolation tiers (hklmShadow, identityHooks, jobContainment, alternateShell).
activityDetectionAdaptive frame rate: frameRateTarget during activity, frameRateIdle when idle, with activityThresholdKB and activityIdleDelaySeconds hysteresis.
regionCrcCache, regionOptimizerBandwidth optimisation: CRC references (~50 bytes) instead of re-sent regions; edge-scan region tightening.
trust, headlessDialogs, fileSharing, printingTrust level, file dialog interception, virtual shares, and print-to-PDF tunables.
metricsTelemetry mode (server recommended), server.baseUrl, flushIntervalSeconds, optional process metrics, node identity.
activityLoggingAudit trail POST target (serverUrl), batching, and timeout.
sessionRecordingRecording enable, storage path, format, retention. Policy hierarchy: user setting > workspace policy > organization default > this global config.

Aligned settings on peer services