savonet / liquidsoap

Liquidsoap is a statically typed scripting general-purpose language with dedicated operators and backend for all thing media, streaming, file generation, automation, HTTP backend and more.
http://liquidsoap.info
GNU General Public License v2.0
1.45k stars 131 forks source link

input.http() not working on latest liquidsoap version #546

Closed desavil closed 6 years ago

desavil commented 6 years ago

As in the title. The function input.http() does not work at the latest version of liquidsoap (1.3.3 installed from sources).

There is no error or message in the logs. The stream goes into safe_blank.

In older liquidsoap versions it worked. Please fix it.

icedream commented 6 years ago

Just ran into this as well trying to run liquidsoap from the savonet/liquidsoap-full Docker image.

dhannyz commented 6 years ago

I also run into this issue liquidsoap --version = Liquidsoap 1.3.3+scm

5chdn commented 6 years ago

No, this just broke our station :(

Trying to downgrade liquidsoap.

Edit: Meh, older versions do not compile with recent ocaml :(

dhannyz commented 6 years ago

@5chdn yeah this is a pretty big issue. @toots any idea if this can be fixed easily?

5chdn commented 6 years ago

@toots I'm willing to place a bounty on 2-3 critical issues here if this helps. I would love to see a more stable 1.3.4 version released if possible. just let me know what you need to get this done!

desavil commented 6 years ago

I sent a PayPal donation to this issue a month ago, but nothing has changed in this issue. :(

toots commented 6 years ago

Looking at it right now. @5chdn Mind sending a list of issues? I definitely want to do a 1.3.4 shortly.

toots commented 6 years ago

Y'all have any reproduction steps? This works for me:

liquidsoap 'output.ao(fallible=true,input.http("http://50.31.135.43:80/wwoz-hi.mp3"))'
desavil commented 6 years ago

Try with some SHOUTcast server, e.g.:

input.http("http://37.59.32.115:6168/stream")
5chdn commented 6 years ago

Mind sending a list of issues?

Well, I'm on Archlinux and yesterday I upgraded from 1.3.3-1 to 1.3.3-2 (AUR package) and as always I have to rebuild all ocaml- dependencies and gstreamer- plugins to correctly link the binary. So I am basically forced to update liquidsoap every few months, otherwise I wouldn't be able to restart the service.

Yesterday, I broke a whole small non-profit radio station beyond repair by installing the update.

  1. First of all MAD encoder is broken in 1.3.3 - it simply segfaults. It's probably this issue #526 - but going through the bug tracker, there are a few more open tickets talking segfaults. I'm happy to provide more details. I was able to circumvent this by disabling my FLAC endpoint, the MP3 endpoint is still working, fortunately.

  2. Even worse, the input.http() is silently not working anymore. I almost didn't notice that in first place. This is this issue we are in here #546. It's easily reproducible by trying to relay one mountpoint via input.http() to another mountpoint. This basically broke the ability to relay live streams on our station and I have no idea for any other simple workaround.

  3. Third issue that's really bothering is an unable to decode problem reading any mp3 file from disk. This does not happen when I start liquidsoap but only after a while leaving it running. I noticed, this triggers when a new playlist is loaded (e.g., through a switch). Simply restarting liquidsoap solves this, but I have no idea why this happens. Couldn't find any issue like this on the bug tracker yet. My workaround is to play one random playlist 24/7 so we don't run into this issue.

With these three issues above we are running in kind of emergency mode, we barely are able to keep the records spinning on our station.

Now, I was considering a downgrade to 1.3.2 maybe, but with the latest ocaml update in the Archlinux repositories, older versions do not compile anymore and it's beyond my skills to figure out patches.

Please let me know what you need to get these issues fixed. I always loved liquidsoap for it's stability and I suspect most of the issues are related to external plugins misbehaving (and most recent ocaml incompatibilities). This station has been running for several years without any blackouts - thank you for that. Let's hope we can get back to this state again :)

5chdn commented 6 years ago

Y'all have any reproduction steps?

Exactly what @desavil describes, just with an icecast mountpoint on my end.

toots commented 6 years ago

@desavil. @5chdn: they're both working here. What is y'all OS and libmad version? Also, it would help if y'all could provide a simple one-liner I could use to reproduce the issue.

@5chdn:

  1. Are you referring to FLAC encoder?
  2. That's our issue here.
  3. This is really, really weird. Looks like some corruption somewhere in the stack.

Looking at your issues, actually, it sounds like some corruption in the stack. I would strongly recommend trying to build something from scratch, including the OCaml compiler, just to put aside any issue that could be brought in by some distro-specific patches/changes. Are you familiar with the opam install? This should allow us to test from clean code and also potentially downgrade OCaml version in case something is coming from a recent OCaml release (though I hope unlikely).

Thanks for the feedback y'all, I hear the frustration, let's hope we can fix this ASAP.

icedream commented 6 years ago

I personally was able to reproduce the bug by streaming to an Icecast version 2.4.3 server, then using input.http to receive it in combination with a fallback that is track-insensitive (for example falling back to a sine source). Streaming this out again with output.icecast and running it with telnet port enabled, then starting to stream something on the Icecast input tells me that the live input is stuck in a polling state and therefor it will never switch to the http input source.

5chdn commented 6 years ago

@toots sure, I will dedicate some time to a fresh system setup for debugging tonight. Are you on IRC or Riot somewhere?

desavil commented 6 years ago

Linux 4.9.0-6-amd64 #1 SMP Debian 4.9.82-1+deb9u3 (2018-03-02) x86_64 GNU/Linux (Debian 9, 64 bit).

My full configuration:

set("log.stdout",false)
set("init.daemon",true)
set("init.daemon.pidfile.path","/home/liquidsoap.pid")
set("log.file.path","/home/liquidsoap.log")
radio = mksafe(input.http("http://shoutcast:port"))
output.shoutcast(%mp3(bitrate=128,samplerate=44100,internal_quality=7),name="Title",genre="Genre",url="http://mysite.com",public=false,host="shoutcast",port=8000,password="hackme",on_error=(fun (_) -> 5.),radio)

Log file:

2018/06/13 14:53:12 [map_metadata_6342:3] Inserting missing metadata. 2018/06/13 14:53:12 [mksafe:3] Switch to safe_blank. 2018/06/13 14:53:12 [clock.wallclock_main:3] Streaming loop starts, synchronized with wallclock. 2018/06/13 14:53:12 [threads:3] Created thread "wallclock_main" (2 total). 2018/06/13 14:53:12 [output(dot)shoutcast:3] Connection setup was successful. 2018/06/13 14:53:12 [output(dot)shoutcast:3] Connecting mount sid#1 for @shoutcast... 2018/06/13 14:53:12 [threads:3] Created thread "http polling" (1 total). 2018/06/13 14:53:12 [threads:3] Created thread "non-blocking queue #2". 2018/06/13 14:53:12 [threads:3] Created thread "non-blocking queue #1". 2018/06/13 14:53:12 [threads:3] Created thread "generic queue #2". 2018/06/13 14:53:12 [threads:3] Created thread "generic queue #1". 2018/06/13 14:53:12 [frame:3] Frames last 0.04s = 1764 audio samples = 1 video samples = 1764 ticks. 2018/06/13 14:53:12 [frame:3] Targetting 'frame.duration': 0.04s = 1764 audio samples = 1764 ticks. 2018/06/13 14:53:12 [frame:3] Frame size must be a multiple of 1764 ticks = 1764 audio samples = 1 video samples. 2018/06/13 14:53:12 [frame:3] Using 44100Hz audio, 25Hz video, 44100Hz master. 2018/06/13 14:53:12 [main:2] 2018/06/13 14:53:12 [main:2] We hope you enjoy this snapshot build of Liquidsoap! 2018/06/13 14:53:12 [main:2] 2018/06/13 14:53:12 [main:2] at https://github.com/savonet/liquidsoap/issues. 2018/06/13 14:53:12 [main:2] Please send any bug report or feature request 2018/06/13 14:53:12 [main:2] 2018/06/13 14:53:12 [main:2] or to join the #savonet IRC channel on Freenode. 2018/06/13 14:53:12 [main:2] drop us a mail at savonet-devl@lists.sf.net 2018/06/13 14:53:12 [main:2] the development of Liquidsoap, feel free to 2018/06/13 14:53:12 [main:2] If you are interested in collaborating to 2018/06/13 14:53:12 [main:2] 2018/06/13 14:53:12 [main:2] issues as soon as possible. 2018/06/13 14:53:12 [main:2] about our development code and committed to fix 2018/06/13 14:53:12 [main:2] We are, however, very interested in any feedback 2018/06/13 14:53:12 [main:2] 2018/06/13 14:53:12 [main:2] unless you know what you are doing! 2018/06/13 14:53:12 [main:2] As such, it should not be used in production 2018/06/13 14:53:12 [main:2] compiled from a snapshot of the development code. 2018/06/13 14:53:12 [main:2] DISCLAIMER: This version of Liquidsoap has been 2018/06/13 14:53:12 [main:2] 2018/06/13 14:53:12 [main:3] Using: bytes=[distributed with OCaml 4.02 or above] pcre=7.2.3 dtools=0.3.4 duppy=0.7.1 duppy.syntax=0.7.1 cry=0.6.1 mm=0.4.0 xmlplaylist=0.1.4 lastfm=0.3.1 ogg=0.5.2 vorbis=0.7.1 mad=0.4.5 flac=0.1.4 flac.ogg=0.1.4 dynlink=[distributed with Ocaml] lame=0.3.3 fdkaac=0.2.1 ao=0.2.2 samplerate=0.1.4 taglib=0.3.4 ssl=0.5.5 magic=0.7.3 camomile=1.0.1 faad=0.3.3 2018/06/13 14:53:12 [main:3] Liquidsoap 1.3.3+scm (git://github.com/savonet/liquidsoap.git@463c6f08bbcb9b53f8d5f3efce29e1cd55382b93:20180413:014222) 2018/06/13 14:53:12 >>> LOG START

toots commented 6 years ago

Sorry y'all I still cannot reproduce. Here's what I have:

My script:

set("log.stdout",false)
set("init.daemon",true)
set("init.daemon.pidfile.path","/tmp/liquidsoap.pid")
set("log.file.path","/tmp/liquidsoap.log")
output.icecast(port=8000,mount="test",%mp3,mksafe(input.http("http://50.31.135.43:80/wwoz-hi.mp3")))

Could any of y'all try my script or the simpler one-liner above to see if the issue exists with these examples? Otherwise, could you give me more specifics like a shoutcast server to hit?

desavil commented 6 years ago

@toots Check your e-mail messages. I sent you a config with shoutcast 2 servers and passwords which worked on earlier versions.

toots commented 6 years ago

Thanks. Looks like the stream is in use so I can't connect but I've been seeing some buffer overrun. Have you tried to increase the max buffer: input.http(max=40.,...) ?

toots commented 6 years ago

Actually sorry it's working now. Strike that :-)

toots commented 6 years ago

Ok, sorry. It's running now with max=40.. Seems stable for now.

desavil commented 6 years ago

@toots Only you. No one else connects. Stream Source: | 86.214.91.xxx [ kick ] Stream Uptime: | 16 minutes 28 seconds

toots commented 6 years ago

Yeah, it's working. I'll let it run to see if it's stable with max=40. then try again with default params and report back.

desavil commented 6 years ago

Ok. :)

desavil commented 6 years ago

Unfortunately, I can still hear the silence. :(

toots commented 6 years ago

Might be an issue with mksafe() actually. Trying with fallible=true now.

desavil commented 6 years ago

I changed from: mksafe(input.http(max=40.,"http://ip:port")) to: input.http(max=40.,"http://ip:port",fallible=true)

But I get an error:

At line 4, char 120-123: cannot apply that parameter because the function (at line 4, char 83) has no argument labeled "fallible"!

toots commented 6 years ago

You need to put it at the output level:

output.shoutcast(fallible=true,...)

And remove mksafe()

desavil commented 6 years ago

2018/06/13 16:54:21 [output(dot)shoutcast:3] Source failed (no more tracks) stopping output... And liquidsoap no connect to output shoutcast server.

toots commented 6 years ago

Damn. I mean this is what's expected. Can you confirm that the script you sent me is working on your shoutcast now?

toots commented 6 years ago

So, it looks like the script you sent me is working here with or without mksafe().

desavil commented 6 years ago

I do not know what is wrong. I still do not work with me. :(

toots commented 6 years ago

@desavil: OS/OS version/OCaml version/install method?

desavil commented 6 years ago

OS: Latest Debian 9 (64 bit) Liquidsoap installed from sources (compile), full steps:

adduser --system --shell /bin/bash --group --disabled-password liquidsoap
apt-get -y install opam unzip curl git-core libfftw3-dev pkg-config autoconf make automake libtool-bin ocaml opam libao-ocaml-dev libportaudio-ocaml-dev libpulse-ocaml-dev libmad-ocaml-dev libssl-ocaml-dev libtaglib-ocaml-dev libmp3lame-ocaml-dev libogg-ocaml-dev libvorbis-ocaml-dev libopus-ocaml-dev libfdkaac-ocaml-dev libfaad-ocaml-dev libflac-ocaml-dev libsamplerate-ocaml-dev libmagic-ocaml-dev
su liquidsoap
cd
git clone https://github.com/savonet/liquidsoap-full.git
opam init [Select: N]
eval `opam config env`
opam install base-bytes pcre camomile lastfm samplerate magic ssl [Select: y]
cd liquidsoap-full && make init && make update && cp PACKAGES.minimal PACKAGES && sed -i "s/#ocaml-fdkaac/ocaml-fdkaac/g" PACKAGES && sed -i "s/#ocaml-faad/ocaml-faad/g" PACKAGES && ./bootstrap && ./configure && make
exit
cd /home/liquidsoap/liquidsoap-full && make install
toots commented 6 years ago

Thanks. Gonna test it inside a docker container, will report asap.

toots commented 6 years ago

Okkkay! I was able to track it down to a piece of code that'd been added since 1.3.3. In other word @desavil's issue didn't apply to the latest released version.

I'm very happy to have this fixed, thanks for your patience. Couple of remarks from this conversaion:

I'll post an email in the mailing list soon. tl;dr I don't really have much time for liquidsoap dev these days but I'm down to be available for quick bug fixes like this in the next 4 weeks or so and publish a 1.3.4 stable release along with a call for action to try to find some help to keep this project moving.

Thanks y'all.

5chdn commented 6 years ago

Having a hard time to install from source. It requires mm >= 0.4.0 but neither opam nor archlinux repositories have that version.

checking for ocaml mm module >= 0.4.0... configure: error: requires version >= 0.4.0 found 0.3.1.
1 ✗ user@tauris ~/src/liquidsoap $ opam install mm
[NOTE] Package mm is already installed (current version is 0.3.1).
0 ✓ user@tauris ~/src/liquidsoap $ pacaur -Ss ocaml-mm
aur/ocaml-mm 0.3.1-1 (0, 0.00) [installed]
    OCaml multimedia library

Interestingly, there seems not to be any mm release >= 0.4.0 at all: https://github.com/savonet/ocaml-mm/releases

5chdn commented 6 years ago

Also, vorbis does not compile, I see you created a fix commit, but never released 0.7.1 - can you do that?

I managed to install vorbis from source. However, lastfm does not work:

checking for ocaml-xmlplaylist... configure: error: Not found.

Even though it's installed. And I keep going down this rabbit hole. xmlplaylist from source fails because it requires xmlm, xmlm fails because it requires ocamlbuild, but that does not compile. What the hell happened to the ocaml ecosystem? So many broken packages?

5chdn commented 6 years ago

And liquidsoap does not compile either.

 $ make -j 16
make[1]: Entering directory '/home/user/src/liquidsoap/src'
make[2]: Entering directory '/home/user/src/liquidsoap/src/tools'
make[2]: Leaving directory '/home/user/src/liquidsoap/src/tools'
make[2]: Entering directory '/home/user/src/liquidsoap/src/decoder'
make[3]: Entering directory '/home/user/src/liquidsoap/src/decoder/image'
make[2]: Entering directory '/home/user/src/liquidsoap/src'
OCAMLOPT -c outputs/ao_out.ml
OCAMLOPT -c outputs/icecast2.ml
make[3]: Leaving directory '/home/user/src/liquidsoap/src/decoder/image'
OCAMLOPT -c operators/insert_metadata.ml
OCAMLOPT -c operators/map_metadata.ml
make[2]: Leaving directory '/home/user/src/liquidsoap/src/decoder'
OCAMLOPT -c operators/on_metadata.ml
OCAMLOPT -c operators/store_metadata.ml
OCAMLOPT -c operators/on_track.ml
make[2]: Entering directory '/home/user/src/liquidsoap/src/playlists'
OCAMLOPT -c operators/on_end.ml
OCAMLOPT -c operators/delay.ml
OCAMLOPT -c operators/fade.ml
make[2]: Leaving directory '/home/user/src/liquidsoap/src/playlists'
OCAMLOPT -c operators/add.ml
OCAMLOPT -c operators/sequence.ml
make[2]: Entering directory '/home/user/src/liquidsoap/src/encoder'
make[2]: Leaving directory '/home/user/src/liquidsoap/src/encoder'
OCAMLOPT -c operators/compress_exp.ml
OCAMLOPT -c operators/pitch.ml
make[2]: Entering directory '/home/user/src/liquidsoap/src/protocols'
OCAMLOPT -c operators/pipe.ml
OCAMLOPT -c operators/fir_filter.ml
OCAMLOPT -c operators/iir_filter.ml
make[2]: Leaving directory '/home/user/src/liquidsoap/src/protocols'
OCAMLOPT -c operators/filter_rc.ml
make[2]: Entering directory '/home/user/src/liquidsoap/src/plugins'
OCAMLOPT -c operators/biquad_filter.ml
OCAMLOPT -c operators/cuepoint.ml
OCAMLOPT -c operators/map_op.ml
OCAMLOPT -c operators/flanger.ml
make[2]: Leaving directory '/home/user/src/liquidsoap/src/plugins'
make[2]: Entering directory '/home/user/src/liquidsoap/src/stream'
File "outputs/ao_out.ml", line 106, characters 25-29:
Error: This expression has type string -> unit
       but an expression was expected of type Bytes.t -> unit
       Type string is not compatible with type Bytes.t = bytes 
make[2]: *** [../Makefile.rules:192: outputs/ao_out.cmx] Error 2
make[2]: *** Waiting for unfinished jobs....
make[2]: Leaving directory '/home/user/src/liquidsoap/src/stream'
make[2]: Entering directory '/home/user/src/liquidsoap/src/lang'
make[2]: Leaving directory '/home/user/src/liquidsoap/src/lang'
make[2]: Entering directory '/home/user/src/liquidsoap/src/ogg_formats'
File "operators/pipe.ml", line 130, characters 33-37:
Error: This expression has type bytes but an expression was expected of type
         string
make[2]: *** [../Makefile.rules:192: operators/pipe.cmx] Error 2
make[2]: Leaving directory '/home/user/src/liquidsoap/src/ogg_formats'
make[2]: Entering directory '/home/user/src/liquidsoap/src/converters'
make[3]: Entering directory '/home/user/src/liquidsoap/src/converters/audio'
make[3]: Leaving directory '/home/user/src/liquidsoap/src/converters/audio'
make[3]: Entering directory '/home/user/src/liquidsoap/src/converters/video'
make[3]: Leaving directory '/home/user/src/liquidsoap/src/converters/video'
make[2]: Leaving directory '/home/user/src/liquidsoap/src/converters'
make[2]: Entering directory '/home/user/src/liquidsoap/src/operators'
make[2]: Leaving directory '/home/user/src/liquidsoap/src/operators'
make[2]: Entering directory '/home/user/src/liquidsoap/src/sources'
make[2]: Leaving directory '/home/user/src/liquidsoap/src/sources'
make[2]: Entering directory '/home/user/src/liquidsoap/src/conversions'
make[2]: Leaving directory '/home/user/src/liquidsoap/src/conversions'
make[2]: Entering directory '/home/user/src/liquidsoap/src/outputs'
make[2]: Leaving directory '/home/user/src/liquidsoap/src/outputs'
make[2]: Entering directory '/home/user/src/liquidsoap/src/io'
make[2]: Leaving directory '/home/user/src/liquidsoap/src/io'
make[2]: Entering directory '/home/user/src/liquidsoap/src/visualization'
make[2]: Leaving directory '/home/user/src/liquidsoap/src/visualization'
make[2]: Entering directory '/home/user/src/liquidsoap/src/analyze'
make[2]: Leaving directory '/home/user/src/liquidsoap/src/analyze'
make[2]: Entering directory '/home/user/src/liquidsoap/src/synth'
make[2]: Leaving directory '/home/user/src/liquidsoap/src/synth'
make[2]: Entering directory '/home/user/src/liquidsoap/src/harbor'
make[2]: Leaving directory '/home/user/src/liquidsoap/src/harbor'
make[2]: Entering directory '/home/user/src/liquidsoap/src/lang_encoders'
make[2]: Leaving directory '/home/user/src/liquidsoap/src/lang_encoders'
make[2]: Entering directory '/home/user/src/liquidsoap/src/encoder_formats'
make[2]: Leaving directory '/home/user/src/liquidsoap/src/encoder_formats'
make[2]: Leaving directory '/home/user/src/liquidsoap/src'
make[1]: *** [../Makefile.rules:67: all-auto-ocaml-prog] Error 2
make[1]: Leaving directory '/home/user/src/liquidsoap/src'
make: *** [Makefile.rules:27: all-subdirs] Error 2

I'm losing hope. I came here to debug this, but I can't even get the basic stuff working on a fresh system. I don't know where to start.

toots commented 6 years ago

@5chdn: I initially meant to install the latest released version but since you're there already, what you should do is go with the full tarball. Here's a quick and untested way to go, with opam already installed:

eval `opam config env`
# Install OS packages:
opam depext liquidsoap ao cry dtools duppy flac lame mad mm ogg taglib vorbis
# Install external deps:
opam install base-bytes pcre camomile
# Now the sources (you need git installed):
git clone https://github.com/savonet/liquidsoap-full.git
# Build stuff
cd liquidsoap-full && make init && make update && cp PACKAGES.minimal PACKAGES && \
  ./bootstrap && ./configure && make
# As root:
make install

That should get you pretty close to testing the latest code.

5chdn commented 6 years ago

Okay, let me try this. I removed all pacakages from repository and opam and start from scratch. Having three different options to get the packages certainly leads to too many conflicts.

0 ✓ user@tauris ~/src/liquidsoap-full $ pacaur -Qs ocaml
local/cppo 1.6.4-1
    C-style preprocessor for OCaml
local/dune 1.0b19.1-1
    A composable build system for OCaml (formerly jbuilder)
local/ocaml 4.06.0-2
    A functional language with OO extensions
local/ocaml-compiler-libs 4.06.0-2
    Several modules used internally by the OCaml compiler
local/ocaml-findlib 1.8.0-1
    OCaml package manager
local/opam 1.2.2-4
    OCaml package manager
0 ✓ user@tauris ~/src/liquidsoap-full $ opam list
# Installed packages for system:
base-bigarray  base  Bigarray library distributed with the OCaml compiler
base-threads   base  Threads library distributed with the OCaml compiler
base-unix      base  Unix library distributed with the OCaml compiler

Getting the deps.

0 ✓ user@tauris ~/src/liquidsoap-full $ eval `opam config env`
0 ✓ user@tauris ~/src/liquidsoap-full $ opam depext liquidsoap ao cry dtools duppy flac lame mad mm ogg taglib vorbis
OPAM plugin depext is not installed. Install it on the current switch? [Y/n] Y
The following actions will be performed:
  ∗  install depext 1.0.5

=-=- Gathering sources =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[depext] Archive in cache

=-=- Processing actions -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
∗  installed depext.1.0.5
Done.

=-=- Carrying on to "opam depext liquidsoap ao cry dtools duppy flac lame mad mm ogg taglib vorbis" 

# Detecting depexts using flags: x86_64 linux archlinux
# The following system packages are needed:
#  - flac
#  - libmad
#  - libogg
#  - m4
#  - pkg-config
flac 1.3.2-1
libmad 0.15.1b-8
libogg 1.3.3-2
m4 1.4.18-1
pkgconf 1.4.2-2
# All required OS packages found.
0 ✓ user@tauris ~/src/liquidsoap-full $ opam install base-bytes pcre camomile
The following actions will be performed:
  ∗  install jbuilder        1.0+beta20       [required by camomile, pcre]
  ∗  install conf-m4         1                [required by ocamlfind]
  ∗  install conf-pkg-config 1.1              [required by conf-libpcre]
  ∗  install sexplib0        v0.11.0          [required by base]
  ∗  install camomile        1.0.1     
  ∗  install ocamlfind       1.8.0            [required by base-bytes]
  ∗  install conf-libpcre    1                [required by pcre]
  ∗  install base            v0.11.0          [required by pcre]
  ∗  install base-bytes      base      
  ∗  install stdio           v0.11.0          [required by pcre]
  ∗  install configurator    v0.11.0          [required by pcre]
  ∗  install pcre            7.3.4     
===== ∗  12 =====
Do you want to continue ? [Y/n] y

=-=- Gathering sources =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[base] Archive in cache
[camomile] Archive in cache
[configurator] Archive in cache
[jbuilder] Archive in cache
[ocamlfind] Archive in cache
[pcre] Archive in cache
[sexplib0] Archive in cache
[stdio] Archive in cache

=-=- Processing actions -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
∗  installed conf-m4.1
∗  installed conf-pkg-config.1.1
∗  installed conf-libpcre.1
∗  installed ocamlfind.1.8.0
∗  installed base-bytes.base
∗  installed jbuilder.1.0+beta20
∗  installed sexplib0.v0.11.0
∗  installed base.v0.11.0
∗  installed camomile.1.0.1
∗  installed stdio.v0.11.0
∗  installed configurator.v0.11.0
∗  installed pcre.7.3.4
Done.

Configuration.

 ----------------------------------------------------------------- Compilation

 Compiler       : ocamlfind ocamlopt
 Version        : 4.06.0
 OS             : Unix
 Plugins        :
 Custom path    : no
 OCAML_CFLAGS   : -g -annot  -g -w +A-4@5-7@8-9@11@12@20-35-44-45-50 -ccopt "$(CFLAGS)" -package bytes -package pcre -I /home/user/src/liquidsoap-full/liquidsoap/../ocaml-dtools/src  -I /home/user/src/liquidsoap-full/liquidsoap/../ocaml-duppy/src  -I /home/user/src/liquidsoap-full/liquidsoap/../ocaml-duppy/src  -I /home/user/src/liquidsoap-full/liquidsoap/../ocaml-cry/src  -I /home/user/src/liquidsoap-full/liquidsoap/../ocaml-mm/src  -I /home/user/src/liquidsoap-full/liquidsoap/../ocaml-ogg/src  -I /home/user/src/liquidsoap-full/liquidsoap/../ocaml-vorbis/src  -I /home/user/src/liquidsoap-full/liquidsoap/../ocaml-mad/src  -I /home/user/src/liquidsoap-full/liquidsoap/../ocaml-flac/src  -I /home/user/src/liquidsoap-full/liquidsoap/../ocaml-flac/src  -package dynlink -I /home/user/src/liquidsoap-full/liquidsoap/../ocaml-lame/src  -I /home/user/src/liquidsoap-full/liquidsoap/../ocaml-ao/src  -I /home/user/src/liquidsoap-full/liquidsoap/../ocaml-taglib/src  -package camomile
 OCAML_LFLAGS   : -g -linkpkg -package unix -package threads -package str -package bigarray -cc "$(CC)"  -package str -package unix -package threads dtools.cmxa  -package unix -package threads -package pcre -package bigarray -package camlp4 duppy.cmxa  -package unix -package threads -package pcre -package bigarray -package camlp4 duppy.cmxa  -package unix -package bytes cry.cmxa  -package unix -package bigarray mm.cmxa  ogg.cmxa  -package unix  vorbis.cmxa  -package unix mad.cmxa     flac.cmxa     flac.cmxa  lame.cmxa  ao.cmxa  -package unix taglib.cmxa
 CFLAGS         :  -I$(top_srcdir) -I/usr/include -fPIC -I/usr/lib/ocaml -g
 LDFLAGS        :  -L/usr/lib
 CAMLP4O        : camlp4o /home/user/src/liquidsoap-full/liquidsoap/../ocaml-duppy/src/pa_duppy.cmo

 ---------------------------------------------------------------- Installation

 prefix         : /usr
 exec_prefix    : ${prefix}
 binary         : ${exec_prefix}/bin
 configuration  : /etc/liquidsoap
 logging        : /var/log/liquidsoap
 PIDs           : /var/run/liquidsoap
 logrotate conf : /etc/logrotate.d
 man page       : ${datarootdir}/man/man1
 doc            : ${datarootdir}/doc

 -------------------------------------------------------------------- Features

 * Supported input formats
   - Vorbis            : yes
   - Theora            : no (requires theora)
   - Speex             : no (requires speex)
   - Flac (native)     : yes
   - Flac (ogg)        : yes
   - MP3               : yes
   - AAC               : no (requires faad)
   - XML playlists     : no (requires xmlplaylist)
   - Lastfm            : no (requires lastfm)

 * Supported output formats
   - Vorbis            : yes
   - MP3               : yes
   - MP3 (fixed-point) : no (requires shine)
   - FDK-AAC           : detected at runtime
   - SPEEX             : no (requires speex)
   - Opus              : no (requires opus)
   - Theora            : no (requires theora)

 * Tags
   - Taglib (ID3 tags) : yes
   - Vorbis            : yes
   - charset detection : yes

 * Input / output
   - Icecast/Shoutcast : yes
   - AO                : yes
   - OSS               : no
   - ALSA              : no (requires alsa)
   - Portaudio         : no (requires portaudio)
   - Pulseaudio        : no (requires pulseaudio)
   - JACK              : no (requires bjack)
   - GStreamer         : no (requires gstreamer)

 * Audio manipulation
   - Samplerate        : no (requires samplerate)
   - SoundTouch        : no (requires soundtouch)
   - LADSPA            : no (requires ladspa)

 * Video manipulation
   - Gavl              : no (requires gavl)
   - FFmpeg            : no (requires ffmpeg)
   - frei0r            : no (requires frei0r)
   - camlimages        : no (requires camlimages)

 * MIDI manipulation
   - DSSI              : no (requires dssi)

 * Visualization
   - Graphics          : no
   - SDL               : no (requires sdl)
   - GD                : no (requires gd)

 * Additional libraries
   - curl URI resolver : requires curl at runtime
   - dynlink           : yes
   - inotify           : no (requires inotify)
   - lo                : no (requires lo)
   - magic             : no (requires magic)
   - yojson            : no (requires yojson)
   - ssl               : no (requires ssl)
   - SecureTransport   : no (requires osx-secure-transport)
   - windows service   : no (requires winsvc)

 * Graphical interfaces
   - Python GUI        : no

Fails in ocaml-lame :(

make[1]: Entering directory '/home/user/src/liquidsoap-full/ocaml-lame'
make -C src all
make[2]: Entering directory '/home/user/src/liquidsoap-full/ocaml-lame/src'
ocamlc.opt -c -cc "gcc" -ccopt "-g -O2 -I/usr/include  -Wall -DCAML_NAME_SPACE \
            -fPIC -I/usr/include   \
                -o lame_stubs.o " lame_stubs.c 
make[3]: Entering directory '/home/user/src/liquidsoap-full/ocaml-lame/src'
making ._bcdi/lame.di from lame.mli
making ._d/lame.d from lame.ml
ocamlc.opt -c -g -w +A-4@5-7@8-9@11@12@20-35-44-45-50 lame.mli
ocamlc.opt -c -g -w +A-4@5-7@8-9@11@12@20-35-44-45-50 lame.ml
File "lame.ml", line 1:
Error: Could not find the .cmi file for interface lame.mli.
make[2]: *** [OCamlMakefile:952: lame.cmo] Error 2
make[2]: *** Waiting for unfinished jobs....
ocamlc.opt -c -cc "gcc" -ccopt "-fPIC -g -O2 -I/usr/include  -Wall -DCAML_NAME_SPACE \
            -DPIC -fPIC -I/usr/include   \
                -o lame_stubs.o " lame_stubs.c 
ocamlc.opt -c -g -w +A-4@5-7@8-9@11@12@20-35-44-45-50 lame.ml
ar rcs liblame_stubs.a  lame_stubs.o
ocamlmklib      -L/usr/lib    \
            -o lame_stubs  lame_stubs.o -lmp3lame -lm \

ocamlc.opt -a -dllib dlllame_stubs.so       -ccopt -L/usr/lib  -ccopt -L/usr/lib     \
            -cclib -llame_stubs -cclib -lmp3lame -cclib -lm  -o lame.cma  lame.cmo
make[3]: Leaving directory '/home/user/src/liquidsoap-full/ocaml-lame/src'
make[2]: Leaving directory '/home/user/src/liquidsoap-full/ocaml-lame/src'
make[1]: *** [Makefile:10: all] Error 2
make[1]: Leaving directory '/home/user/src/liquidsoap-full/ocaml-lame'
make: *** [Makefile:11: all] Error 1
2 ✗ user@tauris ~/src/liquidsoap-full $ pacaur -Qs lame
local/lame 3.100-1
    A high quality MPEG Audio Layer III (MP3) encoder
local/twolame 0.3.13-8
    An optimized MPEG Audio Layer 2 (MP2) encoder
0 ✓ user@tauris ~/src/liquidsoap-full $ uname -a
Linux tauris 4.16.13-2-ARCH #1 SMP PREEMPT Fri Jun 1 18:46:11 UTC 2018 x86_64 GNU/Linux
toots commented 6 years ago

That's odd. Are you compiling in parallel like make -j? This isn't supported by some bindings, specially ocaml-lame actually.

5chdn commented 6 years ago

@toots indeed, I used -j and dropping this allowed me to build it from source. Also, I was able to install the latest version with your fix. :+1:

I can confirm now, that input.http() is working again. The FLAC issue (segfault) still persists, but I can deal with it, we disabled that encoder for the time being.

Please, tell me where I can send donations. I couldn't find a link. :raised_hands:

toots commented 6 years ago

Great to hear! The flac encoder is unfortunately inherently hackish so I'm not surprised. But I don't think it's quite a realistic streaming encoder, unless you're using it for file archival?

Donation are through paypal at savonet.donations@gmail.com. Much appreciated!

Will reach out to the ML this weekend. Thanks!

5chdn commented 6 years ago

Thanks. I sent a little appreciation.