op25 (boatbod) liquidsoap not mounting to icecast

wgbecks

Active Member
Joined
Jan 17, 2005
Messages
922
Location
NE Wisconsin
I routinely run multiple instances of rx.py (separate feeds) of op25 and liquidsoap on Pi-4B's and SFF PCs imaged with Ubuntu. You just
have to be cognizant of the need to specify unique file names and port numbers for each of the instances of op25.

You can ignore the “URL” field in your output.icecast operators as they serve no real purpose. Just configure them as an empty set
in your liquidsoap scripts. IE: url=””

The following is a dump of active python process indicating the presence of four instances of op25 running on a Raspberry Pi-4B SBC.
My preference is to utilize rx.py whereby each instance runs separately as a system service that allows me to independently control, change,
or restart any particular instance (feed) without impacting any of the others.

pi@raspberrypi-grb-4B:~ $ ps -aux | grep python
pi 20599 0.1 0.7 32468 14288 ? S Feb26 10:17 /usr/bin/python3 ./audio.py -u 23480 -x 1.25 -s
pi 20602 0.2 0.7 32468 14168 ? S Feb26 21:02 /usr/bin/python3 ./audio.py -u 23460 -x 1.25 -s
pi 22583 0.6 0.2 32468 3864 ? S Feb17 130:15 /usr/bin/python3 ./audio.py -u 23450 -x 1.25 -s
pi 22586 0.1 0.2 32468 3924 ? S Feb17 28:20 /usr/bin/python3 ./audio.py -u 23470 -x 1.25 -s
pi 25798 0.0 0.0 7444 512 pts/0 S+ 18:22 0:00 grep --color=auto python
pi 28018 22.3 5.2 600780 98948 ? Sl Feb26 1604:57 /usr/bin/python3 ./rx.py --args rtl=00000103 --gains lna:40 -T depere.tsv -q 0 -o 7500 -S 1000000 -D cqpsk -v 5 -w -u 23470 -V -M depere.json -l http:0.0.0.0:8082
pi 28069 22.4 6.3 600792 120328 ? Sl Feb26 1607:04 /usr/bin/python3 ./rx.py --args rtl=00000104 --gains lna:45 -T luxe.tsv -q -1 -o 7100 -S 1000000 -D cqpsk -v 1 -w -u 23480 -V -M luxe.json -l http:0.0.0.0:8083
pi 28126 23.4 6.0 600764 114876 ? Sl Feb26 1681:29 /usr/bin/python3 ./rx.py --args rtl=00000101 --gains lna:45 -T siren1.tsv -q 0 -o 7600 -S 1000000 -D cqpsk -v 1 -w -u 23450 -V -M siren1.json -l http:0.0.0.0:8080
pi 28175 22.6 7.0 600772 133088 ? Sl Feb26 1623:23 /usr/bin/python3 ./rx.py --args rtl=00000102 --gains lna:45 -T siren2.tsv -q 0 -o 7500 -S 1000000 -D cqpsk -v 1 -w -u 23460 -V -M siren2.json -l http:0.0.0.0:8081

No shown in the dump above, but I utilize NGINX configured as a reverse proxy to protect access to the op25 http consoles in that many
of my installations are remotely located and have to be managed and monitored over the Internet.
 
Last edited:

bucket772

Member
Feed Provider
Joined
Oct 27, 2006
Messages
71
I routinely run multiple instances of rx.py (separate feeds) of op25 and liquidsoap on Pi-4B's and SFF PCs imaged with Ubuntu. You just
have to be cognizant of the need to specify unique file names and port numbers for each of the instances of op25.

You can ignore the “URL” field in your output.icecast operators as they serve no real purpose. Just configure them as an empty set
in your liquidsoap scripts. IE: url=””

The following is a dump of active python process indicating the presence of four instances of op25 running on a Raspberry Pi-4B SBC.
My preference is to utilize rx.py whereby each instance runs separately as a system service that allows me to independently control, change,
or restart any particular instance (feed) without impacting any of the others.

