Mouse and fullscreen

How the pointer behaves in a Pixel Streaming app, why one setting matters more than the rest, and how to go fullscreen from Blueprint.

Two cursors, and only one of them should be visible

A streamed app has two possible mouse cursors. Unreal can draw one into the frame it renders, and the browser has one of its own. Which you use is the single largest input decision in a Pixel Streaming project.

SetupWhat it feels like
Unreal cursor onlyThe cursor lags the hand. It is drawn into the video, so it arrives a round trip late.Avoid
Browser cursor onlyImmediate. The browser draws it locally and Unreal just receives the input.Use this
BothTwo cursors on screen, fighting each other.Avoid
Why the difference is so large

An Unreal-drawn cursor has to travel to the server, be rendered into a frame, be encoded, and come back before it moves — so every millisecond of network delay is visible in the pointer itself. A browser cursor never leaves the viewer's machine. On a UI-heavy app — a configurator, a menu-driven tool — this is the difference between sluggish and instant.

Hovering and locked mouse

Separately from which cursor is drawn, there are two schemes for how the pointer behaves:

Apps that do both usually switch as the viewer moves between them. Place BP_E3DS_PS_Actor in the level and call E3DS Change Mouse Control Scheme, choosing HoveringMouse or LockedMouse from the dropdown. (The screenshot shows the older node, without the E3DS prefix.)

The Change Mouse Control Scheme node with its dropdown

Without the plugin: add a PixelStreamingInput component to an actor, and send one of these with Send Pixel Streaming Response:

{"cmd":"switchMouseControlSchemeTo","value":"HoveringMouse"}
{"cmd":"switchMouseControlSchemeTo","value":"LockedMouse"}
Sending the mouse scheme message manually

The same switch can be made from the page instead of from the app — see controlling the stream.

Fullscreen

With a BP_E3DS_PS_Actor in the level, drag from your trigger's Pressed pin and add the E3DS toggle Fullscreen node. That is the whole Blueprint. (The screenshot shows the older node, named Toggle Fullscreen.)

The Toggle Fullscreen node wired to a key press
What you should see

Pressing the key once puts the browser window into fullscreen; pressing it again leaves. If nothing happens, the viewport did not have focus — click into it first.

Fullscreen can also be driven from your own page, which is what you want when the button belongs to your interface rather than to the app: fullscreen from the page.

Last updated