Download

Pixel Streaming Scalability

I didn’t see a section for networking so i’m posting here.

My team is currently developing a POC utilizing Pixel Streaming, we have it working with single client connection and we are now looking into scaling it to 10’s or even 100’s of thousands of clients.

After reading through the documentation here - https://docs.unrealengine.com/en-us/Platforms/PixelStreaming/Hosting it seems fairly vague as to how salable Pixel Streaming is.

We understand that Pixel Streaming is still early access but so far it works for what we need but the scalability aspect is still uncertain, does anyone have any input on this?

Also - From our understanding on how Pixel Streaming works you need to have a single server for each user, is this correct or can you have multiple users, each with the ability to control movement, etc. themselves connect to a single machine? If so what’s the limit on the number of clients that can connect to a single machine before you need to spin up another machine?

Thanks in advance!

Hey @CharlestonS, the question about scalability is a great one. I haven’t heard of any scalability tests that we’ve done internally to establish the limit for how many connections we can stream from a single server. I’d be really interested to hear any findings you can share.

For your second question, you don’t need a server for each user. You can have many end-users connected to the same UE4 instance, seeing the same content being broadcast from the engine. If they’re all viewing the content through a player web page that supports sending mouse/keyboard/touch events back to the engine (like the default player.htm page), then all their inputs will get sent to the Engine. The result is that they’ll all fight for control – if I try to move left and you try to move forward at the same time, the engine will behave like it’s getting both inputs and will move the character left and forward at the same time. If I try to move left and you try to move right, the inputs cancel out and the character won’t move at all.

By customizing the player HTML page, and directing different users to different pages, you can set it up so that they have different amounts of control over the engine. For example, you could make one page for a “presenter” that allows controls, and another page for “attendees” that blocks all controls so that they only see the broadcast of what the presenter is doing. Both those pages can be served by the same Signaling & Web Server, the same WebRTC Proxy Server, and the same instance of the Unreal Engine.

Like I said above, we just haven’t pushed the limits of how many users can connect to the same stack at the same time.

The main issue you’ll run into is that it’s going to be very resource intensive and you’d be lucky if you can run more than one instance on a single machine

Ok, thanks for the info!

I will update here with our findings after some more testing.

really looking forward to the results, we now have a question, exactly the same. How many parallel sessions can be run from one server

Hi @CharlestonS

We launched a SaaS platform doing exactly what you need, I think.
Feel free to check our website and let me know if it answers your needs: www.furioos.com

In short, Furioos allows you to stream your 3D applications (like your Unreal Engine applications) and share them as easily as a video on Youtube.
We take care of the creation of virtual machines, the storage of your applications, as well as their scalability.
You only have a few clicks to give anyone access to your Unreal Engine applications.
No GPUs are required, because the calculation of the 3D application is done in our servers!
You will find a short video tutorial here: https://youtu.be/VnNenOajk5U

The beta is free, feel free to test it.
One more thing: we now support the amazing Pixel Streaming on Furioos :slight_smile:

Don’t hesitate to contact us if you need more information.
Cheers,

The Furioos team

Any updates?

I am interested in how the commands on Pixel Streaming would work in the multi-page setup described. If you wanted to make some shared experience that two people log into, would the commands from the different pages be able to be sent in parallel?

Like one player has Keyboard letter A assigned to their page and it makes a cube jump. Another page has Keyboard Letter B assigned to their page to make the cube move forward. If both keys are hit at the same time would they block each other, lag in response, or happen in parallel?

Thanks!
Michaell Bakalars

Please have a look at this youtube video:https://youtube.com/watch?v=QxKwQlKf1kM
It shows the basic function for an independent multi client application with the Pixel Streaming technology. There are shown 8x independent Nvenc streams which are started only on one GPU server. In the video description there is further information that also larger cloud infrastructures can be realized, which enables an automated scaling for simultaneous client requests.

So your using scenario is possible if you use for each user an own Pixel Streaming connection and simultaneously creating a multi gaming application. The effort to develop such an implementation (multi-client, multi-gaming, auto scaling cloud infrastructure for Pixel Streaming) is complex but solvable.

Hi @CharlestonS did you find any interesting solution / insights that could help on your question ? Seems we are at the same level here and still not having a proper solution for end user scalability + pixel streaming.

Thanx in advance for your feedback

Hello, I have managed deploying my pixel streaming game, and successfully create multiuser experience with matchmaker server by altering the parameters in the exe with adding parameter --matchmakerPort=9999 in exe 1, matchmakerPort=9988 in exe 2, matchmakerPort=9977 in exe 3.

Run exe 1 and let player enter, the player will be redirected to port 9999 and control the first instance
Run exe 2 and let player enter, the player will be redirected to port 9988 and control the second instance, etc…

But I don’t know yet how to automate so first player will enter 9999, second will enter 9988, but when the first player logged out, port 9999 will be empty, so the third player when entering will use port 9999

Where would I set that up?

Hi @pasirberbisik ,
found a document that might be helpful. Please make use of it.