Shoutcast not receiving ID3 info

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

  1. Install the latest tarball on a fresh installation of Ubuntu 20.04.3
  2. Follow installation instructions Install using the installer | LibreTime
  3. 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

I’ve done some further testing and it’s possible to stream from the 3.0.0-alpha.8 instance to the shoutcast instance on the new host and the ID3 tags are being updated, so there’s nothing at fault with the shoutcast installation on the new server.

This suggests that either there is something missing on the new host that libretime relies on to update the ID3 specifically for shoutcast, or the problem exists on the new build of libretime.