Boatbod OP25 GUI / no audio

Status
Not open for further replies.

n8zuz

Member
Joined
Jul 17, 2004
Messages
61
Location
Windy WY
I've got Linux Mint 20 running on an old laptop. I followed the instructions online from a few places and I got op25 working just dandy on the laptop in relatively short order. It was pretty painless to setup everything including TGIDs.

I have the GUI running on that laptop and I'm getting audio from there but when I run the gui on my desktop I get the gui screen fine, see the talkgroups, etc but I don't get any audio. I was assuming it would have audio but perhaps not. I did a search here on RR but I didn't find an answer.

My script I'm running is:
./rx.py --args 'rtl' -N 'LNA:47' -S 2500000 -T trunk.tsv -o 17e3 -q -1 -l trunk.tsv -w -2 -U 2> stderr-stream0.2 -l http:0.0.0.0:8080

Is it the -U causing this to play locally but not on the gui version? Does the gui version need icecast setup? I know it would if I were using VLC or Winamp or at least I think it would.

Thanks to all who have programmed this up. I love how it runs so lightly from a resource standpoint.

Thanks,
N8ZUZ
 

boatbod

Member
Joined
Mar 3, 2007
Messages
3,414
Location
Talbot Co, MD
The GUI is a terminal only and does not natively have the capability to stream audio. You'd have to set up op25 to stream to an icecast server and then open the stream on the same browser that you are watching the terminal.
 

n8zuz

Member
Joined
Jul 17, 2004
Messages
61
Location
Windy WY
I thought that might be the case. I had streamed thru icecast many years ago with a trunk tracker scanner so I'll just have to do similarly. Boatbod, the software is really cool that you have going. Thanks for your work!
 

KA1RBI

Member
Joined
Aug 15, 2008
Messages
799
Location
Portage Escarpment
For what it's worth... HTTP Live Streaming (HLS) is supported as an option in osmocom OP25


These hacks ("OP25-hls hacks") add a new option for audio reception
and playback in OP25; namely, via an HTTP live stream to any remote
client using a standard Web browser. The web server software used
(nginx) is industrial-strength and immediately scalable to dozens or
hundreds of simultaneous remote users with zero added effort. More
than one upstream source (in parallel) can be served simultaneously.
 

n8zuz

Member
Joined
Jul 17, 2004
Messages
61
Location
Windy WY
Years before I was broadcastifying a feed, I had setup icecast with my BCD396T that I could log into with winamp and get the TGID data and audio. Is that not possible with either variant of OP25?

Sorry if I sound frustrated but I guess I am as I've spent hours trying to get this function to work. I want to be able to have a few listeners at work have access to the feed but I'm finding it a bit difficult to setup. Time for bed I guess.
 

wgbecks

Active Member
Joined
Jan 17, 2005
Messages
1,035
Location
NE Wisconsin
Years before I was broadcastifying a feed, I had setup icecast with my BCD396T that I could log into with winamp and get the TGID data and audio. Is that not possible with either variant of OP25?

Liquidsoap is probably the most desirable tool to stream audio from op25 to your personal Icecast server or to BCFY if you are a feed provider.
However, only the Boatbod repo currently has the capability to transmit metatags to accompany your audio stream.
 

n8zuz

Member
Joined
Jul 17, 2004
Messages
61
Location
Windy WY
Forgive me for the newbie questions. I have used icecast many years ago but I have forgotten most of what I knew. So from OP25, what is the purpose of liquidsoap and icecast?

I have tried to follow directions from the "readme" files for liquidsoap but I can tell you there are broken dependencies. I did use Synaptic software manager to install icecast2 because that was available and usually takes care of dependency hell.

I have boatbod up and running on my computer. Is there a good how-to video or webpage to show how to get liquidsoap and icecast working together with boatbod OP25 so I can get audio from any device on my internal network?

Thanks,
N8ZUZ
 

boatbod

Member
Joined
Mar 3, 2007
Messages
3,414
Location
Talbot Co, MD
Forgive me for the newbie questions. I have used icecast many years ago but I have forgotten most of what I knew. So from OP25, what is the purpose of liquidsoap and icecast?

I have tried to follow directions from the "readme" files for liquidsoap but I can tell you there are broken dependencies. I did use Synaptic software manager to install icecast2 because that was available and usually takes care of dependency hell.

I have boatbod up and running on my computer. Is there a good how-to video or webpage to show how to get liquidsoap and icecast working together with boatbod OP25 so I can get audio from any device on my internal network?

