PreviewMonitor docs
Reference

Network reference

Ports, discovery, wire format, forward error correction, pacing, keepalive and firewall rules for the PreviewMonitor stream.

PreviewMonitor streams over your local network with no server in between. The plugin listens for one TCP control connection and pushes UDP video and audio at whichever phone is connected. Everything below is fixed — there is nothing to configure and no port to change.

Ports

PortProtocolDirectionCarries
47100TCPiPhone → host (host listens)Control channel for Premiere Pro
47110TCPiPhone → host (host listens)Control channel for After Effects
47101UDPhost → iPhone (iPhone listens)Encoded video fragments
47102UDPhost → iPhone (iPhone listens)PCM audio fragments
5353UDPboth ways, multicastmDNS / Bonjour discovery

The control ports are spaced ten apart per Adobe host so two hosts can run on one machine without colliding. Premiere Pro keeps 47100 exactly; After Effects gets 47110. Each host also gets its own advertised identity and its own list of trusted phones — see Two hosts, one machine.

The video and audio ports are the same for every host, because only one phone streams at a time.

IPv4 only. There is no IPv6 path.

Discovery

The plugin advertises itself over mDNS as service type _premierelive._tcp (_premierelive._tcp.local on Windows). premierelive is the internal engineering name; it is not shown anywhere in the interface.

The TXT record carries five keys:

KeyValueMeaning
ver5TXT record schema version. The app reads this to know which keys to expect.
idUUIDThe host's stable identity. The app keys its saved-hosts list by this, so a host that changes IP or name is still recognized.
namestringThe display name from the Setup window's Name field.
transmit0 or 11 when Premiere Pro has at least one Transmit instance activated — that is, the device is ticked in Preferences → Playback and a sequence is open. The app uses this to show "Transmit stopped" without opening a connection first.
pvversion stringThe plugin's build version, so the app can tell a stale plugin from a current one.

transmit changes at most once per second. Unknown keys are ignored by the app, so an older app build and a newer plugin still find each other.

On Windows the advertiser uses the native Windows DNS-SD API (dnsapi). Apple's Bonjour for Windows is not required and does not need to be installed. On macOS it uses the system Bonjour daemon.

Discovery is a convenience, not a dependency. If mDNS is blocked — as it is on many managed and guest networks — you can still connect by scanning the QR code in the Setup window or by typing the host's IP address. Turning off Discoverable on network stops the advertisement without stopping the stream.

The app gives discovery 8 seconds after you tap a host before it gives up and returns you to the home screen.

On Windows a single machine can currently advertise several near-identical registrations, so the phone's device list shows the same PC more than once. Every row resolves to the same host, port and identity — tap any of them. See Known limitations.

Wire format

Every UDP packet, video or audio, begins with a fixed 22-byte header. The magic is PLV\2; a receiver that does not recognize it drops the packet rather than mis-parsing it.

OffsetSizeField
04Magic PLV\2
41Type — 1 video, 2 audio
51Flags — bit 0 keyframe, bit 1 transmit-timestamp trailer present, bits 2–7 parity shard count (0–63)
62Frame sequence, u16 LE — one per encoded frame, shared by all its fragments
84Packet index, u32 LE — per-stream monotonic, for instant loss detection
124Timestamp, u32 LE microseconds
162Fragment index, u16 LE
182Fragment total, u16 LE — data plus parity
202Payload length, u16 LE
22+—Payload

The per-packet index in addition to the per-frame sequence is what lets the receiver notice a single lost fragment immediately, rather than waiting for a frame to fail to assemble.

Why the payload is 1440 bytes

The design target is LAN Wi-Fi with a standard 1500-byte MTU, and the whole point is that no packet is ever fragmented by IP:

1500   Ethernet MTU
 -20   IPv4 header
  -8   UDP header
 -22   PreviewMonitor packet header
  -2   parity shard length prefix
────
1448   theoretical maximum payload
1440   what is actually used

The 8-byte difference is deliberate headroom for VLAN tags and stray IP options on real networks. 1440 is a constant on both sides — the plugin and the app derive the forward-error-correction block size from it independently, and they have to agree exactly or parity reconstruction produces garbage.

The fragment-total field is a u16, so a single encoded frame can be up to 65535 fragments — about 94 MB, far more than any real frame.

Forward error correction

FEC is fixed at 10% parity, Reed-Solomon, using cm256. There is no adaptive FEC and no setting for it.

For a frame that splits into k data fragments, the plugin computes ceil(k × 0.10) parity shards. So a 20-fragment frame gets 2 parity shards and a 21-fragment frame gets 3. Any 20 of the 22 shards reconstruct the frame.

FEC is skipped entirely in three cases:

CaseWhy
The frame needs more than 255 data fragmentscm256's hard limit on original shards. A frame larger than about 367,000 bytes skips FEC rather than being dropped.
Parity would exceed 63 shardsThe parity count lives in six bits of the flags byte, so it is clamped to 63.
Audio, alwaysAudio fragments carry no parity at all.

On LAN Wi-Fi, which is the only supported transport, loss is rare enough that a very large frame going out unprotected is an acceptable trade against dropping it.

Pacing

The plugin does not hand a whole keyframe to the kernel at once. A pacer refills a token bucket at the current bit rate divided by eight, and drains fragments against it, so a frame's packets are smeared across the frame interval instead of arriving as a burst that overruns the Wi-Fi link's buffer.

The backlog is bounded, per stream:

StreamMaximum queued frames
Video5
Audio4

On overflow the oldest queued frame of that stream is dropped, not the newest — a stale frame is worth less than a fresh one on a live monitor. There is also an independent byte cap on the video queue, because a large queue that is technically under the frame limit still reads to the eye as a stuck picture.

Dropped frames are counted and surfaced in the stats HUD.

There is no retransmission

Nothing is ever re-sent. A lost fragment is either reconstructed from parity or it is gone. Recovery is exactly two mechanisms:

  1. FEC, as above, which absorbs the common case of one or two lost fragments in a frame.
  2. Keyframe on demand. When the app cannot decode — too many fragments lost in one frame, or a decoder reset — it sends a one-byte request (opcode 0x01) on the control channel and the plugin forces the encoder to emit an IDR immediately.

This is why GOP Mode matters on a lossy network. In All-Intra every frame is independent, so a lost frame costs one frame. In Long a lost frame can corrupt everything up to the next keyframe, which is what the on-demand IDR exists to cut short.

Keepalive and heartbeat

Two independent mechanisms keep the control channel honest.

MechanismTimingPurpose
Application heartbeatone empty control message (opcode 0x09) from host to phone every 1 secondKeeps iOS from marking a quiet TCP connection non-viable and forcing a reconnect. A send failure is also how the plugin notices a half-open socket quickly.
TCP keepalivefirst probe after 10 s idle, then every 5 s, 3 probes before giving upDetects a silently dead peer within roughly 25 seconds instead of the operating system's default minute-plus.

One phone at a time

The plugin accepts one TCP control connection. When a second phone connects, the new connection replaces the old one: the previous socket is closed and its control and heartbeat threads exit.

The replacement is not trusted by inheritance. A newly accepted connection is marked unauthenticated, and UDP video and audio are gated on authentication — so a phone that connects but does not complete pairing gets no picture, even though the stream is now aimed at its address. See Trusted devices.

LAN only, by design

Both devices must be on the same local network. There is no internet path, no relay, no VPN support and no IPv6 tunnel.

This is a design decision, not a missing feature, and it is what buys the rest of the product's shape:

  • No account, no login, no cloud. Entitlement is resolved on-device against your Apple ID; nothing about your edit leaves your network.
  • No upload. Your frames go from Premiere Pro to your phone across your own Wi-Fi and nowhere else.
  • Latency you can trust. A reference monitor whose picture might be a second behind is not a reference monitor. LAN-only is what keeps the budget in tens of milliseconds.
  • Fixed 1440-byte payloads. Sizing for one known MTU removes an entire class of path-MTU failure.

Firewall

Windows

The installer writes three inbound firewall rules, all named PreviewMonitor, on both the private and public profiles, so Premiere Pro never raises the "Private / Public networks" dialog. That dialog is a trap: its checkbox has to match how Windows classified your Wi-Fi (new networks default to Public), and picking wrong — or pressing Cancel, which writes a Block rule — silently kills discovery and streaming.

netsh advfirewall firewall add rule name="PreviewMonitor" dir=in action=allow protocol=TCP localport=47100,47110,47120,47130 profile=private,public
netsh advfirewall firewall add rule name="PreviewMonitor" dir=in action=allow protocol=UDP localport=47101-47102 profile=private,public
netsh advfirewall firewall add rule name="PreviewMonitor" dir=in action=allow protocol=UDP localport=5353 profile=private,public

The rules are port-scoped rather than program-scoped, because the Premiere Pro executable's path changes with every version. Existing PreviewMonitor rules are deleted before the new ones are added, so reinstalling does not stack duplicates, and uninstalling removes them.

Ports 47120 and 47130 are in the TCP rule as reserved control ports for other Adobe hosts; nothing supported listens on them.

If you installed by MSI rather than by the .exe, no firewall rules are written — the MSI installs the plugins only. Add the rules by hand with the commands above, from an elevated prompt.

macOS

Nothing in PreviewMonitor touches the macOS firewall. The first time Premiere Pro loads the plugin and it opens its listening socket, macOS asks whether Premiere Pro may accept incoming network connections. That prompt comes from the operating system, names Adobe Premiere Pro rather than PreviewMonitor, and has to be answered Allow — denying it blocks the control channel and the phone will never connect.

If you dismissed it or clicked Deny, fix it in System Settings → Network → Firewall → Options, not in PreviewMonitor.

Last updated on