Resolution

In Eagle 3D Streaming, resolution is the number of pixels in the picture each viewer receives. It is set once, in the app configuration, and it is the single setting with the largest effect on how the stream looks and how much internet each viewer needs. There are two choices, and the right one depends on who is watching.

The two choices

Follow each viewer's window, or give everybody the same size

In the Control Panel the setting is Browser Resolution, on the Common tab of the app configuration. It offers two things: Dynamic and Custom.

ChoiceWhat every viewer gets
Dynamic — match the viewer's window A picture exactly the size of the area it is displayed in, changing again whenever that viewer resizes the window or turns their phone. Two people watching at once can be receiving two different sizes.
Custom — a fixed resolution One size, chosen once, the same for everybody. If it does not match a viewer's window the picture is scaled to fit, exactly as a video is.

Dynamic (match the viewer's window) is the default, and is what a configuration saved before this setting existed does too.

Dynamic: match the viewer's window

What it follows, and the one thing it does not look at

While a viewer is watching, the Eagle 3D Streaming page measures the area the video occupies and asks the Unreal application to render at that size. It does this again every time the area changes — a resized window, a rotated phone, a sidebar opening on the host page — at most about three times a second, so a slow drag of a window corner does not turn into hundreds of resolution changes.

The result is a picture that is never scaled and never soft from being stretched. On a large monitor it is large. On a phone it is small, which is why the same application looks softer on a phone than on a desktop: the frame really is smaller, and correctly so.

Two details worth knowing

Screen scaling counts, so a 4K laptop is usually fine. The size asked for is measured in the browser's own pixels, not the screen's. A 4K laptop running Windows at 200 % scaling reports a 1920-wide window and streams at 1920 wide. The large sizes come from large desktop monitors running at 100 % scaling, where the window really is 2560 or 3840 pixels across.

Some applications crop on a phone held upright. In a tall, narrow window a few applications lose the right-hand side of the scene, with no black bars to show that anything is missing. That is a camera setting inside the Unreal project, not a fault in the stream: the camera's Aspect Ratio Axis Constraint is set to Maintain Y FOV, which holds the vertical field of view fixed and narrows the horizontal one as the window narrows. Setting it to Maintain X FOV in the project fixes it. Most applications are unaffected.

Custom: a fixed resolution

Pick a standard size, or type an exact one

Choosing Custom shows two boxes, width and height. These are the four standard sizes to type into them, with the connection speed a viewer needs for each:

SizeKnown asSuits
1280 × 720720p HDThe safe choice. Works on most home connections, and on mobile data.
1920 × 10801080p Full HDMost streams. Needs a good connection.
2560 × 14401440p QHDA fast, wired connection.
3840 × 21604K UHDA very fast connection, and a great deal of the streaming machine.

Any other width and height works too. Use one when the application has to render one exact size — a kiosk screen, a video wall, an ultrawide monitor, a portrait display.

What a good fixed size looks like

  • Even numbers. Video encoders work in blocks, and an odd width or height can produce a thin band of mush along one edge.
  • Not larger than the screens it will be watched on. Pixels a viewer's monitor cannot show still cost the viewer bandwidth and cost the streaming machine work.
  • 1920 × 1080 unless there is a reason. It is what most streams run at and what most screens are.

What each size needs from the viewer's connection

Measured from real sessions, with the weak figures marked as weak

These are the speeds a viewer's connection needs. A stream that is mostly still — a paused scene, a menu — uses far less than one where the camera is moving, and the figures below are for the moving case, because that is the moment a connection that is only just fast enough starts to struggle.

Size Recommend the viewer has What real sessions used
1280 × 720 about 10 Mbps 2,547 sessions measured: about 1.8 Mbps most of the time, rising to about 8.2 Mbps when the picture was busy.
1920 × 1080 about 15 Mbps 1,305 sessions measured: about 2.4 Mbps most of the time, rising to about 9.3 Mbps when the picture was busy.
2560 × 1440 around 25 Mbps (estimated) Only 4 sessions ran at this size. That is too few to call a measurement, so the figure is worked out from the pixel count against 1080p.
3840 × 2160 35 Mbps or more (estimated) Only 1 session ran at this size. The figure is worked out from the pixel count against 1080p.

The recommended figures are deliberately higher than the busiest measured ones. A connection that only just meets the average stutters the moment the picture starts moving, which is exactly when somebody is looking at it.

There is a ceiling. A single stream is capped at 20 Mbps however fast the viewer's connection is. At 1280 × 720 and 1920 × 1080 that cap is never reached. At 3840 × 2160 it is the limit on how good the picture can get, which is part of why 4K is rarely worth its cost for a remote viewer.

Resolution and quality are not the same setting

One is how many pixels; the other is how much detail survives

These two are easy to confuse, and knowing the difference explains most of what a stream does on a slow connection.

ResolutionQuality
What it is How many pixels the picture has. How much detail survives being compressed into the bandwidth available.
Who sets it This setting, or the viewer's window. The stream itself, second by second.
When the connection slows Does not change. Drops, and the picture goes soft and blocky.

So the common assumption — it adapts, so a slow connection will be fine — is half true. What adapts is the quality. The size stays exactly where it was set. Asking for a big picture on a slow connection does not produce a smaller picture; it produces a big blurry one.

Which to choose

Three situations and what each one calls for
Everyone watches on a fast connection An office, a trade stand, a controlled network Match the viewer's window Sharpest picture, never scaled Some viewers may be on a slow one Mobile data, hotel Wi-Fi, a public link Fixed, 1280 × 720 The same picture for everybody, on almost any line The application needs one exact size A kiosk, a video wall, a portrait screen Fixed, typed in Choose Custom and enter both numbers
When the audience is known and well connected, following the window gives the best picture. When it is not, a fixed size is what keeps every viewer working.

If the audience is unknown — a link on a public website, a QR code at an event — 1280 × 720 fixed is the setting that disappoints nobody. It looks slightly softer on a large monitor and it works on a phone on mobile data, which is the trade most audiences want made for them.

Older settings, and guests

What configurations saved years ago do, and what a shared viewer gets

Configurations saved before this setting existed follow each viewer's window, which is the default. Nothing needs changing unless a fixed size is wanted.

Older configurations set to 720p, 1080p or Max are treated as a fixed size: the player follows the window only when the setting is exactly Dynamic. If an older configuration is meant to follow the window, open it and choose Dynamic.

Guests invited into a session watch at a fixed size and cannot change it. Only the person who started the session drives the resolution, so one viewer resizing a window never resizes the picture for everybody else.

Changing it from your own page

For an embedded stream, from the SDK or an iframe

When the stream is embedded in your own website, the resolution can be changed at runtime instead of being fixed in the configuration — pinned to a size, or released to follow the window again. Both calls are on Controlling the stream, along with the reason a raw resolution command does not work.

Last updated