Thanks,
N8ZUZ
I'm not aware of "broken dependencies" in Ubuntu 20.04 or derivatives; please elaborate what distro and what errors you are seeing.
That aside, the purpose of Liquidsoap is to act as the interface between op25 and a streaming server such as broadcastify. It can do much more (e.g. audio level normalization) but for the most part streaming is the primary purpose. There are other clients you can use e.g. Darkice but in the past we've encountered issues keeping that running, particularly with loopback devices on RPI3b.
 

n8zuz

Member
Joined
Jul 17, 2004
Messages
61
Location
Windy WY
It's been several days now since I tried getting liquid soap going but I'm using Linux Mint, I believe 20.1 or 20.2

So, if I get liquid soap to pass the audio to icecast and get icecast setup correctly, I can use VLC or Winamp to listen to the audio and get the meta tags?
 

wgbecks

Active Member
Joined
Jan 17, 2005
Messages
1,035
Location
NE Wisconsin
So, if I get liquid soap to pass the audio to icecast and get icecast setup correctly, I can use VLC or Winamp to listen to the audio and get the meta tags?

Liquidsoap only encodes the p25 audio from op25 into an MP3 stream that's sent over the network to the Icecast server. To get
meta tags you'll must create a tag file and then configure icemeta.py to send the tags directly to the Icecast server.

With rx.py, you configure meta.json with your Icecast servers IP address, mountpoint, and password. If you're using multi_rx.py then
you add this same information to your json file under metadata section. See the various README's and examples in the apps folder.
 

n8zuz

Member
Joined
Jul 17, 2004
Messages
61
Location
Windy WY
Thank you wgbecks. I needed that to "visualize" what's happening with each program. I'm hoping tomorrow to have some time to try on a different computer to get it up and going.
 

wgbecks

Active Member
Joined
Jan 17, 2005
Messages
1,035
Location
NE Wisconsin
Thank you wgbecks. I needed that to "visualize" what's happening with each program. I'm hoping tomorrow to have some time to try on a different computer to get it up and going.

Just shout if you need any help. I've gotten quit a little experience now with Liquidsoap and especially with audio processing, separate left/right
audio streams, and so on.
 

n8zuz

Member
Joined
Jul 17, 2004
Messages
61
Location
Windy WY
So I'm trying to install liquid soap today. Looking for directions I went to op25/README-rpi3-liquidsoap at master · boatbod/op25 but perhaps I shouldn't as it's for a rpi. I did a sudo apt-get update before I started. When I try to install liquid soap I get:
jd@TechLaptop:/$ sudo apt-get install liquidsoap liquidsoap-plugin-all
[sudo] password for jd:
Reading package lists... Done
Building dependency tree
Reading state information... Done
Package liquidsoap-plugin-all is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source
However the following packages replace it:
liquidsoap

E: Package 'liquidsoap-plugin-all' has no installation candidate

Do I need a different repository since I'm not using a pi?
 

boatbod

Member
Joined
Mar 3, 2007
Messages
3,414
Location
Talbot Co, MD
So I'm trying to install liquid soap today. Looking for directions I went to op25/README-rpi3-liquidsoap at master · boatbod/op25 but perhaps I shouldn't as it's for a rpi. I did a sudo apt-get update before I started. When I try to install liquid soap I get:
jd@TechLaptop:/$ sudo apt-get install liquidsoap liquidsoap-plugin-all
[sudo] password for jd:
Reading package lists... Done
Building dependency tree
Reading state information... Done
Package liquidsoap-plugin-all is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source
However the following packages replace it:
liquidsoap

E: Package 'liquidsoap-plugin-all' has no installation candidate

Do I need a different repository since I'm not using a pi?
If I recall, the plugins are now included in the base liquidsoap package. Try:
Code:
sudo apt-get install liquidsoap
 

wgbecks

Active Member
Joined
Jan 17, 2005
Messages
1,035
Location
NE Wisconsin
If I recall, the plugins are now included in the base liquidsoap package. Try:
Code:
sudo apt-get install liquidsoap

It depends upon the Linux distro, and more specifically the package (version) the distro downloads. The Liquidsoap package for the Raspberry Pi's (Raspbian Buster) only requires sudo apt-get install liquidsoap. However, I beleive this is also true of Ubuntu 20.x.x while older version such as Ubuntu 18.x.x still require you to specify sudo apt-get install liquidsoap liquidsoap-plugin-all to complete the installation.

A simple rule when jumping about Linux distros, first try the installation per @boatbod's README-rpi3-liquidsoap, and then if it bombs out you only need to resubmit the command less the liquidsoap-plugin-all.
 

