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, and move the
packaged Unreal build into a folder below it. 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
UnrealApp\
MyProject.exe <- the packaged build, exactly as Unreal made it
Engine\
MyProject\
The name is what matters: the launcher must be called exactly like the app name you
upload under (MyApp → MyApp.exe). The folder name
UnrealApp is only this example's choice — your launcher decides
where it looks.
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 (e.g. 5.1.0.0) |
Eagle 3D Streaming reads the file version of the exe it starts as the Unreal Engine version, and refuses anything older than 5.1 | 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, 440 MB). It is a
complete build you can upload as it is: our demo launcher luncherDemo.exe
in front of a packaged Unreal app (the E3DS Starter App).
Already have your build ready? Download
just the launcher (zip, 25 MB: e3ds-demo-launcher.exe, launcher.json and
README.txt).
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
UnrealApp\
E3DS_StarterApp.exe <- the packaged Unreal app
Engine\
FeaturesPluginDemo56\
UnrealApp\ and copy your own packaged build there:
your <Project>.exe, Engine\ and <Project>\, exactly as
Unreal made them.launcher.json so exe names your app's exe:
{ "exe": "UnrealApp/MyProject.exe", "waitSeconds": 2 }luncherDemo.exe to the app name you will upload under, e.g. MyApp.exe.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. |
Without launcher.json, it starts the first .exe in a folder
named UnrealApp. If the file 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.
Before the app starts, Eagle 3D Streaming puts your
pak files (patches) into the project's
Content\Paks folder. It looks for that folder one level below the top of
your build: MyProject\Content. When the Unreal build is moved into a
subfolder, as UnrealApp\ is in the example above, Content is
two levels down and the patch has nowhere to go: the app starts without it.
To use pak files with a launcher, put the launcher beside the Unreal exe, in the
same top folder, and leave Engine and your project folder where
Unreal put them:
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\
The launcher has the app's name, so the Unreal exe needs a different one: upload under an
app name that is not your Unreal project's name (here MyApp, not
MyProject). With our demo launcher, launcher.json is then
{ "exe": "MyProject.exe" }.
Moving Engine, the project folder or its Content away from the
top of the build has not been tested with every Eagle 3D Streaming feature. Pak files are
known not to work; other features may also expect the default layout. Keep the default
layout unless you need the subfolder.
Need the subfolder with pak files? It can be arranged with a small change on our side — ask support (support@eagle3dstreaming.com).
Last updated