Last updated 9 September 2026
Every number on this page was measured, not estimated. They come from one machine, which we describe below so you can judge it against yours. Where something was tried and did not work, that is on this page too.
The short version: the PC does very little work, so the PC is rarely the bottleneck. Your Wi-Fi and your phone's temperature are what decide whether mirroring looks good.
Which build these numbers describe. The current release is 2.0.1, and that is what the download button gives you. The figures for connection time, per-frame cost, and the three real-world workloads below were taken on 2.0.0, which ran a fixed 1080p-class stream with no smoothing. The sections on mirror resolution and smoothing were measured on a development build of 2.0.1, and describe the settings and defaults it ships with.
There is no minimum CPU or RAM figure here because we have not found the floor yet, and publishing a guess would be worse than saying so.
| CPU | Intel Core i7-14700F, 20 cores / 28 threads |
|---|---|
| GPU | NVIDIA GeForce RTX 5060 |
| Memory | 32 GB |
| OS | Windows 10 Pro, build 19045 |
| PC network | Wired gigabit Ethernet, Wi-Fi radio off |
| Phone | iPhone 15 Pro Max (1290 × 2796), on Wi-Fi |
This is a mid-range desktop, not a workstation, and the GPU matters far less than its name suggests — see "Where the milliseconds go" below. The one deliberate choice is the wired PC: it removes a wireless hop from the path so that what remains to measure is the phone's link, which is the part you cannot remove.
Connecting to first visible frame: 146–164 ms. Of that, about 28 ms is AirMirror Pro. The rest is iOS negotiating the connection, which no receiver controls.
What 2.0.0 delivered at its fixed 1080p-class stream (what 2.0.1 calls Balanced), read straight off the status bar during three real sessions on the machine above. Frame rate tracks how much the content actually moves — a still photo does not need sixty frames a second — and latency falls as the workload gets heavier:
| What was on screen | Stream | Frame rate | Latency |
|---|---|---|---|
| A photo in a social feed | 886×1920 | 9.4 fps | 15.5 ms |
| Landscape video playback | 1920×886 | 43.1 fps | 7.2 ms |
| A game (Clash Royale) | 886×1920 | 61.8 fps | 5.5 ms |
Measured on a development build of 2.0.1. This comparison is the evidence behind the defaults 2.0.1 ships with; 2.0.0 behaved like the left-hand column.
On a cool phone at native resolution with smoothing set to Light, across seven separate steady windows:
| Balanced, no smoothing | Native + Light | |
|---|---|---|
| Frame gap, 99th percentile | 32.0–32.6 ms | 20.1–24.5 ms |
| Dropped frames | about 1 every 6 sec | 1 every 44 sec |
| Frame rate | 59.8 fps | 59.2 fps |
| Pixels delivered | 1.70 Mpx | 3.61 Mpx |
Steadier pacing, roughly eight times fewer dropped frames, the same frame rate, and more than twice the resolution — for about 17 ms of added delay. That combination is why it is the default in 2.0.1.
At 60 fps there are 16.67 ms to produce each frame. AirMirror Pro's share of that — taking a decoded frame and putting it on screen — is 0.11 ms.
That single number explains most of this page. It means a faster PC cannot help you, because the PC was never busy. When mirroring stutters, the frames are late arriving, not slow being drawn. The causes worth investigating are all upstream: the phone's encoder, and the Wi-Fi between it and your router.
2.0.0 always requested the 1080p-class box. 2.0.1 adds a Mirror quality setting and defaults to Native, for the reason below.
This is the least intuitive thing we measured. Raising mirror quality from 1080p-class to native reduced dropped frames:
| Setting | Advertised box | Dropped frames |
|---|---|---|
| Balanced | 1920 | 1.4 / sec |
| Native | 2796 | 0.76 / sec |
The reason is that iOS scales its output to fit whatever display size the receiver advertises. Asking for 1920 makes the phone resize a 1290 × 2796 screen before sending it, which is work it would not otherwise do. Asking for its native size lets it send what it already has.
The same effect is why Maximum is usually the wrong choice. Advertising 3840 does not get you more detail than the phone's screen contains — it makes iOS upscale to 1772 × 3840 and send more data to carry the same picture. It is there for genuinely higher-resolution devices, not as a "better" setting.
Smoothing is new in 2.0.1 and defaults to Light. In 2.0.0, frame pacing was whatever the phone sent.
Frames do not arrive from a phone evenly. Smoothing holds one or two frames back and releases them on a measured cadence, trading a little delay for even pacing. Measured on a healthy phone at native resolution:
| Smoothing off | Smoothing on | |
|---|---|---|
| Frame gap, 99th percentile | 32.1–48.0 ms | 20.1–28.1 ms |
| Worst frame gap | 46.1–171.6 ms | 20.2–36.0 ms |
| Dropped frames | 0.76 / sec | zero |
| Frame rate | 57–60 fps | 56–60 fps |
The worst-case row is the one to read. Without smoothing a single frame can arrive 171 ms late, which is visible as a jolt. With it, the worst case lands at 36 ms.
The cost is latency, and it is not free: Light adds about 17 ms, Full about 33 ms. If you are mirroring a game and playing it on the phone, turn Smoothing off and accept the jolts.
Your phone has to be on Wi-Fi. There is no way around that — AirPlay is wireless by definition, and this is the hop we measured all the jitter on. Your PC does not have to be.
Put your PC on wired Ethernet if you can. It takes one wireless hop out of the path entirely. That is not a large gain when your Wi-Fi is healthy, but it removes a whole class of problem — interference, band steering, a congested channel, the PC roaming between access points — from a path where you are already stuck with one wireless link you cannot remove.
If wiring the PC is not practical:
Honest caveat: every number on this page was taken with the PC wired, so we have not published a measured Wi-Fi-versus-Ethernet comparison. What we can say from measurement is where the jitter came from — the phone's link, not the PC's — which is why Wi-Fi is the first thing to suspect and the PC is close to the last.
Found under File → Settings…, or press Ctrl+,. Defaults are in bold.
| Setting | Options |
|---|---|
| Mirror quality | Balanced — 1080p class, lowest bandwidth Native — matches most iPhone and iPad screens (default) Maximum — beyond most screens, highest bandwidth |
| Frame rate | 60 fps — smoothest motion (default) 30 fps — half the bandwidth |
| Smoothing | Off — lowest latency, best for gaming Light — steadier picture, about 17 ms delay (default) Full — steadiest picture, about 33 ms delay |
Mirror quality and frame rate are agreed with your device when it connects, so a change to either takes effect the next time you start the receiver rather than immediately.
Set Mirror quality to Balanced and Frame rate to 30 fps: together they halve the bandwidth and cut the pixels to roughly a third. The failure mode of weaker hardware here is a softer picture, not a broken one.
If mirroring still is not smooth, the causes worth chasing are on the troubleshooting page — and they are almost always the phone or the network rather than the PC.
We should be straight about this: the defaults were chosen on the machine described above, and we have not yet tested them on a low-end laptop. The reasoning for shipping them anyway is that the PC only decodes, in hardware, and the settings exist for anyone who needs less. If you are on an older machine and something here does not hold, we would genuinely like to know.
Each of these was implemented and measured before being rejected. They are listed so you do not spend an evening on them.
None of the above is what breaks mirroring in practice. A hot phone is. On the same hardware, minutes apart, a phone that was hot and on a call went from a worst-case frame gap of 36 ms to 3.5 seconds — with nothing dropped by the PC and nothing lost on the network. The frames simply were not sent.
No setting on this page changes that. What to do about it is here.