wgbecks

Active Member
Joined
Jan 17, 2005
Messages
1,035
Location
NE Wisconsin
Here is some supplemental information regarding Liquidsoap versions vs a couple of popular Linux distros
and their related installation commands.

Raspbian Stretch [Liquidsoap Version 1.1.1]
sudo apt-get install liquidsoap liquidsoap-plugin-all

Raspbian Buster [Liquidsoap Version 1.3.3]
sudo apt-get install liquidsoap

Ubuntu 18.04.5 Liquidsoap Version 1.1.1]
sudo apt-get install liquidsoap liquidsoap-plugin-all

Ubuntu 20.04.2 [Liquidsoap Version 1.4.1]
sudo apt-get install liquidsoap
sudo mkdir /usr/share/liquidsoap/1.4.1
sudo ln -s /usr/share/liquidsoap/libs /usr/share/liquidsoap/1.4.1/
 

n8zuz

Member
Joined
Jul 17, 2004
Messages
61
Location
Windy WY
OK, I've been gone a few days. I'm back at trying to get this going. I'm following the instructions at op25/README-rpi3-liquidsoap at master · boatbod/op25

The first terminal is running fine and OP25 is running normally with traffic being heard on this local machine. In Terminal 2 I ran:
jd@TechLaptop:~/op25/op25/gr-op25_repeater/apps$ ./op25.liq
At line 30, char 124-127:
Error 6: Cannot apply that parameter because the function at line 30, char 8-17
has no argument labeled "rms_window"!

op25.liq line 30 is:
input = compress(input, attack = 2.0, gain = 0.0, knee = 13.0, ratio = 2.0, release = 12.3, threshold = -18.0, rms_window = 1.0)

If I remove the rms_window=1.0 I get:
jd@TechLaptop:~/op25/op25/gr-op25_repeater/apps$ ./op25.liq
2021/10/21 15:24:04 >>> LOG START
2021/10/21 15:24:04 [main:3] Liquidsoap 1.4.1
2021/10/21 15:24:04 [main:3] Using: bytes=[distributed with OCaml 4.02 or above] pcre=[unspecified] sedlex=2.1 menhirLib=20200123 dtools=0.4.1 duppy=0.8.0 cry=0.6.4 mm=0.5.0 xmlplaylist=0.1.3 lastfm=0.3.2 ogg=0.5.2 vorbis=0.7.1 opus=0.1.3 speex=0.2.1 mad=0.4.4 flac=0.1.5 flac.ogg=0.1.5 dynlink=[distributed with Ocaml] lame=0.3.2 shine=0.2.0 gstreamer=0.3.0 frei0r=0.1.0 theora=0.3.1 gavl=0.1.5 ffmpeg=0.4.1 bjack=0.1.4 alsa=0.2.3 ao=0.2.0 samplerate=0.1.2 taglib=0.3.1 ssl=0.5.9 magic=0.7.3 camomile=[unspecified] yojson=[unspecified] faad=0.4.0 soundtouch=0.1.7 portaudio=0.2.1 pulseaudio=0.1.2 ladspa=0.1.4 sdl=0.9.1 camlimages=4.2.0 lo=0.1.2 gd=1.0a5
2021/10/21 15:24:04 [gstreamer.loader:3] Loaded GStreamer 1.16.2 0
2021/10/21 15:24:04 [dynamic.loader:3] Could not find dynamic module for fdkaac encoder.

and terminal 3 is:
10/21/21 15:37:34.895976 voice update: tg(277), freq(155820000), slot(-), prio(3)
10/21/21 15:37:37.070584 voice update: tg(277), freq(155820000), slot(-), prio(3)
10/21/21 15:37:42.572774 voice update: tg(277), freq(155820000), slot(-), prio(3)
10/21/21 15:37:43.852295 voice update: tg(277), freq(155820000), slot(-), prio(3)

So, it appears most is working. If I try locally to stream in VLC 127.0.0.1:8000 it says it can't connect. On another computer on the network I tried VLC to stream url 10.1.4.1xx:8000 that doesn't work and neither does that address work with winamp.

Any ideas? I'm close!
N8ZUZ
 

wgbecks

Active Member
Joined
Jan 17, 2005
Messages
1,035
Location
NE Wisconsin
OK, I've been gone a few days. I'm back at trying to get this going. I'm following the instructions at op25/README-rpi3-liquidsoap at master · boatbod/op25

