selfhost.directory

The index of self-hostable projects — ranked, categorized and served with live updates.
Own your data and stop giving it to big tech.

GitHub
EZ-WifiBroadcast logo

Self-host EZ-WifiBroadcast

Low-latency HD FPV video and telemetry link over raw WiFi

ReleaseOpen SourceGPL-2.0
Updated2 years ago
LanguageC
Setup difficultyAdvanced
Stars
901
Storage
minimum 2GB SD cards (two of them)
Port
5600 (UDP port the ground station forwards the H.264 video stream to for second-display apps)
Install with Linux

What is EZ-WifiBroadcast?

Should you self-host EZ-WifiBroadcast?

EZ-WifiBroadcast scores 52/100 on selfhost.directory (how scoring works) and ranks #14 of 36 in Video Streaming. It has 901 GitHub stars.

There was no stable release in the past 12 months, so check the repository's recent activity before you rely on it.

Setup is advanced: plan for several services and some ongoing maintenance. It is GPL-2.0-licensed and written mostly in C.

Its closest alternative on selfhost.directory is piped (70/100, 10 295 stars). It scores higher overall, so compare the two before you pick. See EZ-WifiBroadcast vs piped side by side.

Features

  • 1080p30 video up to 12 Mbit bitrate
  • Analog-like graceful signal degradation
  • Bidirectional MAVLink telemetryWiki says the uplink is not 100% compatible with all flight controllers yet.
  • Customizable on-screen display
  • Field-selectable configuration profiles
  • Ground recording and screenshots
  • HDMI camera input
  • Link quality logging and graphing
  • Long range links
  • Low-latency HD video downlink
  • Multi-band radio support
  • RC control over the link
  • Second-display forwarding
  • Text-file configuration without Linux skills
  • Transmit and receive antenna diversity

EZ-WifiBroadcast README

How to install EZ-WifiBroadcast

Install EZ-WifiBroadcast with Linux

Download the sdcard image and unzip it

Write it onto two (minimum 2GB) SD cards. One for the AirPi and another for the GroundPi. See instructions on this page on how to write .img files on SD cards. Pi with the camera connected will act as AirPi, without camera will act as GroundPi.

Insert each SD card into each Raspberry Pi and boot them up.

Settings live on the SD card's boot partition in wifibroadcast-1.txt, osdconfig.txt and apconfig.txt; releases are distributed as .zip images on Google Drive rather than from GitHub.

