icecastinternet-radioliquidsoap

Icecast and Liquidsoap - No such file or directory


My internet radio doesn't work.

I use Debian 9, Icecast 2.4.2 and Liquidsoap 1.1.1

I started internet radio with commands:

/etc/init.d/icecast2 restart

service liquidsoap restart

I opened address: http://MY_IP:8000/autodj

I got error in browser: 404 - The file you requested could not be found

I got error in icecast logs: "/usr/share/icecast2/web/autodj" No such file or directory

My icecast config (/etc/icecast2/icecast.xml):

<icecast>
<!-- location and admin are two arbitrary strings that are e.g. visible
     on the server info page of the icecast web interface
     (server_version.xsl). -->
<location>Earth</location>
<admin>icemaster@localhost</admin>

<limits>
    <clients>100</clients>
    <sources>2</sources>
    <queue-size>524288</queue-size>
    <client-timeout>30</client-timeout>
    <header-timeout>15</header-timeout>
    <source-timeout>10</source-timeout>
    <!-- If enabled, this will provide a burst of data when a client 
         first connects, thereby significantly reducing the startup 
         time for listeners that do substantial buffering. However,
         it also significantly increases latency between the source
         client and listening client.  For low-latency setups, you
         might want to disable this. -->
    <burst-on-connect>1</burst-on-connect>
    <!-- same as burst-on-connect, but this allows for being more
         specific on how much to burst. Most people won't need to
         change from the default 64k. Applies to all mountpoints  -->
    <burst-size>65535</burst-size>
</limits>

<authentication>
    <!-- Sources log in with username 'source' -->
    <source-password>***</source-password>
    <!-- Relays log in with username 'relay' -->
    <relay-password>***</relay-password>

    <!-- Admin logs in with the username given below -->
    <admin-user>admin</admin-user>
    <admin-password>***</admin-password>
</authentication>

<hostname>localhost</hostname>

<!-- You may have multiple <listener> elements -->
<listen-socket>
    <port>8000</port>
    <!-- <bind-address>127.0.0.1</bind-address> -->
    <!-- <shoutcast-mount>/stream</shoutcast-mount> -->
</listen-socket>

<http-headers>
    <header name="Access-Control-Allow-Origin" value="*" />
</http-headers>

<mount>
    <mount-name>/autodj</mount-name>
    <charset>utf-8</charset>
    <username>source</username>
    <password>***</password>
</mount>

<fileserve>1</fileserve>

<paths>
    <!-- basedir is only used if chroot is enabled -->
    <basedir>/usr/share/icecast2</basedir>

    <!-- Note that if <chroot> is turned on below, these paths must both
         be relative to the new root, not the original root -->
    <logdir>/var/log/icecast2</logdir>
    <webroot>/usr/share/icecast2/web</webroot>
    <adminroot>/usr/share/icecast2/admin</adminroot>
    <!-- <pidfile>/usr/share/icecast2/icecast.pid</pidfile> -->

    <!-- Aliases: treat requests for 'source' path as being for 'dest' path
         May be made specific to a port or bound address using the "port"
         and "bind-address" attributes.
      -->
    <!--
    <alias source="/foo" destination="/bar"/>
    -->
    <!-- Aliases: can also be used for simple redirections as well,
         this example will redirect all requests for http://server:port/ to
         the status page
    -->
    <alias source="/" destination="/status.xsl"/>
    <!-- The certificate file needs to contain both public and private part.
         Both should be PEM encoded.
    <ssl-certificate>/usr/share/icecast2/icecast.pem</ssl-certificate>
    -->
</paths>

<logging>
    <accesslog>access.log</accesslog>
    <errorlog>error.log</errorlog>
    <!-- <playlistlog>playlist.log</playlistlog> -->
    <loglevel>3</loglevel> <!-- 4 Debug, 3 Info, 2 Warn, 1 Error -->
    <logsize>10000</logsize> <!-- Max size of a logfile -->
    <!-- If logarchive is enabled (1), then when logsize is reached
         the logfile will be moved to [error|access|playlist].log.DATESTAMP,
         otherwise it will be moved to [error|access|playlist].log.old.
         Default is non-archive mode (i.e. overwrite)
    -->
    <!-- <logarchive>1</logarchive> -->
</logging>

<security>
    <chroot>0</chroot>
    <!--
    <changeowner>
        <user>nobody</user>
        <group>nogroup</group>
    </changeowner>
    -->
</security>   

My liquidsoap config (/etc/liquidsoap/radio.liq):

set("log.file.path", "/var/log/liquidsoap/basic.log")
set("log.stdout", true)
set("log.level",4)

set("tag.encodings",["UTF-8"])

music = mksafe(playlist("/etc/liquidsoap/music"))

output.icecast(%vorbis(bytes_per_page=1024),
host="localhost", 
port=8000, 
password="***",
mount="autodj", 
music)

Logs icecast:

[2021-06-26  20:04:06] INFO sighandler/_sig_die Caught signal 15, shutting down...
[2021-06-26  20:04:06] INFO main/main Shutting down
[2021-06-26  20:04:06] INFO fserve/fserve_shutdown file serving stopped
[2021-06-26  20:04:07] INFO slave/_slave_thread shutting down current relays
[2021-06-26  20:04:07] INFO slave/_slave_thread Slave thread shutdown complete
[2021-06-26  20:04:07] INFO auth/auth_shutdown Auth shutdown
[2021-06-26  20:04:07] INFO yp/yp_shutdown YP thread down
[2021-06-26  20:04:08] INFO stats/stats_shutdown stats thread finished
[2021-06-26  20:04:08] INFO main/main Icecast 2.4.2 server started
[2021-06-26  20:04:08] INFO connection/get_ssl_certificate No SSL capability
[2021-06-26  20:04:08] INFO yp/yp_update_thread YP update thread started
[2021-06-26  20:04:29] INFO connection/_handle_source_request Source logging in at mountpoint "/autodj" from 127.0.0.1
[2021-06-26  20:04:29] INFO source/get_next_buffer End of Stream /autodj
[2021-06-26  20:04:29] INFO source/source_main listener count on /autodj now 0
[2021-06-26  20:04:29] INFO source/source_shutdown Source from 127.0.0.1 at "/autodj" exiting
[2021-06-26  20:05:45] INFO fserve/fserve_client_create checking for file /style.css (/usr/share/icecast2/web/style.css)
[2021-06-26  20:05:46] INFO fserve/fserve_client_create checking for file /favicon.ico (/usr/share/icecast2/web/favicon.ico)
[2021-06-26  20:05:46] WARN fserve/fserve_client_create req for file "/usr/share/icecast2/web/favicon.ico" No such file or directory
[2021-06-26  20:05:46] INFO fserve/fserve_client_create checking for file /icecast.png (/usr/share/icecast2/web/icecast.png)
[2021-06-26  20:07:10] INFO fserve/fserve_client_create checking for file /autodj (/usr/share/icecast2/web/autodj)
[2021-06-26  20:07:10] WARN fserve/fserve_client_create req for file "/usr/share/icecast2/web/autodj" No such file or directory

Logs liquidsoap:

2021/06/26 20:04:29 >>> LOG START
2021/06/26 20:04:29 [protocols.external:3] Found "/usr/bin/wget".
2021/06/26 20:04:29 [main:3] Liquidsoap 1.1.1
2021/06/26 20:04:29 [main:3] Using: graphics=[distributed with Ocaml] pcre=7.2.3 dtools=0.3.1 duppy=0.5.1 duppy.syntax=0.5.1 cry=0.2.2 mm=0.2.1 xmlplaylist=0.1.3 lastfm=0.3.0 ogg=0.4.5 vorbis=0.6.1 opus=0.1.0 speex=0.2.0 mad=0.4.4 flac=0.1.1 flac.ogg=0.1.1 dynlink=[distributed with Ocaml] lame=0.3.2 shine=0.2.0 gstreamer=0.2.0 frei0r=0.1.0 voaacenc=0.1.0 theora=0.3.0 gavl=0.1.5 bjack=0.1.4 alsa=0.2.1 ao=0.2.0 samplerate=0.1.2 taglib=0.3.1 magic=0.7.3 camomile=0.8.4 inotify=1.0 faad=0.3.2 soundtouch=0.1.7 portaudio=0.2.0 pulseaudio=0.1.2 ladspa=0.1.4 dssi=0.1.1 sdl=0.9.1 camlimages=4.2.0 lo=0.1.0 yojson=1.3.2 gd=1.0a5
2021/06/26 20:04:29 [dynamic.loader:3] Could not find dynamic module for fdkaac encoder.
2021/06/26 20:04:29 [dynamic.loader:3] Could not find dynamic module for aacplus encoder.
2021/06/26 20:04:29 [dynamic.loader:2] Loaded plugin file /usr/lib/liquidsoap/1.1.1/plugins/flac.cmxs.
2021/06/26 20:04:29 [dynamic.loader:2] Loaded plugin file /usr/lib/liquidsoap/1.1.1/plugins/lame.cmxs.
2021/06/26 20:04:29 [dynamic.loader:2] Loaded plugin file /usr/lib/liquidsoap/1.1.1/plugins/pulseaudio.cmxs.
2021/06/26 20:04:29 [dynamic.loader:2] Loaded plugin file /usr/lib/liquidsoap/1.1.1/plugins/faad.cmxs.
2021/06/26 20:04:29 [dynamic.loader:2] Loaded plugin file /usr/lib/liquidsoap/1.1.1/plugins/ogg.cmxs.
2021/06/26 20:04:29 [dynamic.loader:2] Loaded plugin file /usr/lib/liquidsoap/1.1.1/plugins/cry.cmxs.
2021/06/26 20:04:29 [dynamic.loader:2] Loaded plugin file /usr/lib/liquidsoap/1.1.1/plugins/voaacenc.cmxs.
2021/06/26 20:04:29 [dynamic.loader:2] Loaded plugin file /usr/lib/liquidsoap/1.1.1/plugins/mad.cmxs.
2021/06/26 20:04:29 [dynamic.loader:2] Loaded plugin file /usr/lib/liquidsoap/1.1.1/plugins/taglib.cmxs.
2021/06/26 20:04:29 [dynamic.loader:2] Loaded plugin file /usr/lib/liquidsoap/1.1.1/plugins/flac_ogg.cmxs.
2021/06/26 20:04:29 [dynamic.loader:2] Loaded plugin file /usr/lib/liquidsoap/1.1.1/plugins/vorbis.cmxs.
2021/06/26 20:04:29 [frame:3] Using 44100Hz audio, 25Hz video, 44100Hz master.
2021/06/26 20:04:29 [frame:3] Frame size must be a multiple of 1764 ticks = 1764 audio samples = 1 video samples.
2021/06/26 20:04:29 [frame:3] Targetting 'frame.duration': 0.04s = 1764 audio samples = 1764 ticks.
2021/06/26 20:04:29 [frame:3] Frames last 0.04s = 1764 audio samples = 1 video samples = 1764 ticks.
2021/06/26 20:04:29 [video.converter:4] Couldn't find preferred video converter: gavl.
2021/06/26 20:04:29 [audio.converter:4] Couldn't find preferred samplerate converter: libsamplerate.
2021/06/26 20:04:29 [audio.converter:4] Using native samplerate converter
2021/06/26 20:04:29 [threads:3] Created thread "generic queue #1".
2021/06/26 20:04:29 [threads:3] Created thread "generic queue #2".
2021/06/26 20:04:29 [threads:3] Created thread "non-blocking queue #1".
2021/06/26 20:04:29 [threads:3] Created thread "non-blocking queue #2".
2021/06/26 20:04:29 [clock:4] Currently 1 clocks allocated.
2021/06/26 20:04:29 [clock.wallclock_main:4] Starting 1 sources...
2021/06/26 20:04:29 [source:4] Source output.icecast_4966 gets up.
2021/06/26 20:04:29 [source:4] Source mksafe gets up.
2021/06/26 20:04:29 [source:4] Source playlist_4962 gets up.
2021/06/26 20:04:29 [music:3] Loading playlist...
2021/06/26 20:04:29 [music:3] Playlist is a directory.
2021/06/26 20:04:29 [music:3] Successfully loaded a playlist of 4 tracks.
2021/06/26 20:04:29 [music:4] Content kind is {audio=2;video=0;midi=0}.
2021/06/26 20:04:29 [music:4] Activations changed: static=[], dynamic=[mksafe:autodj:autodj].
2021/06/26 20:04:29 [source:4] Source safe_blank gets up.
2021/06/26 20:04:29 [safe_blank:4] Content kind is {audio=2;video=0;midi=0}.
2021/06/26 20:04:29 [safe_blank:4] Activations changed: static=[], dynamic=[mksafe:autodj:autodj].
2021/06/26 20:04:29 [mksafe:4] Activations changed: static=[autodj:autodj], dynamic=[].
2021/06/26 20:04:29 [autodj:4] Activations changed: static=[autodj], dynamic=[].
2021/06/26 20:04:29 [autodj:4] Enabling caching mode: active source.
2021/06/26 20:04:29 [autodj:3] Connecting mount autodj for source@localhost...
2021/06/26 20:04:29 [decoder:4] Trying method "META" for "/etc/liquidsoap/music/3.mp3"...
2021/06/26 20:04:29 [decoder:4] Trying method "WAV" for "/etc/liquidsoap/music/3.mp3"...
2021/06/26 20:04:29 [decoder.wav:4] Invalid MIME type for "/etc/liquidsoap/music/3.mp3": audio/mpeg!
2021/06/26 20:04:29 [decoder.wav:4] Invalid file extension for "/etc/liquidsoap/music/3.mp3"!
2021/06/26 20:04:29 [decoder:4] Trying method "MIDI" for "/etc/liquidsoap/music/3.mp3"...
2021/06/26 20:04:29 [decoder:4] Trying method "IMAGE" for "/etc/liquidsoap/music/3.mp3"...
2021/06/26 20:04:29 [decoder:4] Trying method "FLAC" for "/etc/liquidsoap/music/3.mp3"...
2021/06/26 20:04:29 [decoder.flac:4] Invalid MIME type for "/etc/liquidsoap/music/3.mp3": audio/mpeg!
2021/06/26 20:04:29 [decoder.flac:4] Invalid file extension for "/etc/liquidsoap/music/3.mp3"!
2021/06/26 20:04:29 [decoder:4] Trying method "AAC" for "/etc/liquidsoap/music/3.mp3"...
2021/06/26 20:04:29 [decoder.aac:4] Invalid MIME type for "/etc/liquidsoap/music/3.mp3": audio/mpeg!
2021/06/26 20:04:29 [decoder.aac:4] Invalid file extension for "/etc/liquidsoap/music/3.mp3"!
2021/06/26 20:04:29 [decoder:4] Trying method "MP4" for "/etc/liquidsoap/music/3.mp3"...
2021/06/26 20:04:29 [decoder.mp4:4] Invalid MIME type for "/etc/liquidsoap/music/3.mp3": audio/mpeg!
2021/06/26 20:04:29 [decoder.mp4:4] Invalid file extension for "/etc/liquidsoap/music/3.mp3"!
2021/06/26 20:04:29 [decoder:4] Trying method "OGG" for "/etc/liquidsoap/music/3.mp3"...
2021/06/26 20:04:29 [decoder.ogg:4] Invalid MIME type for "/etc/liquidsoap/music/3.mp3": audio/mpeg!
2021/06/26 20:04:29 [decoder.ogg:4] Invalid file extension for "/etc/liquidsoap/music/3.mp3"!
2021/06/26 20:04:29 [autodj:3] Connection setup was successful.
2021/06/26 20:04:29 [decoder:4] Trying method "MAD" for "/etc/liquidsoap/music/3.mp3"...
2021/06/26 20:04:29 [threads:3] Created thread "wallclock_main" (1 total).
2021/06/26 20:04:29 [clock:4] Main phase starts.
2021/06/26 20:04:29 [clock.wallclock_main:3] Streaming loop starts, synchronized with wallclock.
2021/06/26 20:04:29 [decoder.mad:4] Libmad recognizes "/etc/liquidsoap/music/3.mp3" as mpeg audio (layer III, 192kbps, 44100Hz, 2 channels).
2021/06/26 20:04:29 [decoder:3] Method "MAD" accepted "/etc/liquidsoap/music/3.mp3".
2021/06/26 20:04:29 [metadata.flac:4] Invalid MIME type for "/etc/liquidsoap/music/3.mp3": audio/mpeg!
2021/06/26 20:04:29 [metadata.flac:4] Invalid file extension for "/etc/liquidsoap/music/3.mp3"!
2021/06/26 20:04:29 [metadata.mp4:4] Invalid MIME type for "/etc/liquidsoap/music/3.mp3": audio/mpeg!
2021/06/26 20:04:29 [metadata.mp4:4] Invalid file extension for "/etc/liquidsoap/music/3.mp3"!
2021/06/26 20:04:29 [decoder.ogg:4] Invalid MIME type for "/etc/liquidsoap/music/3.mp3": audio/mpeg!
2021/06/26 20:04:29 [decoder.ogg:4] Invalid file extension for "/etc/liquidsoap/music/3.mp3"!

Solution

  • I tried on Debian 10 and Liquidsoap 2.0.0

    It works fine