You can put your own launcher in front of your Unreal app on Eagle 3D Streaming — an exe that runs first, does whatever you need, and then starts the app. There is no setting for it: it works because of how Eagle 3D Streaming picks the exe it starts. This post explains that behaviour, how to use it when you prepare your zip, and what your launcher has to do so the stream still works.
Eagle 3D Streaming expects one exe at the top of your zip with the same name as your app — the name you upload the build under. Whatever exe has that name is the one it starts. It does not check that the exe is an Unreal app.
So when you prepare the zip for upload, you can use this expected behaviour: give
your launcher the app's name and put it at the top of the packaged
Unreal build, in the same folder as the Unreal exe. Leave everything
Unreal made where it is. The system then starts your launcher instead of the Unreal
exe. For an app uploaded as MyApp:
MyApp.exe <- your launcher, with the app's name
MyProject.exe <- the packaged build's exe, exactly as Unreal made it
Engine\
MyProject\
Content\
Paks\
Two things matter:
MyApp → MyApp.exe). So the app name must not be
your Unreal project's name (here MyApp, not MyProject) —
otherwise the launcher and the Unreal exe would need the same file name.Engine\ and your project folder stay exactly where Unreal put them. Do not
move the Unreal build into a subfolder: the upload's test launch looks for your project's
Content folder one level below the top.This is the only layout supported for now. We will make it more flexible later (for example a launcher in its own folder, or with any name). Need that sooner? Contact support (Email / Discord).
The stream comes from the Unreal app: it is the app, with its Pixel Streaming plugin, that sends the video. Your launcher only stands in front of it. So once it has done its own work, your launcher has to start the Unreal app — and start it the right way, as section 2 explains.
| rule | why | if it is missed |
|---|---|---|
| Start the Unreal app with every argument the launcher received, unchanged | They tell the app where to stream to, at what resolution and quality | The app starts but no video reaches the viewer |
| Keep running while the app runs | Eagle 3D Streaming watches the exe it started | A launcher that exits after starting the app looks like an app that stopped: the session ends |
| Exit with the app's exit code when the app stops | That is how a crash is told apart from a normal end | Crashes are reported as normal ends, or the other way round |
Give the launcher exe a file version of 5.1 or higher — best, your Unreal Engine
version (e.g. 5.4.4.0) |
Eagle 3D Streaming reads the Windows file version (VERSIONINFO, File version) of the exe it starts as the Unreal Engine version, and refuses Unreal Engine 4 (every Unreal Engine 5 version, 5.0 included, is accepted). An exe with no file version is refused too | The session never starts; the viewer sees “old verison 1.0.0.0 not suppoted for now” (with your launcher's version). Check it in Windows: right-click the exe → Properties → Details → File version |
When the viewer leaves, Eagle 3D Streaming stops the launcher together with every process it started, so the Unreal app stops with it.
Eagle 3D Streaming watches the exe it started — your launcher — not the Unreal app behind it. If the launcher ends, the system treats that as the app ending, even though the Unreal app may still be running. We tried it by stopping only the launcher in the middle of a stream:
So the launcher has to be at least as stable as the app: keep its own work small, catch its own errors, and never exit while the app is running.
Download the launcher demo (zip, 445 MB). It is a
complete build you can upload as it is: our demo launcher luncherDemo.exe
beside a packaged Unreal app (the E3DS Starter App), in the layout above. Already have your build ready? Take
luncherDemo.exe and launcher.json from it and put them beside your own Unreal exe.
See it running first:
open the
launcher demo's stream. This is the same zip, uploaded as the app luncherDemo: Eagle 3D Streaming
starts luncherDemo.exe, which starts the Unreal app, which streams to you.
luncherDemo — the
same name as the launcher, luncherDemo.exe.Extract the zip into a folder. This is what you get:
luncherDemo.exe <- the launcher, started first
launcher.json <- tells the launcher which exe to start
README.txt
E3DS_StarterApp.exe <- the packaged Unreal app's exe
Engine\
FeaturesPluginDemo56\ <- the Unreal project folder (Content\Paks inside)
E3DS_StarterApp.exe, Engine\ and FeaturesPluginDemo56\,
and copy your own packaged build into the same folder: your <Project>.exe,
Engine\ and <Project>\, exactly as Unreal made them.launcher.json so exe names your app's exe:
{ "exe": "MyProject.exe", "waitSeconds": 2 }luncherDemo.exe to the app name you will upload under, e.g. MyApp.exe
— a name that is not your project's name.MyApp).| field | what it does |
|---|---|
exe | Required. Which exe to start, as a path
relative to the launcher's own folder, so it works wherever the build is unpacked.
Use forward slashes. A path that leaves the folder (../, a drive letter)
is refused. |
workingFolder | Optional. The folder the app starts in, relative too. Default: the exe's own folder. |
waitSeconds | Optional. How long to wait before starting the app, standing in for your own launcher's work. Default 2. |
If launcher.json is not valid JSON or points at an exe that is
not there, the launcher says which in its window and in launcher.log, and
stops.
Check the layout first: the launcher, named exactly like the app, at the top of the zip beside the Unreal exe, with
Engine\ and your project folder (with Content\ inside) next to it. A zip with the Unreal
build moved into a subfolder, or with everything inside one extra top folder, does not pass the test launch.
Then check the four rules in section 2 — most often the file version (5.1 or higher), or a launcher that exits
right after starting the app.
Before the app starts, Eagle 3D Streaming puts your pak files (patches) into the
project's Content\Paks folder, which it finds one level below the top of your build. In the layout above
that is MyProject\Content\Paks, so pak files work with a launcher as they do without one.
Last updated