Streaming Frame Rate & Bandwidth Considerations
Overview
Streaming frame rate (fps) is dependent on game complexity (polygon count, lighting, particle effects, etc.), as well as the browser resolution, network latency, and the user's internet bandwidth.
In any remote rendered solution, the framerate rendered on the cloud instance will be higher than what is received by the end user, as some frames are lost due to network latency and encoding of the stream. This loss could range anywhere between 10 and 20%.
As an example, if your game runs at 60fps on the cloud instance, you might lose around 12fps, resulting in 48fps arriving in the stream on the end user's device.
Standard Streaming
On average networks, frame rates between 30 and 60 fps are typical when streaming multi-million polygon models at 720p to commodity grade end-user devices, and between 20 and 40 fps for 1080p. 720p streams require a minimum of 5Mbps, and we recommend 10-12 Mbps for 1080p.
Although pixel streaming does support it, 4K streaming uses five times more data than 1080p and requires the end user to have an absolute minimum of 25 Mbps of bandwidth.
For most experiences, we recommend allowing the streaming game to resize itself to fit the user's browser, rather than forcing a specific resolution.
In the case of Unreal, it will adapt the quality of the stream dynamically, based on the bitrate between the client and the game. When our plugin is included, it will also resize the stream to fit the browser dimensions.
The default configuration for Unreal is to maintain frame rate and resolution, but to dial down the encoder quality. In low bitrate scenarios, the stream will begin to look smudged and blurry as encoder artifacts appear. It defaults to a low of 3000kbps, and if that can't be maintained, failure to keep up will result with the stream freezing, tearing, etc.
For Unity, the aspect ratio will not change, but the stream will still adjust to fill the browser in a best-fit manner.
Cloud XR / VR Streaming
The bandwidth requirements for streaming to a headset are much higher. As an example, for a Quest 3 headset, the display requires two streams of 2064 x 2208; one for each eye.
To stream a Cloud XR experience comfortably, you'll require 50Mbps minimum.
For optimal Cloud XR streaming, a bandwidth of 100mbps or better is recommended.
In a Cloud XR game package, SteamVR caps the game's framerate at 72fps. So even if the game renders more frames, they are essentially lost prior to the output being encoded for streaming. In this case, we recommend optimizing your VR experience for 75fps for an optimal experience.
Low Bandwidth Considerations
Consider leveraging the open source webrtc.org tools (or something similar) in your web client to test the user's connection, and then create a connection that fits their bandwidth. This might be by restricting the framerate or creating streaming window with a specific resolution resolution that can not be resized or set to full-screen.
If the user does not fulfill the desired requirements for a stream, your web client could display a helpful message to your users, rather than allowing them connect and have a poor experience.