Support for multiple headsets in Remote Rendering

Does official Remote Rendering for Magic Leap 2 through Hub support multiple headsets connected to the same computer simultaneously? If so, how does it work?

This is a pretty crucial functionality we need for our remote rendering platform.

Hi Jaro,

Remote Rendering does not support multiple ML2s connected to a single PC simultaneously. This is for a few different reasons including common PC encode limits, as well as the fact that we are an openxr runtime, and openxr doesn’t truly have a concept of multiple headsets for a single PC.

Could you tell us more about your intended use case? We are actively exploring enabling multi-user experiences with remote rendering, with a likely solution of quickly spinning up cloud-hosts per PC. There are a few other theoretical paths that could be pursued as well, such as a single hardware unit having multiple virtualized machines .

We are developing a remote rendering platform. Right now, we support HoloLens 2 through their official remote rendering (very similar to ML's solution with custom OpenXR runtime).

I am aware of OpenXR not directly supporting multiple devices. But we have managed to do it by running OpenXR runtime as many times as needed. This way, we can connect several HoloLens headsets to a single PC. There is our custom library between app running on PC and OpenXR runtime(s). Therefore, the app does not communicate directly through Microsoft's remote rendering OpenXR runtime.

This functionality is crucial for our clients. If we could access ML's remote rendering OpenXR runtime without Hub, we could theoretically do the same and enable multiple devices connected to the same PC.

Encoder limits are not a huge issue. We use NVidia Quadro cards which do not limit number encoders. And even consumer RTX cards recently got unlocked more encoders.

I'm afraid our runtime isn't currently designed to operate this way. It acts as a Windows service which your OpenXR applications communicate with over IPC, and there is no standard way to have multiple at once in a normal fashion. At present, experimenting with virtual machines is the only immediate solution I can suggest, though we will consider this use case for the future.

There are ways to bypass the Hub to manage pairing, and we will likely add some proper documentation for this soon as several people are asking about it. For more information now though, in powershell run this:

& 'C:\Program Files\Magic Leap Remote Rendering\bin\setup_viewer.exe' --help

This is the tool which the Hub itself calls into, and can setup pairing with either adb intents, or via a QR code in the terminal. I hope that helps, though it will not let you connect multiple devices to the same PC simultaneously still.

P.S. We are looking into your other post. Sorry for not seeing your reply sooner.

How does communication between this tool and your OpenXR runtime works? Is it strictly one-on-one? Which way does it go?

Microsoft's remote rendering OpenXR runtime exposes custom extensions for setting up remote connection (hostname, port, etc.). This makes it possible to launch the same runtime multiple-times (from our application) and set different connection parameters for each of those runtimes. No other app (hub/tool/...) is required.

Their runtime can run as a service (standard OpenXR way) as well, but it is not required. As long as there is a dll for OpenXR runtime itself, it can be used directly by an app (which basically bypasses discovery done by OpenXR Loader).

As far as I know, you are using modified Monado runtime. And it can work in both modes. So, if your runtime also manages remote connection and there would be a way how to tell to a specific instance of your runtime to connect to specified device (for example, like the Microsoft's remote rendering runtime does it), it should be enough to solve our problem with support of multiple devices.

Our runtime is functionally two services in one- as you note, we instantiate a service in the standard OpenXR way for OpenXR applications, and also establish a UDP server. Each instance of our OpenXR runtime has a strict 1:1 relationship with an ML2 (You can pair multiple for convenience, but use only one at a time).

You are correct that we are based on Monado, and internally we have built the "In-Proc" version before (This does not bypass the OpenXR discovery process, but you can theoretically force multiple apps to simultaneously discover different runtimes), but we do not test or ship it for a few different reasons. One of the largest is that the OpenXR process in "In-Proc" mode can only exist for as long as it's related OpenXR application is running, meaning to establish secure pairing between the ML2 and your PC you need to actively have the app in question running which is inconvenient.

Ultimately, what you are asking for is in fact technically possible if we added and shipped several features. It would have some inconvenience when you try to use it, but if necessary could be overcome by scripting on your end. I've passed your request onto our product management team to help prioritize the necessary additions, but I can not promise you any firm timeline on them.

I understand. Thank you very much.

This topic was automatically closed 15 days after the last reply. New replies are no longer allowed.