Search code examples
ubuntu-servericecastliquidsoap

Icecast with Liquidsoap not working


All;
Ubuntu 18.04 - Icecast / LiquidSoap / opam / (liquidsoap-daemon)
Installed: taglib mad lame Vorbis cry ssl samplerate magic opus
Plugins: liquidsoap-plugin-all

System Specs:

-System - VirtualBox
-CPU = Intel(R) Core(TM) i7-2720QM CPU @ 2.20GHz
-Memory = 1969MiB (2GB assigned to VM Client)

I have been messing with this for a while now and to no avail.
I have this thread that is now closed, that has near about everything that you would need to look at about my setup. icecast request parsing failed

The playlist I'm testing:

 #!/usr/bin/liquidsoap
 # Log dir
set("log.file.path","/var/log/liquidsoap/radioliq.log")

 # Music
myplaylist = playlist("/home/UserName/music-store/")
 # Some jingles
jingles = playlist("/home/UserName/music-store/jingles/jingles.m3u")
 # If something goes wrong, we'll play this
security = single("/home/UserName/music-store/Sec.mp3")

 # Start building the feed with music
radio = myplaylist
 # Now add some jingles
radio = random(weights = [1, 4],[jingles, radio])
 # And finally the security
 radio = fallback(track_sensitive = false, [radio, security])

  # Stream it out
output.icecast(%vorbis,
  radio, host = "192.168.2.20", port = 8000,
  password = "********", mount = "test.ogg")

When I run this

sudo /etc/init.d/liquidsoap restart

I get this

Stopping liquidsoap channels: no script found in /etc/liquidsoap
Starting liquidsoap channels: radio1.liq OK

It shows starting radio1.liq, however, it is STOPPING, because it cannot find anything in that directory, however. That is where it is picking up on the radio1.liq file.

When I run

sudo systemctl status liquidsoap

My output is this:

● liquidsoap.service - LSB: Starts the liquidsoap daemon
   Loaded: loaded (/etc/init.d/liquidsoap; generated)
   Active: active (exited) since Tue 2018-06-12 17:47:52 EDT; 3h 0min ago
     Docs: man:systemd-sysv-generator(8)
  Process: 1312 ExecStart=/etc/init.d/liquidsoap start (code=exited, status=0/SUCCESS)

Jun 12 17:47:47 liquid-ice systemd[1]: Starting LSB: Starts the liquidsoap daemon...
Jun 12 17:47:52 liquid-ice liquidsoap[1312]: Starting liquidsoap channels: radio1.liq OK
Jun 12 17:47:52 liquid-ice systemd[1]: Started LSB: Starts the liquidsoap daemon.

As you can tell, the Active is (exited) when other times, it is (running) like Icecast is. However, I usually have to do a reboot on the system, in order to get it to show (running)
I just did a reboot, and it is still showing (exited), this is the first time that it has not changed to (running). And usually it will give me an error that I have to fix something, but it is not doing it now.

● icecast2.service - LSB: Icecast2 streaming media server
   Loaded: loaded (/etc/init.d/icecast2; generated)
   Active: active (running) since Tue 2018-06-12 17:47:50 EDT; 3h 1min ago
     Docs: man:systemd-sysv-generator(8)
  Process: 1338 ExecStart=/etc/init.d/icecast2 start (code=exited, status=0/SUCCESS)
    Tasks: 4 (limit: 2289)
   CGroup: /system.slice/icecast2.service
           └─1403 /usr/bin/icecast2 -b -c /etc/icecast2/icecast.xml

Jun 12 17:47:48 liquid-ice systemd[1]: Starting LSB: Icecast2 streaming media server...
Jun 12 17:47:48 liquid-ice icecast2[1338]:  * Starting streaming media server icecast2
Jun 12 17:47:50 liquid-ice icecast2[1338]:    ...done.
Jun 12 17:47:50 liquid-ice systemd[1]: Started LSB: Icecast2 streaming media server.

when I open the web interface, I only get the following tabs (pages)

[Admin] | [Version]

All the other pages are all blank:

[Server Status] => Nothing, completely blank.
[Mountpoint List] => Active Mountpoints (This is all it shows on the page)

I also changed the username in the /etc/init.d/liquidsoap

user=username
group=username

Username Is what I am logged in as. And then gave permission to my user over the locations.

/etc/liquidsoap/radio1.liq
/run/liquidsoap/

using the following scripts:

sudo chmod o+w /run/liquidsoap/
sudo chmod o+w /etc/liquidsoap/radio1.liq

Here is the latest error log from the icecast error.log

[2018-08-08  02:22:18] INFO sighandler/_sig_die Caught signal 15, shutting down...
[2018-08-08  02:22:18] INFO main/main Shutting down
[2018-08-08  02:22:18] INFO fserve/fserve_shutdown file serving stopped
[2018-08-08  02:22:18] INFO slave/_slave_thread shutting down current relays
[2018-08-08  02:22:18] INFO slave/_slave_thread Slave thread shutdown complete
[2018-08-08  02:22:18] INFO auth/auth_shutdown Auth shutdown
[2018-08-08  02:22:18] INFO yp/yp_shutdown YP thread down
[2018-08-08  02:22:19] INFO stats/stats_shutdown stats thread finished
[2018-08-08  02:22:19] INFO main/main Icecast 2.4.3 server started
[2018-08-08  02:22:19] INFO connection/get_ssl_certificate No SSL capability
[2018-08-08  02:22:19] INFO stats/_stats_thread stats thread started
[2018-08-08  02:22:19] INFO yp/yp_update_thread YP update thread started

