What is it? – AVR is a repeater project with the aim of getting Full Duplex multi-way Audio/Video to work with minimal delay. Normal DATV is over 1 second latency per decode so a Repeater is likely 2 seconds latency between users at the bare minimum, this is fine for ‘presenting’ but for general chit-chat it’s hard to work with!

How does it work?
- Each station runs AVR-U software on a Raspberry Pi with a touchscreen, a Pluto SDR radio and a webcam.
- The repeater takes multiple signal on one frequency and sends them all back out on another, so every station can see and hear everyone else.
Sharing the channel – Up to four people can transmit at once. The repeater splits each tenth of a second into little time slots and gives each person their own slot. Everyone takes very quick turns, so fast that it appears like everyone is live at the same time. The repeater also has its own slot for an information channel with its callsign and a test picture.
Cleaning up the signal – The repeater doesn’t just copy what it hears. It fully decodes each person’s signal, fixes any errors, and sends out a fresh, clean copy. So if your signal arrives a bit noisy, everyone else still gets a clear picture. That one took a lot of work to get right!
Things I tried along the way – I had a go at running the whole repeater on the little Pluto radio by itself, even building custom chip designs for it. It nearly worked, but it just didn’t have enough brainpower for four users, so the repeater now runs on a Raspberry Pi 4 with the Pluto as its radio, and it handles it easily.
How well does it work?
- Live video and audio from several stations at once
- Picture shows up on the other end in about 0.4 seconds
- Runs on any two frequencies the Pluto can handle
- All built from off-the-shelf bits: Raspberry Pis, Pluto SDRs, webcams and touchscreens
What’s next? – I’m playing with adding GPS timing, so stations always know exactly when to send, even if they can’t hear the repeater. I’m also looking at other codecs as it’s currently rather customised to the libx264 encoder (not the hardware one on the pi for various reasons).
Here’s how the signals appear in their ‘slots’:
