ipsc3-poc-stream is an authenticated command-line client that
sends an HTTP or HTTPS audio source to an IPSC3 talkgroup. It is intended for
authorised live feeds, scheduled amateur-radio programs, and direct MP3,
MP4, or other audio downloads. Native PCMU is delivered to POC listeners,
while the existing
server-side POC gateway converts the same call to AMBE for DMR-linked
repeaters, hotspots, and trunks.
HTTP/HTTPS media
-> ffmpeg decode and speech-band conditioning
-> 8 kHz mono PCMU
-> RTP/UDP at 20 ms per packet
-> IPSC3 POC server
-> native PCMU POC fanout
-> server-side AMBE conversion for DMR-linked talkgroups
The utility is a normal POC client. It does not access MySQL, connect to the
IPSC3 radio daemon, or invoke the vocoder directly. Server discovery comes
from https://api.ipsc3.net/, and the selected POC server supplies
the authoritative talkgroup catalogue and transmit permissions after login.
ipsc3-poc-stream binary and ffmpeg.ipsc3-poc-stream-rust client key for the exact utility version.ipsc3-poc-stream --list-servers
ipsc3-poc-stream --list-talkgroups --server vk
ipsc3-poc-stream \
--server vk \
--talkgroup 505 \
--radio-id 5052540 \
--url https://arnsw.org.au/audio \
--announce-callsign \
--callsign-interval-minutes 10 \
--silence-timeout-seconds 90 \
--initial-audio-timeout-seconds 300 \
--silence-threshold-dbfs -60
ipsc3-poc-stream \
--server vk \
--talkgroup 5 \
--radio-id 5050950 \
--url https://example.net/news.mp3
A server may be selected by directory ID, hostname, callsign prefix, country,
or the short aliases vk, zl, uk, and
us. The URL may be a live stream, a direct MP3/MP4/audio download,
or a simple page containing an HTML audio source, an MP3 download link, or a
JavaScript-composed stream URL. Relative download links and HTTP redirects are
supported. A finite MP3 releases PTT and exits automatically at the end of the
file. If page discovery cannot identify one source, use the direct media URL.
The client family is ipsc3-poc-stream-rust. It uses the same
short-lived HMAC-SHA256 challenge as approved POC radio clients. The client
key defaults to ~/.config/ipsc3/poc-stream.key and may contain the
JSON export printed by ipsc-poc-key or the base64url key itself.
The key may instead be supplied through IPSC3_POC_STREAM_KEY for a
managed runtime environment.
sudo /opt/ipsc3/bin/ipsc-poc-key \
generate ipsc3-poc-stream-rust 0.1.0
The server key registry must be synchronized to every IPSC3 server that the
utility may select. Client keys are secrets: do not place them in Git, shell
history, logs, or public documentation. The utility creates a persistent
random client_instance_id in
~/.config/ipsc3/poc-stream.instance with user-only permissions.
Ctrl-C.| Option | Purpose |
|---|---|
--gain-db DB | Adjust source level before PCMU encoding; accepted range is -30 to +20 dB. |
--source-timeout-seconds N | Release PTT after 1-300 seconds without decoded source audio. |
--silence-timeout-seconds N | After real program audio is detected, release PTT and exit after 1-3600 seconds of sustained off-air audio. Disabled by default. |
--initial-audio-timeout-seconds N | Release PTT and exit if real program audio does not begin within 1-3600 seconds. Disabled by default. |
--silence-threshold-dbfs DB | Set the active/silent source threshold from -96 to -10 dBFS; the default is -60 dBFS. |
--announce-callsign | Speak the resolved callsign phonetically once before program audio. |
--callsign-interval-minutes N | Enable the startup identification and repeat it every 1-1440 minutes. |
--callsign-prompt-dir PATH | Select another normalized IPSC3 phonetic WAV prompt directory; the default is the Alex Australian pack. |
--key-file PATH | Use a non-default client authentication key export. |
--instance-file PATH | Use a non-default persistent client instance identity. |
--master-api URL | Use another compatible IPSC3 server directory. |
--ffmpeg PATH | Use a specific ffmpeg executable. |
Listing servers and talkgroups never logs in or keys a transmitter. A stream
command authenticates, validates that the server currently advertises the
talkgroup with POC transmit enabled, registers its RTP/NAT endpoint, requests
the floor, and sends audio only after receiving ptt_grant. Test
new sources on an appropriate test or Parrot talkgroup before using a wide
network talkgroup, and confirm source rights, level, scheduling, and station
identification requirements before unattended operation.
The VKDMR deployment resolves the current WIA News episode from the official
WIA RSS feed and broadcasts its MP3 on TG5 at 18:00 each Sunday in the
Australia/Sydney timezone. The transmission uses VK2WI Radio ID
5050950. The launcher requires the feed item to be dated for that
Sunday, restricts media downloads to the WIA host, uses HTTPS, and refuses to
replay a stale edition. Before requesting PTT, it downloads the complete MP3
with retries, checks its declared byte length, and validates the entire audio
file with FFmpeg. This national WIA broadcast does not force camps on any
repeater; listeners remain free to camp TG5 themselves. It shares the normal
VK2WI broadcast lock, preventing two scheduled news sources from transmitting
at the same time. Once the 18:00 broadcast exits successfully, the same locked
job starts the automated TG5 callback collector using the Alex Australian
voice and emails the final CSV report to callbacks@wia.org.au.
Callback collection is not started after an incomplete download, invalid
audio file, failed decoder, or failed broadcast.
/usr/local/bin/vk2wi-wia-news --dry-run
The dry run prints the selected episode and media URL without camping any repeaters, requesting PTT, or sending audio.
The ARNSW source is a live stream and therefore cannot be downloaded before
transmission. Its scheduled launcher camps the configured ARNSW repeater
list, detects the end after ten continuous seconds below -60 dBFS, and then
starts the TG5 callback collector using the Alex Australian voice. The final
CSV report is emailed to callbacks@arnsw.org.au.
Wire details are documented in the IPSC3 POC protocol reference.