Add SDRTrunk direct Icecast stream support#45
Conversation
|
Overall review notes:
|
Add an SDRTrunk control mode that accepts Icecast-compatible source audio directly from sdrtrunk and exposes it as an RX-only RC2 radio. Includes live MP3 stream decoding, inline/admin metadata handling, receive-state gating, stale source restart handling, and example configuration for direct sdrtrunk ingest.
- Stop forwarding idle SDRTrunk audio when the receive gate is closed - Prevent stale talkgroup metadata from keeping RX latched - Clear SDRTrunk display state after hang timeout - Build daemon publish artifact successfully for Windows/Linux - Identify workflow fixes for publish path and release packaging
|
Rebased this branch onto the current I also added section-level comments around the new SDRTrunk code, including the Icecast-compatible stream listener, MP3 decode path, receive gate behavior, metadata handling, source watchdog/reconnect behavior, and launcher script. Validation:
Note: I kept the |
@Brantlab I’m not sure I agree with this approach. Using a webstream as the middle of the audio path feels pretty hacky for a console use case. I think the cleaner design would be for the daemon to consume the SDRTrunk audio/metadata more directly and packetize it into whatever RC2 expects internally, rather than treating SDRTrunk like a broadcast stream first and then trying to push that back into the console. For reference, dvmtrstream is similar-ish however it targets TrunkRecorder and DVMBridge, but the general model is closer to what I’d expect: take source audio, chunk it with the relevant TG/source metadata, and send it forward directly. It avoids converting the audio path into a webstream just to ingest it again later. My concern is that this proposed method may work, but it works by adding a lot of avoidable moving parts. I’d personally like to see the audio chain kept as direct as possible. Also piggybacking on what @W3AXL said regarding the LLM-generated code: my concern is less about AI being used and more about what happens after this gets merged. Once this lands in mainline, the team effectively owns it and has to maintain it long-term. If this was something the lead developers wanted in the console, I assume it probably would have been designed and implemented intentionally already. I don’t think it’s fair for the long-term support burden of this feature to fall on the project maintainers, especially if this was not a direction they wanted the console to support in the first place. Perhaps this could be its own daemon rather than be in mainline. |
|
I looked closer at SDRTrunk’s internals, and I think your concern is valid. SDRTrunk’s existing streaming path appears to revolve around completed audio segments being written as temporary MP3 recordings and queued for broadcast. That is not ideal for my goal, which is near-synchronous monitoring where overlapping calls should be heard as quickly as possible rather than queued behind each other. A cleaner approach may be a separate SDRTrunk-to-RC2 bridge/exporter that hooks closer to SDRTrunk’s live Would the maintainers prefer that this live SDRTrunk bridge be maintained as a separate project, or is there a path where a clearly isolated section of RadioConsole2 upstream would be acceptable? I want to support and maintain the pieces I help develop, and over time I’d also be happy to help with other areas if that help is wanted. To be transparent: yes, I am using LLM assistance, but I am reviewing the generated code and making sure I understand the intent and behavior before submitting it. I know enough to check that it is not doing anything malicious or wildly out of scope, but I am not yet at the point where I could write this from scratch inside a project I have not developed in before. I’m trying to be honest about that and respectful of the maintenance burden this could create. |
|
I think keeping the core I think RX-only scanner feeding could definitely be handled by its own extension - Closing this PR, but encouraging exploration of a new |
Summary
This PR adds a new SDRTrunk daemon mode that lets RadioConsole2 receive live SDRTrunk audio through an Icecast-compatible source connection.
The daemon can now act as a lightweight Icecast-style ingest point for SDRTrunk, decode the incoming MP3 stream, forward the audio into RC2 over the normal WebRTC path, and update the console display from SDRTrunk metadata.
What Changed
SDRTrunkcontrol mode./admin/metadataupdates.Notes
This mode is intended for SDRTrunk’s streaming/broadcast output. SDRTrunk should be configured to publish to the daemon as an Icecast source, using the configured mount point such as
/sdrtrunk.The daemon does not require a separate Icecast server for this path; it provides the source listener directly and presents the stream to RC2 as a receive-only radio.
Testing