How to configure EZ-WifiBroadcast

  • AIRODUMPRun a WiFi network scan before starting the receiver; noted as little tested.

    Run a WiFi network scan before starting the receiver; noted as little tested.

    values: Y / N

  • AIRODUMP_SECONDSHow long the WiFi scanner is shown; minimum recommended scanning time is 25 seconds.

    How long the WiFi scanner is shown; minimum recommended scanning time is 25 seconds.

  • apconfig.txtFile holding the WiFi hotspot (access point) options.

    File holding the WiFi hotspot (access point) options.

  • BITRATE_PERCENT65Share of the measured available bitrate used for video when VIDEO_BITRATE is auto.

    Share of the measured available bitrate used for video when VIDEO_BITRATE is auto.

    values: percent; values above 75 not recommended

  • CTS_PROTECTIONAUTOCTS protection, improving coexistence with other WiFi traffic; recommended Y when using RC over the link.

    CTS protection, improving coexistence with other WiFi traffic; recommended Y when using RC over the link.

    values: AUTO / Y / N

  • DATARATE4WiFi datarate; lower values give more range, higher values more quality.

    WiFi datarate; lower values give more range, higher values more quality.

    values: 1=5.5Mbit, 2=11Mbit, 3=12Mbit, 4=19.5Mbit/18Mbit, 5=24Mbit, 6=36Mbit

  • DEBUGCollects extra debug logs that are written out to a USB memory stick.

    Collects extra debug logs that are written out to a USB memory stick.

    values: Y / N

  • ENABLE_RCRC control protocol carried over the link, or disabled.

    RC control protocol carried over the link, or disabled.

    values: mavlink / msp / sumd / ibus / srxl / disabled

  • ENABLE_SCREENSHOTSTakes a screenshot every 10 seconds.

    Takes a screenshot every 10 seconds.

    values: Y / N

  • ENABLE_SERIAL_TELEMETRY_OUTPUTEnable outputting telemetry on a ground Pi serial port, for example to an antenna tracker.

    Enable outputting telemetry on a ground Pi serial port, for example to an antenna tracker.

    values: Y / N

  • ETHERNET_HOTSPOTForwards the received video and telemetry streams to a device attached over Ethernet.

    Forwards the received video and telemetry streams to a device attached over Ethernet.

    values: Y / N

  • EXTERNAL_TELEMETRY_SERIALPORT_GROUND/dev/serial0Ground Pi serial port carrying the external telemetry radio.

    Ground Pi serial port carrying the external telemetry radio.

    values: /dev/serial0 or /dev/ttyUSB0

  • EXTERNAL_TELEMETRY_SERIALPORT_GROUND_BAUDRATEBaudrate of the external telemetry serial port on the ground Pi.

    Baudrate of the external telemetry serial port on the ground Pi.

  • EXTRAPARAMSAdditional raspivid parameters appended to the camera capture command.

    Additional raspivid parameters appended to the camera capture command.

  • FC_RC_BAUDRATEBaudrate of the air Pi to flight-controller RC link.

    Baudrate of the air Pi to flight-controller RC link.

    values: 19200 is minimum

  • FC_RC_SERIALPORTSerial port on the air Pi used for the flight-controller RC connection.

    Serial port on the air Pi used for the flight-controller RC connection.

    values: /dev/serial0 or /dev/ttyUSB0

  • FC_TELEMETRY_BAUDRATEBaudrate for the air Pi flight-controller telemetry serial link.

    Baudrate for the air Pi flight-controller telemetry serial link.

  • FC_TELEMETRY_SERIALPORTSerial port used for the telemetry link between air Pi and flight controller.

    Serial port used for the telemetry link between air Pi and flight controller.

    values: /dev/serial0 or /dev/ttyUSB0

  • FORWARD_STREAMFormat of the forwarded stream for second displays.

    Format of the forwarded stream for second displays.

    values: raw / rtp

  • FPSVideo frame rate.

    Video frame rate.

    values: 30, 40, 48, 59.9

  • FREQCentre frequency in MHz for the link; the wiki lists supported values from 2312 up to 5825 MHz.

    Centre frequency in MHz for the link; the wiki lists supported values from 2312 up to 5825 MHz.

    values: 2312-2712, 4920-4980, 5180-5320, 5500-5825 MHz

  • FREQ_RX[0]Frequency of a RX WiFi card (index 0-3, max four cards).

    Frequency of a RX WiFi card (index 0-3, max four cards).

  • FREQSCANSet to Y on the receiver to auto-scan for the frequency; the TX frequency still must be set. Flagged as possibly buggy.

    Set to Y on the receiver to auto-scan for the frequency; the TX frequency still must be set. Flagged as possibly buggy.

    values: Y / N

  • FREQ_TX[0]Frequency of the first TX WiFi card (index 0-1) for dual TX mode.

    Frequency of the first TX WiFi card (index 0-1) for dual TX mode.

  • HEIGHTCamera capture height (max depends on the Pi camera version).

    Camera capture height (max depends on the Pi camera version).

  • KEYFRAMERATEKeyframe interval: lower values recover from glitches faster at the cost of quality; minimum value is 2.

    Keyframe interval: lower values recover from glitches faster at the cost of quality; minimum value is 2.

    values: integer, minimum 2

  • MAC_RX[0]MAC address of a RX WiFi card (index 0-3, max four cards).

    MAC address of a RX WiFi card (index 0-3, max four cards).

  • MAC_TX[0]MAC address of the first TX WiFi card (index 0-1, max two cards) for dual TX mode.

    MAC address of the first TX WiFi card (index 0-1, max two cards) for dual TX mode.

  • MAVLINK_FORWARDERmavlink-routerdWhich MAVLink forwarding daemon to use for telemetry.

    Which MAVLink forwarding daemon to use for telemetry.

    values: mavlink-routerd / cmavnode

  • osdconfig.txtFile holding the on-screen display options.

    File holding the on-screen display options.

  • QUIETSuppresses text messages about display and WiFi card setup for a clean screen.

    Suppresses text messages about display and WiFi card setup for a clean screen.

    values: Y / N

  • RELAYEnables wifibroadcast relay mode, re-transmitting the received video and telemetry to another receiver.

    Enables wifibroadcast relay mode, re-transmitting the received video and telemetry to another receiver.

    values: Y / N

  • RELAY_FREQFrequency used by the relay output.

    Frequency used by the relay output.

  • RELAY_NICWiFi stick used for the relay output.

    WiFi stick used for the relay output.

  • TELEMETRY_OUTPUT_SERIALPORT_GROUND/dev/serial0Ground Pi serial port used for telemetry output.

    Ground Pi serial port used for telemetry output.

    values: /dev/serial0 or /dev/ttyUSB0

  • TELEMETRY_OUTPUT_SERIALPORT_GROUND_BAUDRATEBaudrate for the telemetry output serial port on the ground Pi.

    Baudrate for the telemetry output serial port on the ground Pi.

  • TELEMETRY_TRANSMISSIONWhether telemetry up/downlink runs over wifibroadcast or through an external LRS or 3DR radio.

    Whether telemetry up/downlink runs over wifibroadcast or through an external LRS or 3DR radio.

    values: wbc / external

  • TELEMETRY_UPLINKMavlink uplink for ground control software; noted as not working correctly with all GCS/flight controller combinations.

    Mavlink uplink for ground control software; noted as not working correctly with all GCS/flight controller combinations.

    values: disabled / mavlink

  • TXMODESelects single or dual transmit WiFi card operation; dual mode needs per-card MAC and frequency settings.

    Selects single or dual transmit WiFi card operation; dual mode needs per-card MAC and frequency settings.

    values: single / dual

  • VIDEO_BITRATEautoVideo bitrate; auto measures the available bitrate.

    Video bitrate; auto measures the available bitrate.

    values: auto or a manual kbit/s value

  • VIDEO_BLOCKLENGTHLength of each FEC block; example combos given are 12/6/768, 16/8/512, 8/4/1024.

    Length of each FEC block; example combos given are 12/6/768, 16/8/512, 8/4/1024.

  • VIDEO_BLOCKSFEC block parameter trading link resiliency against latency and data rate (with VIDEO_FECS and VIDEO_BLOCKLENGTH).

    FEC block parameter trading link resiliency against latency and data rate (with VIDEO_FECS and VIDEO_BLOCKLENGTH).

  • VIDEO_FECSNumber of forward-error-correction blocks; more FEC costs bandwidth and can raise latency.

    Number of forward-error-correction blocks; more FEC costs bandwidth and can raise latency.

  • VIDEO_TMPWhere temporary video/screenshot/telemetry data is buffered before saving.

    Where temporary video/screenshot/telemetry data is buffered before saving.

    values: memory / sdcard

  • VIDEO_UDP_PORT5600UDP port the video stream is sent to for external viewers.

    UDP port the video stream is sent to for external viewers.

  • WIDTHCamera capture width (max depends on the Pi camera version).

    Camera capture width (max depends on the Pi camera version).

  • wifibroadcast-1.txtMain configuration file on the SD card boot partition, split into COMMON, RX and TX sections; settings should be identical on both cards.

    Main configuration file on the SD card boot partition, split into COMMON, RX and TX sections; settings should be identical on both cards.

  • WIFI_HOTSPOTEnables a hotspot on the ground Pi that forwards video and telemetry to a phone or computer; needs at least 120 MHz separation from the video frequency.

    Enables a hotspot on the ground Pi that forwards video and telemetry to a phone or computer; needs at least 120 MHz separation from the video frequency.

    values: Y / N

  • WIFI_HOTSPOT_NICNetwork adapter used for the hotspot: the Pi 3 internal WiFi or the MAC address of a USB card.

    Network adapter used for the hotspot: the Pi 3 internal WiFi or the MAC address of a USB card.

    values: internal / adapter MAC address

