A Windows receiver and decoder for DVB-S2 transmissions. It shows the live video, saves the SSDV photos sent by the transmitter and can forward the stream to the SkyEdge MX merger, which combines the reception of many ground stations. It works with an RTL-SDR dongle or a HackRF One. One of its uses is video from high-altitude balloons.
MX Uploader is a separate program in the same release, with its own small ZIP: it sends the stream of other DVB-S2 decoders (MiniTioune, SDRangel, SatDump and others) to the same MX merger.
Inside the receiver, the DVB-S2 demodulator is leandvb from leansdr by pabr,
and the LDPC decoder is ldpc_tool by Ahmet Inan (adapted by pabr), both with our patches. This project adds the Windows receiver
window, SDR control, SSDV photos and the MX upload. It is an unofficial program, not affiliated with the leansdr
author: please report problems here, not upstream.
Get the ZIP from Releases. There is no installer: everything is in one folder.
New in 1.0.2: better reception of a weak or noisy signal. With a weak signal, 1.0.1 could show FRAMELOCK and a good MER and still produce no video until the signal faded away; 1.0.2 recovers from this by itself and decodes noticeably more from weak flight recordings. With a good signal nothing changes, and the window is the same as in 1.0.1.
| File in the release | For whom |
|---|---|
SP5LOT-dvbs2-decoder-<version>-win64.zip |
the receiver with RTL-SDR or HackRF |
SP5LOT-mx-uploader-<version>-win64.zip |
MX Uploader, a separate program for stations that receive with another decoder (under 1 MB) |
SP5LOT-dvbs2-sample-iq.zip |
a 19.5 s sample recording to try decoding a recorded IQ file |
SP5LOT-dvbs2-decoder-<version>-source.zip |
source code of the receiver, for developers |
SP5LOT-mx-uploader-<version>-source.zip |
source code of MX Uploader, for developers (from 1.0.2) |
You need
- Windows 10, 64-bit (tested on three PCs). Windows 11 should work but has not been tested.
- An RTL-SDR dongle or a HackRF One with the WinUSB driver. Install it once with Zadig: pick the device, choose WinUSB, click Install Driver.
- Optional: VLC media player 64-bit in its default folder. The video preview uses it; without VLC the preview uses ffmpeg instead.
Install
- Extract all files from the ZIP into one folder where you can write, for example on the Desktop.
Not into
C:\Program Files: the programs save their settings next to the exe. - Run
leandvb_gui.exe(the receiver), ormx_uploader.exefrom the MX Uploader ZIP. - The programs are not signed, so Windows may show "Windows protected your PC": click More info, then Run anyway.
- On a slow PC the very first start can take up to half a minute (VLC builds its plugin list). Later starts are fast.
flowchart LR
TX["DVB-S2 transmitter<br/>(for example a balloon)"] -- radio --> SDR["RTL-SDR<br/>or HackRF"]
SDR --> RX["leandvb_gui.exe<br/>receiver"]
F["IQ recording<br/>(SatDump, rtl_sdr, HackRF)"] -.->|IQ file| RX
RX --> V["video in the window"]
RX --> P["SSDV photos"]
RX --> R["TS recording / VLC"]
RX -- "Upload to MX" --> MX[("MX merger<br/>(SkyEdge)")]
OD["other decoder<br/>MiniTioune, SDRangel, SatDump"] -- "TS over UDP :8888" --> UP["mx_uploader.exe"]
UP --> MX
| What it is | What to do | |
|---|---|---|
| 1 | Source / SDR | Choose RTL-SDR or HackRF, type the frequency in MHz (default 437.000), set the gain. Or choose IQ file to decode a recording. |
| 2 | Signal | DVB-S2, the MODCOD of the transmitter (default QPSK 3/4), symbol rate (default 500000). Lock (weak) with Follow TX changes is the default, see below. |
| 3 | Output | What to do with the stream, in any combination: preview, VLC, TS recording, SSDV photos, upload to MX. |
| 4 | Constellation | Four clean dots = a good QPSK signal. A round cloud = too weak. |
| 5 | Spectrum | The transmitter is the hump in the middle. Level moves the scale. |
| 6 | Video | Live video. Double-click for full screen. |
| 7 | Received image (SSDV) | The photo being received now and the list of photos received since the start. Double-click a thumbnail to open it. |
| 8 | Status | LOCK: FRAME (green) means data is decoded, CARRIER means the signal is found but not decoded yet. MER: signal quality in dB, more is better (for QPSK 3/4 the DVB-S2 standard gives about 4 dB). SS: signal strength. FREQ: carrier offset. VBER: bit errors, 0 is clean. |
Modcod mode. A transmitter usually keeps one MODCOD (a balloon for the whole flight), so the receiver decodes only the selected one (Lock). If the transmitter uses another MODCOD, Follow TX changes switches the receiver to it by itself within a few seconds (short restart), and the choice is remembered. AUTO accepts every MODCOD at once, for transmitters that change it often.
- Plug in the SDR and start
leandvb_gui.exe. - 1: choose the SDR and type the frequency of the transmitter.
- 2: check the symbol rate (ask the operator of the transmitter, for example 500000 or 250000).
- Press START. After a few seconds LOCK shows FRAME, the video appears and photos start to arrive.
- Preview (in-app): video in the window.
- Stream to VLC (UDP): the full transport stream to an address and port, default
127.0.0.1:1234. In VLC: Media > Open Network Stream >udp://@:1234. It can also go to another PC. - Record TS (all PIDs): a new file
rec_<date>.tsat every start, never overwritten. Folder: Videos\SkyEdge DVB. - Receive files (SSDV): photos sent by the transmitter, saved as
rx_NNNN.jpg. Folder: Pictures\SkyEdge DVB\SSDV. The ... button chooses another folder. - Upload to MX server (tsmerge): tick it and enter your station callsign and key. Both are empty after installation; the operator of the MX merger gives them to you. The status line shows when the server has accepted your station.
New in 1.0.1: the receiver can decode a recording instead of a live SDR, for example a file saved by SatDump, rtl_sdr or a HackRF.
- 1 Source / SDR, Type: choose IQ file and pick the file with the ... button.
The format and the sample rate are read from the file name, for example
2025-05-10_15-16-13_1536000SPS_437200000Hz.cs8(SatDump):.cs8/.s8,.u8/.cu8(rtl_sdr),.cs16/.s16,.cf32/.f32, and1536000SPSor2048kspsfor the sample rate. The line detected: shows the result. - 2 Signal: the symbol rate as transmitted (for example 500000). The transmitter should be near the centre of the recording.
- Press START. With the preview on, the file plays at its real speed; Loop repeats it. No lock? Try Swap I/Q in the Advanced section (some recordings have the spectrum mirrored).
When decoding a file, the MODCOD is always detected automatically (AUTO) and nothing is sent to the MX merger, even with Upload to MX server ticked.
Sample recording: SP5LOT-dvbs2-sample-iq.zip on the release page: 19.5 s of a real signal from the
SkyEdge transmitter (QPSK 3/4, 500000 symbols/s, recorded with an RTL-SDR at 2.048 MS/s). Choose it as the
IQ file and press START: LOCK shows FRAME and the video shows clouds seen from a balloon.
For stations that already receive with another DVB-S2 decoder (MiniTioune, SDRangel, SatDump or any decoder
that can send the transport stream over UDP): MX Uploader takes that stream and sends it to the SkyEdge MX merger.
One small program, no installation: mx_uploader.exe is in its own small ZIP, SP5LOT-mx-uploader-<version>-win64.zip
(up to 1.0.1 it was also inside the receiver ZIP).
Several receivers at once: one copy per receiver, each with its own settings file and input port, for example
mx_uploader.exe --config station2.ini.
- Settings are saved next to the exe:
leandvb_gui_settings.iniandmx_uploader.ini. They keep the folders, outputs, MX callsign and key, SDR and gain, and the MODCOD. They contain your key: do not share them. - Diagnostic logs:
%TEMP%\leandvb_gui\gui_log.txtand the folder%TEMP%\mx_uploader\. The logs contain your callsign and folder names, never your key. - All files from the ZIP must stay in the same folder. When you update to a new version, copy
leandvb_gui_settings.ini(andmx_uploader.ini) into the new folder to keep your settings.
- In AUTO mode a very weak transmission with a low MODCOD (QPSK 1/4 to 1/2) may be treated as noise. The SkyEdge transmitter uses QPSK 3/4 and is not affected.
- Frequency and symbol rate are not remembered: every start begins with 437.000 MHz and 500000 symbols/s.
- The bundled RTL-SDR library has no support for the RTL-SDR Blog V4 (not tested with a V4).
- HackRF: in rare cases the USB stream stops; restart the program.
- Folder names with characters outside the Windows system code page may not work.
Please use Issues: there are short forms for a bug report and for an idea.
For a bug, the version (top right of the window) and the end of gui_log.txt help most.
- Source code:
SP5LOT-dvbs2-decoder-<version>-source.ziphas the receiver, our patches to the engine andBUILDING.md(how to build it with MSYS2); from 1.0.2 MX Uploader has its ownSP5LOT-mx-uploader-<version>-source.zip. - The DVB-S2 engine is leansdr by pabr (www.pabr.org) with our patches.
- SSDV photos travel inside the same DVB-S2 transport stream as SSDV packets on PID 0x00C8 (SkyEdge format).
- The address of the SkyEdge MX merger is not in the source code; a build from source can use your own merger (see
BUILDING.md).
GNU General Public License v3.0 (LICENSE). Third-party components and their licenses: THIRD_PARTY.md.


