We current have a setup using an older version of libretime (3.0.0-alpha.8) setup in exactly the same way running on Ubuntu 16.04, that has worked for years without issue. We are provisioning a new host and so I installed the most recent tarball and followed the instructions here; Install using the installer | LibreTime
Initially I had real problems getting libretime to connect to shoutcast until I rearranged the config file, so that the shoutcast entry appears before the icecast entry. Now although libretime connects to shoutcast, the ID3 tags do not change. The ID3 tags for the icecast streams, however, do get updated when the track changes.
The shoutcast log just has information regarding registering playback in the YP directory, but nothing related to track changes.
Except the icecast stream ID3 data does change, so Libretime is detecting the change and sending that info to Icecast. Can anyone assist me to debug this further please ? Failing that, does anyone have a working shoutcast config they could copy here?
Also, possibly unrelated, in the older version of Libretime we were running the streams could be configured through the admin pages. In the new version, the stream information is not editable and it is not possible to enable/disable streams. All config changes need to be made by editing config.yml directly. Is this by design or do we have a permissions or other issue ?
The relevent line from the libretime-liquidsoap.log is;
2023/07/18 07:15:26 [shoutcast:4:3] Metadata update may have failed with error: 404, Not Found: Weblet (HTTP/1.0)
To reproduce
- Install the latest tarball on a fresh installation of Ubuntu 20.04.3
- Follow installation instructions Install using the installer | LibreTime
- Connect to shoutcast, ID3 tags are the same.
Expected behavior
Libretime to connect to shoutcast and start broadcasting with correct ID3 information.
Relevant log output or error messages
libretime-liquidsoap.log
2023/07/18 07:15:12 [http:3] New metadata chunk: ? -- Artist - Title.
2023/07/18 07:15:23 [lang:3] timeout --signal=KILL 45 libretime-playout-notify webstream '5' '{ "StreamNext": "Next Artist - Next Title", "title": "Artist - Title", "source_url": "http://libretime.example.com:7760/main.aac"}' &
2023/07/18 07:15:23 [lang:3] URL now http://libretime.example.com:7760/main.aac (change: false)
2023/07/18 07:15:23 [cross_9436:3] Analysis: -45.094172dB / -25.841391dB (2.98s / 2.98s)
2023/07/18 07:15:23 [lang:3] timeout --signal=KILL 45 libretime-playout-notify webstream '5' '{ "source_url": "http://libretime.example.com:7760/main.aac" }' &
2023/07/18 07:15:23 [lang:3] URL now http://libretime.example.com:7760/main.aac (change: false)
2023/07/18 07:15:23 [lang:3] New track inside HTTP stream
2023/07/18 07:15:23 [lang:3] status: <fun>
2023/07/18 07:15:23 [lang:3] need to cross: false
2023/07/18 07:15:23 [lang:3] remaining 2.97578231293 sec before, inf sec after
2023/07/18 07:15:23 [lang:3] Using message format 1
2023/07/18 07:15:24 [shoutcast:4:3] Metadata update may have failed with error: 404, Not Found: Weblet (HTTP/1.0)
2023-07-18 07:15:24,338 | INFO | libretime_playout.notify.main:webstream:86 - Sending currently playing webstream '5' data '{ "StreamNext": "Next Artist - Next Track", "title": "Artist - Track", "source_url": "http://libretime.example.com:7760/main.aac"}'
2023-07-18 07:15:24,355 | INFO | libretime_playout.notify.main:webstream:86 - Sending currently playing webstream '5' data '{ "source_url": "http://libretime.example.com:7760/main.aac" }'
2023/07/18 07:15:26 [lang:3] Using message format 1
2023/07/18 07:15:26 [shoutcast:4:3] Metadata update may have failed with error: 404, Not Found: Weblet (HTTP/1.0)
2023/07/18 07:19:18 [server:3] New client: 127.0.0.1.
2023/07/18 07:19:18 [lang:3] web_stream.get_id
2023/07/18 07:19:18 [server:3] Client 127.0.0.1 disconnected.
2023/07/18 07:25:59 [server:3] New client: 127.0.0.1.
2023/07/18 07:25:59 [lang:3] web_stream.get_id
2023/07/18 07:25:59 [server:3] Client 127.0.0.1 disconnected.
2023/07/18 07:32:39 [server:3] New client: 127.0.0.1.
2023/07/18 07:32:39 [lang:3] web_stream.get_id
2023/07/18 07:32:39 [server:3] Client 127.0.0.1 disconnected.
2023/07/18 07:39:19 [server:3] New client: 127.0.0.1.
2023/07/18 07:39:19 [lang:3] web_stream.get_id
where libretime.example.com is the FQDN
LibreTime version
LibreTime version: 3.1.0
Shoutcast DNAS Version
Shoutcast Server v2.6.1.777/posix(linux x64)
Installation method and OS / Environment
Installer script from tar release, Ubuntu 20.04
Output section of config.yml
# Output streams.
outputs:
# Default icecast output
# This can be reused to define multiple outputs without duplicating data
.default_icecast_output: &default_icecast_output
host: localhost
port: 8008
source_password: XXX
admin_password: XXX
name: Site name
description: Site Description
website: https://example.com
genre: Blues
# Shoutcast output streams.
# > max items is 1
shoutcast:
- # Whether the output is enabled.
# > default is false
enabled: true
# Output public url. If not defined, the value will be generated from
# the [general.public_url] hostname and the output port.
public_url:
# Shoutcast server host.
# > default is localhost
host: localhost
# Shoutcast server port.
# > default is 8000
port: 7777
# Shoutcast source user.
# > default is source
source_user: user
# Shoutcast source password.
# > this field is REQUIRED
source_password: password
# Shoutcast admin user.
# > default is admin
admin_user: admin
# Shoutcast admin password. If not defined, statistics will not be collected.
admin_password: password
# Shoutcast output audio.
audio:
# Shoutcast output audio format.
# > must be one of (aac, mp3)
# > this field is REQUIRED
format: mp3
# Shoutcast output audio bitrate.
# > must be one of (32, 48, 64, 96, 128, 160, 192, 224, 256, 320)
# > this field is REQUIRED
bitrate: 192
# Shoutcast stream name.
name: Stream Name
# Shoutcast stream website.
website: https://example.com
# Shoutcast stream genre.
genre: Blues
# Icecast output streams.
# > max items is 3
icecast:
# The default Icecast output stream
- <<: *default_icecast_output
enabled: true
public_url: http://libretime.example.com:8008/main.mp3
mount: main.mp3
audio:
format: mp3
bitrate: 192
# You can define extra outputs by reusing the default output using a yaml anchor
- <<: *default_icecast_output
enabled: true
public_url: http://libretime.example.com:8008/main_low.mp3
mount: main_low.mp3
audio:
format: mp3
bitrate: 128
- # Whether the output is enabled.
# > default is false
enabled: false
# Output public url, If not defined, the value will be generated from
# the [general.public_url] hostname, the output port and mount.
public_url: http://libretime.dirtybass.fm:8009/dirtybass_low.mp3
# Icecast server host.
# > default is localhost
host: localhost
# Icecast server port.
# > default is 8000
port: 8009
# Icecast server mount point.
# > this field is REQUIRED
mount: main_low
# Icecast source user.
# > default is source
source_user: source
# Icecast source password.
# > this field is REQUIRED
source_password: XXX
# Icecast admin user.
# > default is admin
admin_user: admin
# Icecast admin password. If not defined, statistics will not be collected.
admin_password: XXX
# Icecast output audio.
audio:
# Icecast output audio format.
# > must be one of (aac, mp3, ogg, opus)
# > this field is REQUIRED
format: mp3
# Icecast output audio bitrate.
# > must be one of (32, 48, 64, 96, 128, 160, 192, 224, 256, 320)
# > this field is REQUIRED
bitrate: 128
# format=ogg only field: Embed metadata (track title, artist, and show name)
# in the output stream. Some bugged players will disconnect from the stream
# after every songs when playing ogg streams that have metadata information
# enabled.
# > default is false
enable_metadata: false
# Icecast stream name.
name: LibreTime!
# Icecast stream description.
description: LibreTime Radio!
# Icecast stream website.
website: https://libretime.org
# Icecast stream genre.
genre: various