Codec

In Eagle 3D Streaming, the codec is the format your application compresses the picture into before it is sent. It is set once, in the app configuration, and the default — H264 — is what every stream on the platform has always used. Changing it is worth doing only when you know what you are trading, because two separate things have to agree before a codec is actually used: the machine your app runs on has to be able to produce it, and each viewer's browser has to be able to play it.

Fixing crashes on Unreal Engine 5.7

If streams close on their own, switch that stream to VP9

If your app runs on Unreal Engine 5.7 and a viewer's stream closes on its own — most often a viewer on an unstable connection — switching that stream's codec to VP9 stops it. VP9 does not hit the driver bug behind those crashes. Apps on Unreal Engine 5.8 are already protected and need no change.

The trade-off is that VP9 looks slightly less sharp than the default (H264) and uses the streaming machine's CPU rather than its GPU. So switch to it where it matters:

  • A viewer who has already seen a crash, or is on shaky internet (mobile data, hotel Wi‑Fi): switch their stream to VP9.
  • Viewers on solid connections you would rather not change: leave their stream on the default, and make a second configuration on VP9 for the affected viewer only (below).

Switch a stream to VP9

  1. Open your app in the Control Panel and open the stream link's configuration — the pencil icon beside it.
  2. Turn on Advanced Options. The Developer tab is hidden until you do.
  3. Open the Developer tab and find Codec.
  4. Choose VP9 and save.

The change reaches viewers the next time they open the stream; anyone already watching keeps the old codec until they reload.

Keep the default for everyone else

If only one client is affected and you do not want other viewers to lose any sharpness, make two configurations — leave your normal one on the default, add a second set to VP9 — and share the VP9 link with the affected client only. Creating and naming configurations is covered in App configuration.

The choices

Four codecs, one default, and what each one asks for

In the Control Panel the setting sits in the app configuration, in the Developer options, as Codec. Leaving it alone is a real answer: blank means H264, which is what your app already streams with.

ChoiceWho can encode itWho can play itWhat it costs
Default (H264) Every machine in the fleet Every browser, every phone, every tablet Nothing. This is today's behaviour.
H264 Every machine Everything The same as the default, stated explicitly rather than left implied.
AV1 Only NVIDIA Ada (RTX 40-series, L4, L40S, RTX 4000–6000 Ada) and Blackwell (RTX 50-series) Recent Chrome, Edge, Firefox and Safari. Older devices cannot. Roughly 30–50% less bandwidth for the same picture, and a harder decode on the viewer's device.
VP9 Every machine — it is encoded in software, on the CPU Chrome, Edge, Firefox. Safari support is patchier. CPU on the streaming machine instead of the GPU's video encoder, which competes with your application for the same cores.
VP8 Every machine — software, on the CPU Everything, including very old devices The most bandwidth of the four for the same picture. A compatibility fallback, not a quality choice.

First check: can the machine produce it?

The streaming machine's GPU decides before your app even starts

Your application is launched on whichever machine is free when a viewer arrives, and those machines do not all have the same graphics card. AV1 encoding exists only on NVIDIA's Ada and Blackwell generations. A card one generation older can play AV1 perfectly well and still be unable to make it — decoding and encoding are separate pieces of silicon, and that is the single most common surprise with this setting.

Your configuration Codec: AV1 Can THIS machine's card encode AV1? Ada or Blackwell only yes The app starts with AV1 about a third less bandwidth per viewer no The app starts with H264 for that session only, and the substitution is recorded Why it is not simply refused: a viewer is waiting. A session that starts in H264 is a working stream; a session that refuses to start is a blank page.
The check happens per session, on the machine that will actually run your application — so the same configuration can stream AV1 to one viewer and H264 to the next, if they were served by different machines.

Only AV1 is gated this way. H264 is encoded by every card the platform runs on, and VP9 and VP8 are encoded in software, so no graphics card can refuse them.

Second check: can the viewer play it?

Each browser reports what it can decode, and a stream is only worth sending if it can be played

A codec the streaming machine can produce is still useless if the person watching cannot decode it. Browsers differ, and the same browser differs by device and by age — AV1 decoding arrived in Chrome and Edge years before it reached most phones.

Codec so far AV1, from the check above What does this browser say it can decode? asked on the viewer's own device can Keep AV1 cannot Use H264 for this viewer says nothing Keep AV1 silence is not a refusal Only a definite “I cannot decode this” changes the codec. An older page that never reports at all is left as it is.
The third branch matters as much as the other two: a missing answer must never be read as a refusal, or every viewer whose page could not report would be quietly dropped to H264.

Both together: what the viewer actually receives

Either side can veto, and neither can overrule the other

The two checks are not alternatives. Each can only ever reduce the choice, never raise it, and the picture a viewer receives is whatever survives both.

You choose AV1 Machine can encode it? Viewer can decode it? AV1 what you asked for no no H264 Both must agree. One “no” from either side is enough, and H264 is the answer in every case where something could not be established — never a blank stream.
H264 is the answer to every unanswered question. That is the whole design: a stream that works is always preferred to the stream you asked for.
Machine can encodeViewer can decodeThe viewer receives
yesyesThe codec you chose
yesnoH264
noyesH264
nonoH264
yesdid not sayThe codec you chose

How each codec behaves in practice

Bandwidth, picture under pressure, and who it suits

The numbers below are for the same picture at the same resolution and frame rate. A codec that needs less bandwidth is not simply better: the saving is paid for somewhere, either in the viewer's decoding effort or in the streaming machine's processor.

 H264AV1VP9VP8
Bandwidth for the same picture The baseline 30–50% less 20–35% less 10–20% more
Encoded by The GPU's video encoder The GPU's video encoder, Ada or newer only The CPU The CPU
Effect on your application's frame rate None worth measuring None worth measuring Competes for CPU with your app Competes for CPU with your app
Viewer's device has to work Hardly at all — decoded in hardware everywhere Harder. Older phones and laptops decode it in software, which drains battery Moderate Light
Where it is supported Everywhere Recent Chrome, Edge, Firefox, Safari Chrome, Edge, Firefox; Safari patchier Everywhere, including very old devices

On different connections

What a viewer notices is not the codec but what the stream does when their connection cannot keep up. Every codec gives up quality in the same order — first sharpness, then frame rate — but they reach that point at different speeds.

The viewer's connectionH264AV1VP9 / VP8
Fast and wired
25 Mbit/s and up
Full quality. Nothing to gain by changing. Full quality, using less of the connection. No visible difference. Full quality.
Ordinary home broadband
10–25 Mbit/s
Good. The usual case. Good, and steadier under a shared connection — a second person streaming video is less likely to disturb it. Good on VP9; VP8 is the first to soften.
Mobile or congested
3–10 Mbit/s
Noticeably soft on detailed scenes. The clearest advantage. The same bandwidth carries a sharper picture — provided the phone can decode it without overheating. VP9 similar to H264; VP8 worse.
Poor or unstable
under 3 Mbit/s, or a changing connection
Soft, but it keeps going. The most predictable behaviour. Better picture while it holds. A connection that changes frequently is harder on it than on H264. VP8 is the most forgiving of a bad connection and the worst-looking on a good one.

Checking what was actually used

The setting says what you asked for, not what happened

Because either side can substitute H264, the configuration alone does not tell you what a session streamed. Two places record it:

  • The session's own record, in monitoring. It holds the codec the stream negotiated, per session — so a configuration set to AV1 with some sessions showing H264 tells you which machines or which viewers substituted.
  • The application's log, which names the codec the app was started with. This is the machine-side answer, before the viewer's browser has any say.

Last updated