Skip to content

Release v2.4.0: RTP Destination Control + Web UI

Choose a tag to compare

@mijahauan mijahauan released this 30 Nov 12:36
· 181 commits to main since this release

Release v2.4.0: RTP Destination Control + Web UI

Release Date: November 29, 2025
Type: Major Feature Release
Compatibility: Fully backward compatible with v2.3.0


πŸŽ‰ What's New

1. Per-Channel RTP Destination Control

Control exactly where each channel's RTP stream goes:

from ka9q import RadiodControl

control = RadiodControl("radiod.local")

# Specify unique destination for this channel
control.create_channel(
    ssrc=14074000,
    frequency_hz=14.074e6,
    preset="usb",
    destination="239.1.2.3:5004"  # NEW!
)

# Works with hostnames too
control.tune(ssrc=7074000, destination="wspr.local")

Features:

  • Per-channel RTP multicast destinations
  • Supports IP addresses and DNS names
  • Port specification (defaults to 5004)
  • Full OUTPUT_DATA_DEST_SOCKET TLV command support

2. Web UI for Radiod Monitoring

Complete browser-based interface for monitoring radiod:

cd webui
./start.sh
# Open http://localhost:5000

Features:

  • πŸ“‘ Auto-discovery of radiod instances
  • πŸ“Š Real-time channel monitoring (1-second updates)
  • πŸ“± Responsive design (desktop/tablet/mobile)
  • 🎨 Modern dark theme
  • ⚑ Live SNR, power, noise measurements
  • πŸ”„ Auto-refresh with error handling
  • 🚫 No framework dependencies (vanilla JS)

Layout:

  • 4-column display: Tuning, Filter, Output, Signal
  • Full-width Gain & AGC section
  • Mobile-friendly responsive design

3. Discovery Improvements

Fixed duplicate entries in radiod service discovery:

  • Deduplicates by IP address
  • Alphabetical sorting
  • Handles multiple avahi-browse results

πŸ“¦ Installation

pip install git+https://github.com/mijahauan/ka9q-python.git@v2.4.0

Or clone and install:

git clone https://github.com/mijahauan/ka9q-python.git
cd ka9q-python
git checkout v2.4.0
pip install -e .

πŸš€ Quick Start

RTP Destination Control

from ka9q import RadiodControl

control = RadiodControl("radiod.local")

# Create channel with specific destination
control.create_channel(
    ssrc=14074000,
    frequency_hz=14.074e6,
    preset="usb",
    sample_rate=12000,
    destination="239.1.2.3:5004"
)

Web UI

cd webui
pip install -r requirements.txt
./start.sh

Then open http://localhost:5000 in your browser.


πŸ“Š Implementation Status

  • βœ… 100% coverage of tune.c commands
  • βœ… 52.5% coverage of control.c commands (all core features)
  • βœ… All tuning, filtering, gain, AGC, and output controls
  • βœ… NEW: RTP destination control

What You Can Control:

  • Frequency, Mode, Filters (Low/High edges, Kaiser beta)
  • Gain (Manual, RF gain, RF atten, Headroom)
  • AGC (Enable, Hangtime, Threshold, Recovery rate)
  • Output (Sample rate, Encoding, Destination, Channels)

πŸ“ Documentation

New Documentation:

Release Notes:


🎯 Use Cases

RTP Destination Control

  • Dynamic stream routing per channel
  • Multiple destinations for different frequencies
  • Network-efficient multicast distribution
  • Custom stream organization

Web UI

  • Remote monitoring without SSH
  • Multi-user access
  • Mobile/tablet monitoring
  • Visual signal quality assessment
  • Demo/presentation mode

πŸ“ˆ Statistics

  • 17 files changed
  • 3,155 lines added, 286 lines deleted
  • Web UI: 1,100+ lines of production code
  • Documentation: 2,000+ lines across 5 new docs
  • Test suite: Comprehensive socket encoding tests

πŸ”„ Backward Compatibility

100% backward compatible - All existing code continues to work:

# v2.3.0 code still works in v2.4.0
control = RadiodControl("radiod.local")
control.create_channel(ssrc=14074000, frequency_hz=14.074e6, preset="usb")

New features are optional - use them when you need them!


πŸ§ͺ Testing

Tested on:

  • βœ… Single-homed and multi-homed systems
  • βœ… Multiple radiod instances
  • βœ… Real-time monitoring scenarios
  • βœ… Desktop browsers (Chrome, Firefox, Safari, Edge)
  • βœ… Mobile browsers (iOS Safari, Android Chrome)

πŸ”— Resources


Full Changelog: https://github.com/mijahauan/ka9q-python/blob/main/CHANGELOG.md


Thank you for using ka9q-python! πŸ“»βœ¨