Skip to content

WFB-NG (WiFi Broadcast Next Generation)

WFB-NG is an open-source digital radio link that carries video, telemetry and data over raw Wi-Fi. It is the foundation of the video link in OpenIPC/OpenFPV systems. The project is developed by svpcom.

Unlike a regular Wi-Fi connection, WFB-NG puts the network card into monitor mode and transmits packets directly (injection), without association or acknowledgements — giving minimum latency and long range.

How it works

  • Broadcast without association. There is no "connection" between devices and no waiting for ACKs — the transmitter simply broadcasts packets, and any receiver on the same channel picks them up.
  • FEC (Forward Error Correction). Redundant packets are added to recover lost ones. By default the link recovers up to 4 lost packets out of a 12-packet block (configurable via fec_k/fec_n).
  • 1:1 RTP → IEEE 802.11. Each RTP video packet maps to a single radio packet without serializing into a stream — minimizing latency.
  • Encryption. Traffic is encrypted (libsodium) with the gs.key / drone.key key pair.

Advantages

  • Low latency — no handshake protocols.
  • Interference resilience — FEC recovers lost packets, with diversity reception.
  • Long range — several kilometres with proper antennas and power.
  • Bidirectional link — video "down" + MAVLink telemetry "up".
  • Multiple receivers — aggregation across several cards/stations, automatic selection of the best transmitter by signal level.

Supported hardware

ChipsetNote
RTL8812AUMost common, needs a patched driver
RTL8812EUNeeds a patched driver
Atheros AR9350Supported

The card must support monitor mode and packet injection. See also Network Cards.

Components

ToolPurpose
wfb_keygenGenerates the encryption key pair (gs.key, drone.key)
wfb_txTransmitter (packet injection in monitor mode)
wfb_rxReceiver
wfb_tunIPv4 tunnel over the link (for MAVLink/data)
wfb-cli gsLink status monitor on the ground station (RSSI, FEC, losses)

Encryption keys

WFB-NG encrypts traffic. Keys are generated with a single command (so they form a valid pair):

bash
wfb_keygen

It creates two files. Place them like this:

  • drone.key → on the camera (drone): /etc/drone.key
  • gs.key → on the ground station: /etc/gs.key

Keys must be from the same pair

If gs.key and drone.key were generated by different wfb_keygen runs, the link will not come up (decryption error). Generate both keys together, then distribute them to the devices.

Configuration: /etc/wifibroadcast.cfg

The main link config. Channel and region are set in [common]; the video/telemetry streams live in separate sections.

ini
[common]
wifi_channel = 161          # 161 = 5825 MHz (5.8 GHz)
wifi_region = 'BO'          # region for maximum transmit power

[drone_video]
peer = 'connect://127.0.0.1:5600'   # where to push video
bandwidth = 20              # 20 or 40 MHz
stbc = 1
ldpc = 1
mcs_index = 1
fec_k = 8
fec_n = 12

[gs_video]
peer = 'listen://0.0.0.0:5600'

[gs_mavlink]
peer = 'connect://127.0.0.1:14550'

Key parameters

ParameterValueDescription
wifi_channele.g. 161Wi-Fi channel (must match on drone and GS)
wifi_regione.g. 'BO'Region/power (choose one legal for your country)
bandwidth20 / 40Channel width, MHz
mcs_index15Modulation scheme: higher = more bitrate, less range
stbc / ldpc0/1Coding for interference resilience
fec_k / fec_ne.g. 8 / 12FEC: k data out of n packets (more headroom = more robust)
short_giTrue/FalseShort guard interval

Power and region

The wifi_region parameter affects the allowed transmit power. Use a value that is legal for your country and band. Excessive power may be illegal and can overheat the card.

Ground station setup (Ubuntu)

Example for Ubuntu 22.04 LTS.

1. Dependencies:

bash
sudo apt update
sudo apt install dkms git python3-all-dev net-tools virtualenv fakeroot \
  debhelper python3-twisted libpcap-dev python3-pyroute2 python3-future \
  python3-all libsodium-dev

2. Card driver (example for RTL8812AU) — install the patched driver via dkms.

3. Install WFB-NG (use your interface name from iwconfig):

bash
git clone -b stable https://github.com/svpcom/wfb-ng.git
cd wfb-ng
sudo ./scripts/install_gs.sh "wlan0"

4. Config — edit /etc/wifibroadcast.cfg (channel/region/streams as above) and place /etc/gs.key.

Start and monitor

bash
# Ground station
sudo systemctl enable --now wifibroadcast@gs
systemctl status wifibroadcast@gs

# Drone (camera)
sudo systemctl enable --now wifibroadcast@drone

# Link monitor (RSSI, FEC, packet loss)
wfb-cli gs

# Logs for diagnostics
journalctl -xu wifibroadcast@gs -n 100

Viewing video

The video stream (usually H.265) is pushed over UDP to port 5600. Open it in PixelPilot, QGroundControl or GStreamer:

  • QGroundControl — UDP h.265, address 0.0.0.0:5600, enable Low Latency Mode.
  • GStreamer — receive RTP/UDP on 5600 and decode H.265.

Troubleshooting

SymptomCause / fix
No video at allDifferent wifi_channel on drone and GS — compare /etc/wifibroadcast.cfg
Decryption errorsgs.key and drone.key are not from the same pair — regenerate with wfb_keygen
Link drops / low bitratemcs_index too high for the conditions — lower it; check antennas and power
Card won't startNo monitor mode/injection, or an unpatched driver

For automatic bitrate adaptation to link conditions, see Adaptive-Link.

Sources

Community project. Not an official OpenIPC resource.