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.
Packet image format
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.
Normal SSDV packets are 256 bytes: a 15-byte header, 205 payload bytes, 4 CRC32 bytes, and 32 Reed-Solomon parity bytes.
| Layout | Type | Header | Payload | CRC | FEC | Typical use |
|---|---|---|---|---|---|---|
| Normal FEC | 0x66 | 15 bytes | 205 bytes | 4 bytes at 220-223 | 32 bytes at 224-255 | Unreliable RF links where byte errors are expected but framing can usually be recovered. |
| No-FEC | 0x67 | 15 bytes | 237 bytes | 4 bytes at 252-255 | none | Links with their own robust FEC layer, or controlled fixtures where packet overhead matters. |
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.
| Offset | Size | Name | Value | Meaning |
|---|---|---|---|---|
| 0 | 1 | Sync byte | 0x55 | Packet marker. A stream may contain extra sync bytes before a packet. |
| 1 | 1 | Packet type | 0x66 or 0x67 | 0x66 identifies a normal packet with Reed-Solomon parity; 0x67 identifies the no-FEC layout. |
| 2 | 4 | Callsign | Base-40 | Base-40 encoded callsign, normally derived from an alphanumeric callsign up to six characters. |
| 6 | 1 | Image ID | 0-255 | Sender-selected image identifier. Receivers use it with the callsign to separate one image from the next. |
| 7 | 2 | Packet ID | big-endian | Packet sequence number for the current image, beginning at 0. |
| 9 | 1 | Width | pixels / 16 | Image width in MCU block units. A zero value is invalid. |
| 10 | 1 | Height | pixels / 16 | Image height in MCU block units. A zero value is invalid. |
| 11 | 1 | Flags | 00qqqexx | Quality, end-of-image, and chroma subsampling flags. |
| 12 | 1 | MCU offset | 0-204 or 0xFF | Byte offset inside the payload where the first complete MCU begins, or 0xFF when no complete MCU starts in this packet. |
| 13 | 2 | MCU index | big-endian or 0xFFFF | Index of the MCU pointed to by MCU offset, or 0xFFFF when no complete MCU starts in this packet. |
| 15 | 205 | Payload | JPEG scan data | Normal-mode payload bytes. No-FEC packets extend the payload to byte 251. |
| 220 | 4 | CRC32 checksum | big-endian | CRC over the packet type through the end of the payload in the active layout. |
| 224 | 32 | Reed-Solomon parity | normal mode only | Parity bytes for normal packets. Not present in no-FEC packets. |
| Bits | Name | Meaning |
|---|---|---|
| 7-6 | Reserved | Reserved bits, normally zero. |
| 5-3 | JPEG quality | Three-bit quality field stored as quality XOR 4, representing levels 0-7. |
| 2 | EOI | End-of-image flag, set only on the last packet for the image. |
| 1-0 | Subsampling mode | Published mode values identify 2x2, 1x2, 2x1, or 1x1 MCU/chroma layouts. |
Historical UKHAS balloon practice
The UKHAS guide describes the implementation as RTTY at various baud rates and notes that better transports may be preferable.
Amateur packet-radio carriage
SSDV packets can be placed inside packet-radio frames when the modem/framing layer supplies reliable packet boundaries.
Audio-path packet experiments
Useful for sound-card tests and simple amateur packet links, usually with AX.25 framing around the SSDV bytes.
Satellite-style packet downlinks
Higher symbol rate paths need tighter frequency control and more careful demodulator recovery than basic AFSK audio.
Satellite payload-specific streams
Some spacecraft wrap image packets in AO-40/FUNcube-style, IL2P, or other mission-specific telemetry/FEC framing before the SSDV layer is visible.
Packet offsets, JPEG constraints, Reed-Solomon notes, lost-packet behaviour, and historical update notes.
Reference command-line encoder/decoder and README. The GitHub copy is archived and points to Codeberg as the continuing home.
Packet-size constants, header length, CRC length, Reed-Solomon length, callsign limit, packet types, and JPEG processor state.
Public packet field table and normal/no-FEC offset summary.
Local Swift implementation notes are used only as implementation context; upstream protocol documents remain the public authority.