Release v2.4.0: RTP Destination Control + Web UI
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_SOCKETTLV command support
2. Web UI for Radiod Monitoring
Complete browser-based interface for monitoring radiod:
cd webui
./start.sh
# Open http://localhost:5000Features:
- π‘ 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.0Or 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.shThen 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:
- RTP_DESTINATION_FEATURE.md - Complete feature guide
- CONTROL_COMPARISON.md - Command comparison
- IMPLEMENTATION_STATUS.md - Implementation status
- WEBUI_SUMMARY.md - Web UI architecture
- CHANGELOG.md - Complete changelog
- webui/README.md - Web UI usage guide
Release Notes:
- RELEASE_NOTES_v2.4.0.md - Comprehensive 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 Release Notes: RELEASE_NOTES_v2.4.0.md
- Changelog: CHANGELOG.md
- Web UI Guide: webui/README.md
- Issues: https://github.com/mijahauan/ka9q-python/issues
- ka9q-radio: https://github.com/ka9q/ka9q-radio
Full Changelog: https://github.com/mijahauan/ka9q-python/blob/main/CHANGELOG.md
Thank you for using ka9q-python! π»β¨