Exerts from the radio.log file

2018/08/09 04:35:03 [dynamic.loader:3] Could not find dynamic module for fdkaac encoder.
2018/08/09 04:35:03 [dynamic.loader:3] Could not find dynamic module for aacplus encoder.
..........
2018/08/09 04:35:03 [frame:3] Using 44100Hz audio, 25Hz video, 44100Hz master.
2018/08/09 04:35:03 [frame:3] Frame size must be a multiple of 1764 ticks = 1764 audio samples = 1 video samples.
2018/08/09 04:35:03 [frame:3] Targetting 'frame.duration': 0.04s = 1764 audio samples = 1764 ticks.
2018/08/09 04:35:03 [frame:3] Frames last 0.04s = 1764 audio samples = 1 video samples = 1764 ticks.
2018/08/09 04:35:03 [decoder:3] Method "MAD" accepted "/home/darkice/music/Security/sec.mp3".
2018/08/09 04:35:03 [single:3] "~/music/Security/sec.mp3" is static, resolving once for all...
2018/08/09 04:35:03 [threads:3] Created thread "generic queue #1".
2018/08/09 04:35:03 [threads:3] Created thread "non-blocking queue #1".
2018/08/09 04:35:03 [Jingle(dot)mp3:3] Loading playlist...
2018/08/09 04:35:05 [Jingle(dot)mp3:3] No mime type specified, trying autodetection.
2018/08/09 04:35:05 [playlist.basic:3] Wrong mime type audio/mpeg for playlist!
2018/08/09 04:35:05 [playlist parser:3] No format found
2018/08/09 04:35:05 [Jingle(dot)mp3:3] Could not parse playlist: Not_found
2018/08/09 04:35:05 [Jingle(dot)mp3:3] Got an empty list: keeping the old one.
2018/08/09 04:35:05 [musicList:3] Loading playlist...
2018/08/09 04:35:05 [musicList:3] Playlist is a directory.
2018/08/09 04:35:05 [musicList:3] Successfully loaded a playlist of 1 tracks.
2018/08/09 04:35:05 [single_6363:3] Prepared "/home/darkice/music/Security/sec.mp3" (RID 0).
2018/08/09 04:35:05 [test(dot)ogg:3] Connecting mount test.ogg for [email protected]...
2018/08/09 04:35:05 [test(dot)ogg:2] Connection failed: 401, Authentication Required (HTTP/1.0)
2018/08/09 04:35:05 [test(dot)ogg:3] Will try again in 3.00 sec.
2018/08/09 04:35:05 [threads:3] Created thread "wallclock_main" (1 total).
2018/08/09 04:35:05 [clock.wallclock_main:3] Streaming loop starts, synchronized with wallclock.
2018/08/09 04:43:34 [decoder:3] Method "MAD" accepted "/home/darkice/music/List/01 Send Her To Me.mp3".
2018/08/09 04:43:34 [test(dot)ogg:2] Connection failed: 401, Authentication Required (HTTP/1.0)
2018/08/09 04:43:34 [test(dot)ogg:3] Will try again in 3.00 sec.
2018/08/09 04:43:34 [threads:3] Created thread "wallclock_main" (1 total).
2018/08/09 04:43:34 [clock.wallclock_main:3] Streaming loop starts, synchronized with wallclock.
2018/08/09 04:43:34 [fallback_6368:3] Switch to single_6363.
2018/08/09 04:43:34 [carrzkiss:3] Prepared "/home/darkice/music/List/01 Send Her To Me.mp3" (RID 3).
2018/08/09 04:43:34 [fallback_6368:3] Switch to random_6366 with transition.
2018/08/09 04:35:05 [random_6366:3] Switch to musicList.
2018/08/09 04:35:09 [test(dot)ogg:3] Connecting mount test.ogg for [email protected]...
2018/08/09 04:35:09 [test(dot)ogg:2] Connection failed: 401, Authentication Required (HTTP/1.0)
2018/08/09 04:35:09 [test(dot)ogg:3] Will try again in 3.00 sec.  

I followed this page here, to get the logging to start.

Is there something I am missing here? is there something else that needs to be installed, in order to make liquidsoap function properly?
I followed this tutorial on the installation. Create an internet radio station with Icecast and liquidsoap

I really do not know what else to add to this. I have gone through everything and even did some extras while writing this up. Please let me know if there is anything else that you may need for me to check on. And please, have a look at my other thread, for more information on what I have set up here. icecast request parsing failed

running the following code.

curl -v 192.168.2.4:8000 >/dev/null

gives me this.

