Packet image format

SSDV packet reference

Slow Scan Digital Video is a packetised digital image format used around high-altitude balloon and amateur-satellite experiments. It belongs beside the SSTV reference library, but it is not an analog SSTV mode: the picture is JPEG-derived data carried in packets, not a line-by-line audio tone raster.

5566CallsignIDSeqWHFlagsMCU205-byte payloadCRC32RS parity

Normal SSDV packets are 256 bytes: a 15-byte header, 205 payload bytes, 4 CRC32 bytes, and 32 Reed-Solomon parity bytes.

Packet layouts

LayoutTypeHeaderPayloadCRCFECTypical use
Normal FEC0x6615 bytes205 bytes4 bytes at 220-22332 bytes at 224-255Unreliable RF links where byte errors are expected but framing can usually be recovered.
No-FEC0x6715 bytes237 bytes4 bytes at 252-255noneLinks with their own robust FEC layer, or controlled fixtures where packet overhead matters.

Normal FEC packet field table

This table follows the public UKHAS and Habhub packet map for the normal 0x66 layout. The no-FEC 0x67 layout keeps the same 15-byte header but expands payload to 237 bytes and moves CRC32 to bytes 252-255.

OffsetSizeNameValueMeaning
01Sync byte0x55Packet marker. A stream may contain extra sync bytes before a packet.
11Packet type0x66 or 0x670x66 identifies a normal packet with Reed-Solomon parity; 0x67 identifies the no-FEC layout.
24CallsignBase-40Base-40 encoded callsign, normally derived from an alphanumeric callsign up to six characters.
61Image ID0-255Sender-selected image identifier. Receivers use it with the callsign to separate one image from the next.
72Packet IDbig-endianPacket sequence number for the current image, beginning at 0.
91Widthpixels / 16Image width in MCU block units. A zero value is invalid.
101Heightpixels / 16Image height in MCU block units. A zero value is invalid.
111Flags00qqqexxQuality, end-of-image, and chroma subsampling flags.
121MCU offset0-204 or 0xFFByte offset inside the payload where the first complete MCU begins, or 0xFF when no complete MCU starts in this packet.
132MCU indexbig-endian or 0xFFFFIndex of the MCU pointed to by MCU offset, or 0xFFFF when no complete MCU starts in this packet.
15205PayloadJPEG scan dataNormal-mode payload bytes. No-FEC packets extend the payload to byte 251.
2204CRC32 checksumbig-endianCRC over the packet type through the end of the payload in the active layout.
22432Reed-Solomon paritynormal mode onlyParity bytes for normal packets. Not present in no-FEC packets.

Flag byte

BitsNameMeaning
7-6ReservedReserved bits, normally zero.
5-3JPEG qualityThree-bit quality field stored as quality XOR 4, representing levels 0-7.
2EOIEnd-of-image flag, set only on the last packet for the image.
1-0Subsampling modePublished mode values identify 2x2, 1x2, 2x1, or 1x1 MCU/chroma layouts.

Image constraints

Transport profiles

Historical UKHAS balloon practice

8-bit RTTY

The UKHAS guide describes the implementation as RTTY at various baud rates and notes that better transports may be preferable.

Amateur packet-radio carriage

AX.25 / KISS packet

SSDV packets can be placed inside packet-radio frames when the modem/framing layer supplies reliable packet boundaries.

Audio-path packet experiments

Bell 202 AFSK 1200

Useful for sound-card tests and simple amateur packet links, usually with AX.25 framing around the SSDV bytes.

Satellite-style packet downlinks

9600 FSK/GFSK

Higher symbol rate paths need tighter frequency control and more careful demodulator recovery than basic AFSK audio.

Satellite payload-specific streams

Mission FEC containers

Some spacecraft wrap image packets in AO-40/FUNcube-style, IL2P, or other mission-specific telemetry/FEC framing before the SSDV layer is visible.

Source notes

UKHAS SSDV guide

Packet offsets, JPEG constraints, Reed-Solomon notes, lost-packet behaviour, and historical update notes.

fsphil/ssdv reference encoder

Reference command-line encoder/decoder and README. The GitHub copy is archived and points to Codeberg as the continuing home.

fsphil/ssdv header definitions

Packet-size constants, header length, CRC length, Reed-Solomon length, callsign limit, packet types, and JPEG processor state.

SSDVKit local Swift package

Local Swift implementation notes are used only as implementation context; upstream protocol documents remain the public authority.