Eagle 3D Streaming streams NVIDIA Omniverse Kit apps to a browser: the Kit app runs on an Eagle 3D Streaming GPU machine, and the viewer sees and controls it in a web page, with no static IP, no server and no install of their own. Omniverse streaming is in beta and free while in beta.
An app made with a game engine (Unreal Engine, Unity and others) usually builds its controls inside the app, with the engine's own UI system: menus, buttons and panels are part of the app, so its stream is interactive on its own. This USD Viewer demo is the opposite on purpose: it has no UI inside the app — all of its controls are in the web page, built with HTML and JavaScript. We chose it to show how a web page controls an Omniverse app programmatically, and how the page and the app talk to each other. (Other Omniverse apps, such as USD Explorer or USD Composer, do have panels inside the app.) There are two demos of it, also together in the Control Panel's Showcase - Omniverse:
| Demo | What you see | Link |
|---|---|---|
| Omniverse in the Eagle 3D Streaming player | The stream alone, in our standard player. The app has no UI of its own, so there is almost nothing to interact with: you see the scene, but there are no menus or buttons. | Open the demo |
| Omniverse with its own web controls | The same stream, embedded in a web page with an
<iframe>. Here the app does have a UI - the USD Viewer's panel (choose a
stage, browse and select objects, reset) - built with HTML and JavaScript in the page itself. This is how an
Omniverse app is meant to be used. |
Open the demo (hosted on GitHub Pages (learn how to host your page with your app for free))
· Source code
(one index.html, no build step) |
The web-controls page shows our demo stream unless you tell it otherwise. src is the stream link the
page puts inside its <iframe> (the iframe's source). Add it to the page address:
https://e3ds.github.io/E3DS-Iframe-Demo/omniverse/?src=https://connector.eagle3dstreaming.com/v5/your-username/your-app/your-configuration
| Part | What it is |
|---|---|
https://e3ds.github.io/E3DS-Iframe-Demo/omniverse/ | the web-controls page (our copy on GitHub Pages, or your own copy of index.html) |
?src= | "use this stream": everything after it is the stream link put inside the iframe |
https://connector.eagle3dstreaming.com/v5/ | the Eagle 3D Streaming stream address |
your-username/your-app/your-configuration | your account name, your uploaded Omniverse app and the configuration to use (its platform set to Omniverse) |
The demo's own stream, written out the same way:
https://e3ds.github.io/E3DS-Iframe-Demo/omniverse/?src=https://stream.eagle3dstreaming.com/v5/demo/omniverseDemo/usdViewer.
To test with the demo app itself in your own account, email
support@eagle3dstreaming.com for the demo build.
kit-app-template has
a streaming variant of its .kit file that adds omni.kit.livestream.webrtc; that is the one
to stream.repo.bat package). The result is one ZIP that runs on a machine without the Kit SDK or NVIDIA's
caches installed. The folder under _build is not enough on its own: most of it points into caches on
the machine it was built on.Verified with Kit 107.3 and the template's USD Viewer app. Other Kit versions are expected to work the same way but have not been tried; mention the version when you get in touch.
Send the packaged ZIP as it comes out of repo.bat package - nothing to rename and no start-up script to
write. Eagle 3D Streaming sets up how your app starts on its machines. If you later upload the app under a different
name, tell support so the start-up is updated with it.
| Eagle 3D Streaming player | NVIDIA's web viewer page | |
|---|---|---|
| Look | the same player as every Eagle 3D Streaming app: full window, settings button | NVIDIA's sample page with its own panel |
| Viewer input | mouse, wheel and keyboard; a touch acts as the left mouse button | NVIDIA's own input handling |
| Talk to the app from your website | yes, through the iframe (below) | through NVIDIA's page only |
A Kit app can define its own messages - the USD Viewer template, for example, answers openStageRequest
by opening a file and getChildrenRequest by listing what is in the scene. With the Eagle 3D Streaming
player in an <iframe> on your page, your page sends those messages to the player, and the player
passes them to the app:
// your page -> the Kit app
iframe.contentWindow.postMessage(JSON.stringify({
type: "omniverseMessage",
event_type: "openStageRequest",
payload: { url: "${omni.usd_viewer.samples}/samples_data/stage02.usd" }
}), "*");
// the Kit app -> your page
window.addEventListener("message", (e) => {
const m = JSON.parse(e.data);
if (m.type === "omniverseReady") { /* the app can now receive messages */ }
if (m.type === "omniverseEvent") { console.log(m.event_type, m.payload); }
});
Which event_type names exist, and what is in each payload, is decided by your Kit app's
own extension, not by Eagle 3D Streaming. Verified with the USD Viewer template: choosing a file, listing the scene,
selecting objects from a list and resetting the stage all work this way, exactly as in NVIDIA's own viewer.
Yes. Kit's streaming normally expects the browser to reach the GPU machine directly. With Eagle 3D Streaming, the viewer opens an ordinary HTTPS link and the connection to the app is set up through Eagle 3D Streaming's servers, so the machine needs neither a static IP nor a public address of its own.
No. The app renders on Eagle 3D Streaming's GPU machine; the viewer only decodes a video in the browser.
Kit apps that include Kit's WebRTC streaming extension, packaged as a self-contained ZIP - such as apps made from
NVIDIA's kit-app-template. Verified with Kit 107.3.
Nothing during the beta. Email support@eagle3dstreaming.com to join.
Other kinds of app: Stream any app in the browser.
Last updated