Unreal-side questions that come up repeatedly when preparing an app for streaming: which build configuration, how to get logs out of it, how to reach files you packaged, and how your app should talk to the page.
Unreal offers several, and the choice is a trade between how fast it runs and how much it can tell you when something goes wrong.
| Configuration | Use it |
|---|---|
| Development | While building and diagnosing. Slower, and it keeps the logging and tooling you need to find a fault. |
| Shipping | For release. Fastest, smallest — and it strips out the logging, which is the trade. |
The names depend on the plugin. With the original Pixel Streaming plugin they are the Pixel Streaming Input component and the Send Pixel Streaming Response node. With Pixel Streaming 2 (Unreal Engine 5.5 and later) they are the Pixel Streaming 2 Input component and the Send Pixel Streaming 2 Response node.
Both plugins can handle the JSON that arrives from a web page, which is why the choice comes up at all.
Epic's own, built for exactly this, and it comes with the Pixel Streaming plugin you already have. Nothing extra to install and nothing extra to keep working across engine upgrades.
A general-purpose JSON plugin. Worth it only if you are already using it for other work in the project — then it is one JSON approach instead of two.
Sending in the other direction is the same either way: the Send Pixel Streaming Response node (Send Pixel Streaming 2 Response on Pixel Streaming 2), with the matching Input component on the actor. See sending and receiving data for the page's half.
Non-asset files — videos, text, configuration — need to be included in the package deliberately, and then found at runtime.
Put them in a folder under your project's Content folder and add
that folder in Project Settings > Packaging, under
Additional Non-Asset Directories To Copy (files your code
opens directly) or Additional Non-Asset Directories to
Package (files read through Unreal's own file system). At runtime,
build the path from FPaths::ProjectContentDir() rather than
writing it out in full.
A streamed app can show two cursors, which people report as lag. Optimising your app covers the fix.
Passing values to your app at launch, from the configuration or the link, is covered in command-line parameters.
Anti-aliasing smooths the jagged edges that appear when curves are drawn on a rectangular grid of pixels. It costs GPU time on every frame, and in a stream it competes with the encoder for the same GPU.
At a streamed resolution the difference is smaller than it is on a desktop monitor, because video compression softens edges anyway. If you are short of frame rate, this is a cheaper thing to reduce than most.
The full set of rendering and load-time changes that matter for streaming.
Last updated