FAQ

Is this legal?

Probably, but it drives standard WiFi hardware in monitor mode with packet injection, which is not its official use; some frequencies and high power settings may be illegal where you live, so check before transmitting.

How many WiFi dongles can I use?

Up to two on the AirPi; on the GroundPi up to three Atheros or five Ralink cards, or a combination of two Atheros and two Ralink.

Why do I get a low power warning?

Usually the power supply is short on voltage or amperage, or the wiring is too thin.

Why am I getting artifacts in my video?

Many causes are possible - other WiFi users, the two Pis being too close, RC transmitter interference, bad wiring or power, a wrong or fake dongle, a mistaken setting, overheating or blocked signal - and using several receive dongles on the GroundPi is the best remedy.

Why can't I just use the Pi onboard WiFi for WBC?

The built-in WiFi lacks driver support for monitor mode and packet injection; Nexmon gets partial results but injection rates were too low in testing.

Can I use this other WiFi dongle that's not on the list?

Probably not: the system needs cards whose chip supports monitor mode and packet injection and has compatible drivers.

Can I run WBC on this other board (Orange Pi, Banana Pi, BeagleBoard)?

No. The image is Raspberry Pi OS based, the AirPi needs a raspivid-compatible camera and Broadcom's H.264 hardware encoder, and the code is Pi-specific; there is a little flexibility on the ground side.

Do I need a WiFi dongle for video, another for telemetry, and another for RC control?

No, one dongle per Pi is the minimum; extra dongles are only used to add diversity.

What is a Raspberry Pi?

A complete computer on one circuit board, here running a Linux derivative - though users do not have to touch the software side.

What are my WBC frequency options so I don't conflict with my RC transmitter?

The recommended approach is to run RC over the link too (all-in-one); otherwise the software runs on 2.4 GHz or 5.8 GHz depending on your dongles, and 2.3 GHz is often illegal and interferes with 2.4 GHz transmitters.

When I lose connection will I see a "blue screen"?

No - a weakening signal shows progressive artifacts and pixelation and then the image usually freezes, while telemetry and RC keep working beyond video loss.

How long does WBC take to regain a lost "connection"?

Essentially instantaneous: because the link behaves like analog radio, it comes back as soon as the interference stops.

What kind of range can I expect?

Typical builds manage 1-3 km, and long-range builds have exceeded 30 km.

What is the lowest latency I can achieve?

About 110 ms glass-to-glass, though most setups sit around 125 ms.

More in Real-time

Rate this project

Click to rate — no account needed.

0 comments

Posting as guest
Loading comments…