The two examples cited are indeed somewhat confusing... A basic rule is that UDP port destinations in the JSON need to be set to different
or unique port number as to avoid conflicts on the destination network.
Make note that multi_rx.py requires you to set a "destination" for each channel role defined in your JSON to include the control channel itself. Just be sure to set the control channels UDP Port to one that’s not in use to act as a dummy of sorts. The control channel actually does output UDP audio packets but would cause an echo if set to the same port number as the assigned to the voice channel.
The use of UDP Port 23456 is unique in that it is the default port number used by audio.py when stated without any command line arguments setting it to a different port number. IE./audio.py -u 23460 would override the default 23456 port.
{
"channels": [
{
"demod_type": "cqpsk",
"destination": "udp://127.0.0.1:23450",
"excess_bw": 0.2,
"filter_type": "rc",
"frequency": 0,
"if_rate": 24000,
"name": "MPSCS CC",
"plot": "",
"decode": "p25_decoder:role=cc:dev=airspy:nac=0x79b",
"symbol_rate": 4800
},
{
"demod_type": "cqpsk",
"destination": "udp://127.0.0.1:23456",
"excess_bw": 0.2,
"filter_type": "rc",
"frequency": 0,
"if_rate": 24000,
"name": "MPSCS VC",
"plot": "",
"decode": "p25_decoder:role=vc:dev=airspy",
"symbol_rate": 4800
}
],
"devices": [
{
"args": "airspy=0",
"frequency": 853925000,
"gains": "LNA:15,MIX:15,IF:12",
"name": "airspy",
"offset": 0,
"ppm": 0,
"rate": 3000000,
"tunable": true
}
]
}