pi@raspberrypi-grb-4B:~ $ ps -aux | grep python
pi 20599 0.1 0.7 32468 14288 ? S Feb26 10:17 /usr/bin/python3 ./audio.py -u 23480 -x 1.25 -s
pi 20602 0.2 0.7 32468 14168 ? S Feb26 21:02 /usr/bin/python3 ./audio.py -u 23460 -x 1.25 -s
pi 22583 0.6 0.2 32468 3864 ? S Feb17 130:15 /usr/bin/python3 ./audio.py -u 23450 -x 1.25 -s
pi 22586 0.1 0.2 32468 3924 ? S Feb17 28:20 /usr/bin/python3 ./audio.py -u 23470 -x 1.25 -s
pi 25798 0.0 0.0 7444 512 pts/0 S+ 18:22 0:00 grep --color=auto python
pi 28018 22.3 5.2 600780 98948 ? Sl Feb26 1604:57 /usr/bin/python3 ./rx.py --args rtl=00000103 --gains lna:40 -T depere.tsv -q 0 -o 7500 -S 1000000 -D cqpsk -v 5 -w -u 23470 -V -M depere.json -l http:0.0.0.0:8082
pi 28069 22.4 6.3 600792 120328 ? Sl Feb26 1607:04 /usr/bin/python3 ./rx.py --args rtl=00000104 --gains lna:45 -T luxe.tsv -q -1 -o 7100 -S 1000000 -D cqpsk -v 1 -w -u 23480 -V -M luxe.json -l http:0.0.0.0:8083
pi 28126 23.4 6.0 600764 114876 ? Sl Feb26 1681:29 /usr/bin/python3 ./rx.py --args rtl=00000101 --gains lna:45 -T siren1.tsv -q 0 -o 7600 -S 1000000 -D cqpsk -v 1 -w -u 23450 -V -M siren1.json -l http:0.0.0.0:8080
pi 28175 22.6 7.0 600772 133088 ? Sl Feb26 1623:23 /usr/bin/python3 ./rx.py --args rtl=00000102 --gains lna:45 -T siren2.tsv -q 0 -o 7500 -S 1000000 -D cqpsk -v 1 -w -u 23460 -V -M siren2.json -l http:0.0.0.0:8081
are you streaming with icecast or just local audio? My Pi is downstairs in the rack so local is no good for me. Building this for a friend that might want local audio as well as being a feed provider.

Also, I had no luck with liquidsoap working even with downgrading ffmpeg. So I just reimaged with Bullseye
 

wgbecks

Active Member
Joined
Jan 17, 2005
Messages
922
Location
NE Wisconsin
are you streaming with icecast or just local audio? My Pi is downstairs in the rack so local is no good for me. Building this for a friend that might want local audio as well as being a feed provider.

Also, I had no luck with liquidsoap working even with downgrading ffmpeg. So I just reimaged with Bullseye

I only install and configure Icecast as needed to support listening to my "Private" feeds but do utilize Liquidsoap in all cases to process
the UDP audio streams from OP25 regardless of the destination, be it Icecast or to BCFY. However, you can optionally script multiple
output.icecast operators if desired to provided streams to your own Icecast server(s) as well as to BCFY.
 
Last edited:

boatbod

Member
Joined
Mar 3, 2007
Messages
3,339
Location
Talbot Co, MD
Yep. I'm learning that. I added -U just to make sure it was really working.
I built a new system on a RPi3b from scratch. I'm still learning multi-rx so in the meantime I'm running 2 instances of rx.py. I copied some of my known working files over and changed the rtl serial numbers and I have 2 streams functioning properly. However that was after I realized op25.liq had issues. In the output section there was an entry for URL. I copied the entries and noticed the IP address from my good setup was not the same IP is the Pi. I'm guessing that because it didn't resolve, it ignored it. During setup, I put in the current IP. I had the same issues with the mount points not showing up on Icecast. I removed that section entirely for both outputs and icecast is now functioning. User error 100%.

Now, however, I'm trying to get local audio and streaming. I went into op25.liq and uncommented, one at a time, the three LOCAL AUDIO OUTPUTS. Because there are two streams I have these two lines

input_A = mksafe(input.external(buffer=0.25, channels=2, samplerate=8000, restart_on_error=false, "./audio.py -x 2 -s -u 24680"))

and

input_B = mksafe(input.external(buffer=0.25, channels=2, samplerate=8000, restart_on_error=false, "./audio.py -x 2 -s -u 24690"))


I changed the (input) to either input_A or input_B.

On each of the local settings one of the systems would lockup with no tsbks. I went back in, commented it back out, rebooted and both streams function as desired.

I'm gonna dive back into the Pi4 with bookworm and the downgraded ffmpeg, fix op25.liq and see what happens, now that I know what the icecast problem was, then tackle multi. I would like to have 2 different webpages, as I have now, using two different ports for holding on talkgroups during incidents. I'm assuming that is possible in multi
Multi only provides for a single terminal page, but you click left/right to view each stream (aka 'channel') separately. In the curses terminal you use the left/right cursor keys. On the web terminal you use the little left/right arrows as indicated in the attached screenshot.
 

Attachments

  • Screenshot from 2024-03-03 13-28-19.png
    Screenshot from 2024-03-03 13-28-19.png
    346.3 KB · Views: 8

bucket772

Member
Feed Provider
Joined
Oct 27, 2006
Messages
71
Multi only provides for a single terminal page, but you click left/right to view each stream (aka 'channel') separately. In the curses terminal you use the left/right cursor keys. On the web terminal you use the little left/right arrows as indicated in the attached screenshot.
understood. thank you, and everyone else that helped
 
Top