The first terminal is running fine and OP25 is running normally with traffic being heard on this local machine. In Terminal 2 I ran:
jd@TechLaptop:~/op25/op25/gr-op25_repeater/apps$ ./op25.liq
At line 30, char 124-127:
Error 6: Cannot apply that parameter because the function at line 30, char 8-17
has no argument labeled "rms_window"!

op25.liq line 30 is:
input = compress(input, attack = 2.0, gain = 0.0, knee = 13.0, ratio = 2.0, release = 12.3, threshold = -18.0, rms_window = 1.0)

If I remove the rms_window=1.0 I get:
jd@TechLaptop:~/op25/op25/gr-op25_repeater/apps$ ./op25.liq
2021/10/21 15:24:04 >>> LOG START
2021/10/21 15:24:04 [main:3] Liquidsoap 1.4.1
2021/10/21 15:24:04 [main:3] Using: bytes=[distributed with OCaml 4.02 or above] pcre=[unspecified] sedlex=2.1 menhirLib=20200123 dtools=0.4.1 duppy=0.8.0 cry=0.6.4 mm=0.5.0 xmlplaylist=0.1.3 lastfm=0.3.2 ogg=0.5.2 vorbis=0.7.1 opus=0.1.3 speex=0.2.1 mad=0.4.4 flac=0.1.5 flac.ogg=0.1.5 dynlink=[distributed with Ocaml] lame=0.3.2 shine=0.2.0 gstreamer=0.3.0 frei0r=0.1.0 theora=0.3.1 gavl=0.1.5 ffmpeg=0.4.1 bjack=0.1.4 alsa=0.2.3 ao=0.2.0 samplerate=0.1.2 taglib=0.3.1 ssl=0.5.9 magic=0.7.3 camomile=[unspecified] yojson=[unspecified] faad=0.4.0 soundtouch=0.1.7 portaudio=0.2.1 pulseaudio=0.1.2 ladspa=0.1.4 sdl=0.9.1 camlimages=4.2.0 lo=0.1.2 gd=1.0a5
2021/10/21 15:24:04 [gstreamer.loader:3] Loaded GStreamer 1.16.2 0
2021/10/21 15:24:04 [dynamic.loader:3] Could not find dynamic module for fdkaac encoder.

and terminal 3 is:
10/21/21 15:37:34.895976 voice update: tg(277), freq(155820000), slot(-), prio(3)
10/21/21 15:37:37.070584 voice update: tg(277), freq(155820000), slot(-), prio(3)
10/21/21 15:37:42.572774 voice update: tg(277), freq(155820000), slot(-), prio(3)
10/21/21 15:37:43.852295 voice update: tg(277), freq(155820000), slot(-), prio(3)

So, it appears most is working. If I try locally to stream in VLC 127.0.0.1:8000 it says it can't connect. On another computer on the network I tried VLC to stream url 10.1.4.1xx:8000 that doesn't work and neither does that address work with winamp.

Any ideas? I'm close!
N8ZUZ
This error is easily remedied and is due to a change of liquidsoap parameters. You can either comment out (#) the compress () line
in op25.liq our you can just edit that line to remove the rms parameter that's no longer applicable to the compress function in
Liquidsoap version 1.4.1.

I would suggest removing the compress () and normalize () lines and replace them with the compand function as shown below in the optional audio processing blocks section pulled from one of my op25.liq scripts what works with earlier (1.1.1) versions as well as with (1.4.1) later
versions of Liquidsoap.

op25.liq

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

----

# OPTIONAL AUDIO SIGNAL PROCESSING BLOCKS
# Uncomment to enable
#
# High pass filter
#input = filter.iir.butterworth.high(frequency = 200.0, order = 4, input)

# Low pass filter
#input = filter.iir.butterworth.low(frequency = 3250.0, order = 4, input)

# Compression
#input = compress(input, attack = 2.0, gain = 0.0, knee = 13.0, ratio = 2.0, release = 12.3, threshold = -18.0, rms_window = 1.0)

# Compand
input = compand(input, mu = 0.5)

# Normalization
#input = normalize(input, gain_max = 6.0, gain_min = -6.0, target = -16.0, threshold = -65.0)



Note that you may need to increase the -x parameter from 1.25 to 1.5 to increase the compression threshold that depends upon
overall audio levels on your local P25 system. Start lower and increase as needed without causing undue clipping on loud talkers.
 

n8zuz

Member
Joined
Jul 17, 2004
Messages
61
Location
Windy WY
I made the changes, however, when I use vlc I can't stream. When I use winamp the time of streaming doesn't leave 0:00. For some reason I'm not streaming. It makes me seem like icecast isn't running.
 
Status
Not open for further replies.
Top