* Rebuilt URL to: 192.168.2.4:8000/
*   Trying 192.168.2.4...
* TCP_NODELAY set
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* Connected to 192.168.2.4 (192.168.2.4) port 8000 (#0)
> GET / HTTP/1.1
> Host: 192.168.2.4:8000
> User-Agent: curl/7.58.0
> Accept: */*
> 
* HTTP 1.0, assume close after body
< HTTP/1.0 200 OK
< Server: Icecast 2.4.3
< Date: Sun, 12 Aug 2018 18:28:52 GMT
< Content-Type: text/xml; charset=UTF-8
< Cache-Control: no-cache
< Expires: Mon, 26 Jul 1997 05:00:00 GMT
< Pragma: no-cache
< Access-Control-Allow-Origin: *
< Content-Length: 1144
< 
{ [1144 bytes data]
100  1144  100  1144    0     0  95333      0 --:--:-- --:--:-- --:--:--  101k
* Closing connection 0

Thank You.
Wayne


Solution

  • It has been a while since I messed with Icecast2 and Liquidsoap.
    However, I did just that a few weeks ago.
    After struggling for some time, I figured it out after getting help from another person and watching a video.
    It was all a permissions issue.

    Once you create your user, "Icedemo."
    (logged in as root)

    adduser Icedemo 
    

    Give user SUDO rights.

    usermod -aG sudo Icedemo
    

    Now give permissions to Icedemo to all the folders.

    /opt/liquidsoap/Playlists/
    /var/log/liquidsoap/
    /etc/icecast2/web/
    /etc/icecast2/admin/
    

    Use the following script to give permissions.

    cd /opt
    sudo chown -Rv icedemo:icedemo liquidsoap/
    cd /var/log/
    sudo chown -Rv icedemo:icedemo liquidsoap/
    cd /etc/icecast2/
    sudo chown -Rv icedemo:icedemo web/
    sudo chown -Rv icedemo:icedemo admin/
    

    Leave permission the same for the icecast.xml file.

    Log in as your user Icedemo

    su Icedemo  
    

    Once you have done all the above and your script is properly formatted. Something like this.

    # !/home/iceadmin/.opam/default/bin/liquidsoap
    # log dir
    set ("log.file.path","/var/log/liquidsoap/basic-radio.log")
    set("scheduler.fast_queues",1)
     # Music
    music = playlist("/opt/liquidsoap/playlists/RadioOne.m3u",mode="normal",reload_mode="watch")
    
    # Start building the feed with music
    radio = music
    
    # Stream it out
    output.icecast(%mp3(bitrate=256,samplerate=44100,internal_quality=0,id3v2=true,stereo=true,stereo_mode="stereo"),
    name="Radio",
    encoding="UTF-8",
    host="192.168.2.203",
    port=8000,
    password="hackme",
    icy_metadata="true",
    description="Internet Radio Station",
    mount="Radio",
    mksafe(radio))
    

    We will need to restart each service.

    #Restart IceCast   
    sudo systemctl restart icecast2
    #Check status of IceCast  
    sudo systemctl status icecast2
    (Ctrl+Z to go to prompt)
    

    Next, we will need to do the same to Liquidsoap.

    #Restart Liquidsoap
    sudo systemctl restart radio.liq-liquidsoap
    #Check status of  Liquidsoap
    sudo systemctl status radio.liq-liquidsoap
    (After checking the status, you can use (Ctrl+Z to go to prompt))
    

    Your output of the Liquidsoap status should look similar to mine.

    Icedemo@linuxcore-03:~/liquidsoap-daemon$ sudo systemctl status radio.liq-liquidsoap
    ● radio.liq-liquidsoap.service - radio.liq Liquidsoap daemon
         Loaded: loaded (/etc/systemd/system/radio.liq-liquidsoap.service; disabled; vendor preset: enabled)
         Active: active (running) since Mon 2021-05-24 03:47:01 UTC; 4s ago
           Docs: http://liquidsoap.fm/
        Process: 54678 ExecStart=/home/Icedemo/.opam/default/bin/liquidsoap /home/Icedemo/liquidsoap-daemon/script/radio.liq-run.liq (code=exited, status=0/SUCCESS)
       Main PID: 54680 (liquidsoap)
          Tasks: 9 (limit: 2251)
         Memory: 17.3M
         CGroup: /system.slice/radio.liq-liquidsoap.service
                 └─54680 /home/Icedemo/.opam/default/bin/liquidsoap /home/Icedemo/liquidsoap-daemon/script/radio.liq-run.liq
    May 24 03:47:01 linuxcore-03 systemd[1]: Starting radio.liq Liquidsoap daemon...
    May 24 03:47:01 linuxcore-03 systemd[1]: Started radio.liq Liquidsoap daemon.
    

    If the above is showing: Active: active (running)
    Next, check your Icecast webpage, and you should see your mountpoints, and your radio should be working.
    To access the radio station in our example script above would be.

    (local) 192.168.2.203:8000/Radio 
    

    This will load the player in its own browser window, and your stream should start on its own. If not, click the PLAY button.

    That's it; that is how you get your streaming radio to work.
    I hope this helps others out.

    Wayne