Use your own launcher

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.

1. How Eagle 3D Streaming picks the exe to start

The exe at the top of your zip with your app's name

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.

Your launcher cannot stream by itself

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.

2. What the launcher must do

Four rules, and what breaks if one is missed
rulewhyif 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.

If the launcher stops or crashes during the stream

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:

  • about 4 seconds later the viewer's page showed "App Crashed – Try again", and the session was reported as a crash, with the launcher's exit code;
  • the Unreal app it had started was left running on its own for about a minute and a half before it stopped.

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.

3. Try it with our demo: download, upload, stream

A complete build with the launcher already in front

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.

First, upload it as it is

  1. Upload the zip from the Control Panel as usual, with the app name luncherDemo — the same name as the launcher, luncherDemo.exe.
  2. Open the app's link. The launcher starts, waits 2 seconds, then starts the Unreal app, and the stream plays.

Then look inside

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\

Put your own app beside the launcher

  1. Delete what is inside UnrealApp\ and copy your own packaged build there: your <Project>.exe, Engine\ and <Project>\, exactly as Unreal made them.
  2. Edit launcher.json so exe names your app's exe: { "exe": "UnrealApp/MyProject.exe", "waitSeconds": 2 }
  3. Rename luncherDemo.exe to the app name you will upload under, e.g. MyApp.exe.
  4. Zip the folder's contents — the launcher must be at the top of the zip, not inside another folder — and upload it with that app name (MyApp).

launcher.json

fieldwhat it does
exeRequired. 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.
workingFolderOptional. The folder the app starts in, relative too. Default: the exe's own folder.
waitSecondsOptional. 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.

4. Troubleshooting

Pak files, and what a subfolder changes

Pak files are not applied when the Unreal app is in a subfolder

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" }.

Other features with a subfolder

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).

Related

Last updated