From 67ad27bf0fcb14523c69af4d37534eaee5f87d63 Mon Sep 17 00:00:00 2001 From: Tony Miller Date: Sun, 22 Mar 2020 14:56:47 +0900 Subject: [PATCH 01/16] WIP input hls stream --- liquidsoap/Dockerfile | 22 +++++++++++++++++++--- liquidsoap/PACKAGES | 2 +- liquidsoap/radio.liq | 12 +++++++----- 3 files changed, 27 insertions(+), 9 deletions(-) diff --git a/liquidsoap/Dockerfile b/liquidsoap/Dockerfile index fc83826..a0b36a0 100644 --- a/liquidsoap/Dockerfile +++ b/liquidsoap/Dockerfile @@ -48,8 +48,24 @@ RUN opam update -y RUN opam install depext -y RUN eval `opam config env` -RUN sudo opam depext taglib mad lame ogg vorbis cry samplerate liquidsoap -y -RUN opam install taglib mad lame ogg vorbis cry samplerate liquidsoap -y +RUN sudo opam depext taglib mad lame ogg vorbis cry samplerate ffmpeg liquidsoap -y +RUN opam install taglib mad lame ogg vorbis cry samplerate ffmpeg liquidsoap -y + +#RUN ["/bin/bash", "-c", "ls -lha ~"] +RUN cd /home/liquidsoap; git clone https://github.com/savonet/liquidsoap-full +ADD PACKAGES /home/liquidsoap/liquidsoap-full/PACKAGES +RUN ["/bin/bash", "-c", "cd /home/liquidsoap/liquidsoap-full/; git rev-parse HEAD;"] +RUN ["/bin/bash", "-c", "cd /home/liquidsoap/liquidsoap-full/; make init && make update;"] +RUN ["/bin/bash", "-c", "cd /home/liquidsoap/liquidsoap-full/liquidsoap; git rev-parse HEAD;"] +#RUN ["/bin/bash", "-c", "cd /home/liquidsoap/liquidsoap-full/ocaml-mm; git rev-parse HEAD;"] +#RUN ["/bin/bash", "-c", "cd /home/liquidsoap/liquidsoap-full/ocaml-mm; eval `opam config env`; opam pin add . -y;"] +#ADD protocols.liq /home/liquidsoap/liquidsoap-full/liquidsoap/libs/protocols.liq +#RUN ["/bin/bash", "-c", "cd /home/liquidsoap/liquidsoap-full/liquidsoap; eval `opam config env`; opam pin add . -y;"] +RUN ["/bin/bash", "-c", "cd /home/liquidsoap/liquidsoap-full; ./bootstrap;"] +#RUN ["/bin/bash", "-c", "cd /home/liquidsoap/liquidsoap-full; ls -lha; cat configure"] +RUN ["/bin/bash", "-c", "cd /home/liquidsoap/liquidsoap-full; eval `opam config env`; ./configure;"] +RUN ["/bin/bash", "-c", "cd /home/liquidsoap/liquidsoap-full; eval `opam config env`; make;"] +RUN ["/bin/bash", "-c", "cd /home/liquidsoap/liquidsoap-full; eval `opam config env`; sudo make install"] RUN mkdir /home/liquidsoap/radio ADD ./ /home/liquidsoap/radio/ @@ -63,4 +79,4 @@ RUN chown 1000:1000 /home/liquidsoap/tracks RUN chown 1000:1000 /home/liquidsoap/recordings EXPOSE 9000 -CMD ["/bin/bash", "-c", "eval `opam config env`; liquidsoap radio.liq"] +CMD ["/bin/bash", "-c", "eval `opam config env`; /usr/local/bin/liquidsoap radio.liq"] diff --git a/liquidsoap/PACKAGES b/liquidsoap/PACKAGES index be4b45c..e4bb7dd 100644 --- a/liquidsoap/PACKAGES +++ b/liquidsoap/PACKAGES @@ -121,7 +121,7 @@ ocaml-flac # FFMPEG is currently only used to convert from # and to many formats. -# ocaml-ffmpeg +ocaml-ffmpeg # Frei0r is a minimalistic plugin API for video sources and filters. # ocaml-frei0r diff --git a/liquidsoap/radio.liq b/liquidsoap/radio.liq index 1c2e2c6..814bad1 100755 --- a/liquidsoap/radio.liq +++ b/liquidsoap/radio.liq @@ -1,15 +1,15 @@ #!/usr/local/bin/liquidsoap %include "tunein.liq" -set("sandbox.tool","disabled") +#set("sandbox.tool","disabled") set("log.file",true) set("log.file.path","/var/log/liquidsoap.log") set("log.stdout",true) set("log.level",4) -set("server.telnet",true) -set("server.socket",true) -set("server.socket.path","/home/liquidsoap/tracks/liquidsoap.sock") +#set("server.telnet",true) +#set("server.socket",true) +#set("server.socket.path","/home/liquidsoap/tracks/liquidsoap.sock") set("harbor.bind_addrs",["0.0.0.0"]) @@ -215,12 +215,14 @@ def pub_metadata(m) = # log("desc: #{desc}"); end +rtmp_source = audio_to_stereo(drop_video(input.hls("https://vj.datafruits.fm/hls/datafruits.m3u8"))) + live_dj := map_metadata(new_meta, !live_dj,update=false) live_dj := pipe(process='./stereo_tool_cmd_64 - - -s ./stereotool.sts', buffer=10.0, !live_dj) source = fallback(id="fallback",track_sensitive=false, - [!live_dj,mksafe(backup_playlist)]) + [rtmp_source, !live_dj,mksafe(backup_playlist)]) source = if tunein_metadata_updates_enabled == "true" then on_track(tunein.submit(partnerid=tunein_partner_id,partnerkey=tunein_partner_key,stationid=tunein_station_id), source) else source end From 8afe500d38454c6caf37bf8baec8761f8062646f Mon Sep 17 00:00:00 2001 From: Tony Miller Date: Fri, 27 Mar 2020 23:49:40 +0900 Subject: [PATCH 02/16] try gstreamer and gavl --- liquidsoap/Dockerfile | 4 ++-- liquidsoap/PACKAGES | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/liquidsoap/Dockerfile b/liquidsoap/Dockerfile index a0b36a0..61fea5a 100644 --- a/liquidsoap/Dockerfile +++ b/liquidsoap/Dockerfile @@ -48,8 +48,8 @@ RUN opam update -y RUN opam install depext -y RUN eval `opam config env` -RUN sudo opam depext taglib mad lame ogg vorbis cry samplerate ffmpeg liquidsoap -y -RUN opam install taglib mad lame ogg vorbis cry samplerate ffmpeg liquidsoap -y +RUN sudo opam depext taglib mad lame ogg vorbis cry samplerate ffmpeg gavl gstreamer liquidsoap -y +RUN opam install taglib mad lame ogg vorbis cry samplerate ffmpeg gavl gstreamer liquidsoap -y #RUN ["/bin/bash", "-c", "ls -lha ~"] RUN cd /home/liquidsoap; git clone https://github.com/savonet/liquidsoap-full diff --git a/liquidsoap/PACKAGES b/liquidsoap/PACKAGES index e4bb7dd..8af17bc 100644 --- a/liquidsoap/PACKAGES +++ b/liquidsoap/PACKAGES @@ -38,7 +38,7 @@ ocaml-cry # Gstreamer is a library for constructing graphs of media-handling components. # It is currently used to provide audio and video encoding and decoding # as well as input and outputs such as V4l inputs. -# ocaml-gstreamer +ocaml-gstreamer # ============================================================================ # Codecs @@ -117,7 +117,7 @@ ocaml-flac # is very efficient and has a quality setting for # tweaking load vs. quality of the conversion. # It is the recommended module to use with video -# ocaml-gavl +ocaml-gavl # FFMPEG is currently only used to convert from # and to many formats. From d0f6efeced58aa3110181bb218fd43bf947a07ce Mon Sep 17 00:00:00 2001 From: Tony Miller Date: Thu, 23 Apr 2020 10:33:37 -0700 Subject: [PATCH 03/16] use new rtmp stream --- liquidsoap/radio.liq | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/liquidsoap/radio.liq b/liquidsoap/radio.liq index 814bad1..bd2fb30 100755 --- a/liquidsoap/radio.liq +++ b/liquidsoap/radio.liq @@ -7,9 +7,9 @@ set("log.file.path","/var/log/liquidsoap.log") set("log.stdout",true) set("log.level",4) -#set("server.telnet",true) -#set("server.socket",true) -#set("server.socket.path","/home/liquidsoap/tracks/liquidsoap.sock") +set("server.telnet",true) +set("server.socket",true) +set("server.socket.path","/home/liquidsoap/tracks/liquidsoap.sock") set("harbor.bind_addrs",["0.0.0.0"]) @@ -47,6 +47,9 @@ def icy_update(v) = "Done !" end +def clear_queue() = +end + server.register("update",namespace="metadata", description="Update metadata", usage="update title=foo,album=bar,..", @@ -215,14 +218,14 @@ def pub_metadata(m) = # log("desc: #{desc}"); end -rtmp_source = audio_to_stereo(drop_video(input.hls("https://vj.datafruits.fm/hls/datafruits.m3u8"))) +hls_source = audio_to_stereo(drop_video((input.hls("https://vj.bluelighttapes.com/hls/datafruits.m3u8"):source(2,1,0)))) live_dj := map_metadata(new_meta, !live_dj,update=false) live_dj := pipe(process='./stereo_tool_cmd_64 - - -s ./stereotool.sts', buffer=10.0, !live_dj) source = fallback(id="fallback",track_sensitive=false, - [rtmp_source, !live_dj,mksafe(backup_playlist)]) + [hls_source, !live_dj,mksafe(backup_playlist)]) source = if tunein_metadata_updates_enabled == "true" then on_track(tunein.submit(partnerid=tunein_partner_id,partnerkey=tunein_partner_key,stationid=tunein_station_id), source) else source end From ad4e4fee8d7372b7d77b04a5b9d5403c6df4e454 Mon Sep 17 00:00:00 2001 From: Tony Miller Date: Thu, 17 Sep 2020 14:06:58 -0700 Subject: [PATCH 04/16] use input.external.ffmpeg --- liquidsoap/Dockerfile | 27 ++++++++++++++------------- liquidsoap/radio.liq | 31 ++++++++++++++++++++++--------- 2 files changed, 36 insertions(+), 22 deletions(-) diff --git a/liquidsoap/Dockerfile b/liquidsoap/Dockerfile index 61fea5a..152bc66 100644 --- a/liquidsoap/Dockerfile +++ b/liquidsoap/Dockerfile @@ -15,7 +15,7 @@ RUN apt-get update && apt-get upgrade -y # for liquidsoap RUN apt-get install -y --allow-unauthenticated build-essential autoconf curl git ocaml ocaml-native-compilers camlp4-extra opam \ - libmad0-dev libtag1-dev libmp3lame-dev libogg-dev libvorbis-dev libfaac-dev libfaad-dev libfdk-aac-dev libflac-dev \ + libmad0-dev libtag1-dev libmp3lame-dev libogg-dev libvorbis-dev libfaac-dev libfaad-dev libfdk-aac-dev libflac-dev ffmpeg \ libmagic-dev \ pkg-config \ wget telnet \ @@ -43,29 +43,30 @@ RUN apt-get install -y gdb USER liquidsoap RUN opam init -y --disable-sandboxing --solver=mccs -RUN opam switch create new 4.09.0 +RUN opam switch create new 4.08.0 RUN opam update -y RUN opam install depext -y RUN eval `opam config env` RUN sudo opam depext taglib mad lame ogg vorbis cry samplerate ffmpeg gavl gstreamer liquidsoap -y RUN opam install taglib mad lame ogg vorbis cry samplerate ffmpeg gavl gstreamer liquidsoap -y +RUN eval `opam config env` && liquidsoap --version #RUN ["/bin/bash", "-c", "ls -lha ~"] -RUN cd /home/liquidsoap; git clone https://github.com/savonet/liquidsoap-full -ADD PACKAGES /home/liquidsoap/liquidsoap-full/PACKAGES -RUN ["/bin/bash", "-c", "cd /home/liquidsoap/liquidsoap-full/; git rev-parse HEAD;"] -RUN ["/bin/bash", "-c", "cd /home/liquidsoap/liquidsoap-full/; make init && make update;"] -RUN ["/bin/bash", "-c", "cd /home/liquidsoap/liquidsoap-full/liquidsoap; git rev-parse HEAD;"] +# RUN cd /home/liquidsoap; git clone https://github.com/savonet/liquidsoap-full +# ADD PACKAGES /home/liquidsoap/liquidsoap-full/PACKAGES +# RUN ["/bin/bash", "-c", "cd /home/liquidsoap/liquidsoap-full/; git rev-parse HEAD;"] +# RUN ["/bin/bash", "-c", "cd /home/liquidsoap/liquidsoap-full/; make init && make update;"] +# RUN ["/bin/bash", "-c", "cd /home/liquidsoap/liquidsoap-full/liquidsoap; git rev-parse HEAD;"] #RUN ["/bin/bash", "-c", "cd /home/liquidsoap/liquidsoap-full/ocaml-mm; git rev-parse HEAD;"] #RUN ["/bin/bash", "-c", "cd /home/liquidsoap/liquidsoap-full/ocaml-mm; eval `opam config env`; opam pin add . -y;"] #ADD protocols.liq /home/liquidsoap/liquidsoap-full/liquidsoap/libs/protocols.liq #RUN ["/bin/bash", "-c", "cd /home/liquidsoap/liquidsoap-full/liquidsoap; eval `opam config env`; opam pin add . -y;"] -RUN ["/bin/bash", "-c", "cd /home/liquidsoap/liquidsoap-full; ./bootstrap;"] -#RUN ["/bin/bash", "-c", "cd /home/liquidsoap/liquidsoap-full; ls -lha; cat configure"] -RUN ["/bin/bash", "-c", "cd /home/liquidsoap/liquidsoap-full; eval `opam config env`; ./configure;"] -RUN ["/bin/bash", "-c", "cd /home/liquidsoap/liquidsoap-full; eval `opam config env`; make;"] -RUN ["/bin/bash", "-c", "cd /home/liquidsoap/liquidsoap-full; eval `opam config env`; sudo make install"] +# RUN ["/bin/bash", "-c", "cd /home/liquidsoap/liquidsoap-full; ./bootstrap;"] +# #RUN ["/bin/bash", "-c", "cd /home/liquidsoap/liquidsoap-full; ls -lha; cat configure"] +# RUN ["/bin/bash", "-c", "cd /home/liquidsoap/liquidsoap-full; eval `opam config env`; ./configure;"] +# RUN ["/bin/bash", "-c", "cd /home/liquidsoap/liquidsoap-full; eval `opam config env`; make;"] +# RUN ["/bin/bash", "-c", "cd /home/liquidsoap/liquidsoap-full; eval `opam config env`; sudo make install"] RUN mkdir /home/liquidsoap/radio ADD ./ /home/liquidsoap/radio/ @@ -79,4 +80,4 @@ RUN chown 1000:1000 /home/liquidsoap/tracks RUN chown 1000:1000 /home/liquidsoap/recordings EXPOSE 9000 -CMD ["/bin/bash", "-c", "eval `opam config env`; /usr/local/bin/liquidsoap radio.liq"] +CMD ["/bin/bash", "-c", "eval `opam config env` && liquidsoap radio.liq"] diff --git a/liquidsoap/radio.liq b/liquidsoap/radio.liq index bd2fb30..c7a40ce 100755 --- a/liquidsoap/radio.liq +++ b/liquidsoap/radio.liq @@ -5,11 +5,11 @@ set("log.file",true) set("log.file.path","/var/log/liquidsoap.log") set("log.stdout",true) -set("log.level",4) +set("log.level",5) -set("server.telnet",true) -set("server.socket",true) -set("server.socket.path","/home/liquidsoap/tracks/liquidsoap.sock") +#set("server.telnet",true) +#set("server.socket",true) +#set("server.socket.path","/home/liquidsoap/tracks/liquidsoap.sock") set("harbor.bind_addrs",["0.0.0.0"]) @@ -25,7 +25,7 @@ tunein_station_id = getenv("TUNEIN_STATION_ID") tunein_metadata_updates_enabled = getenv("TUNEIN_METADATA_UPDATES_ENABLED") # liq_secret = getenv("LIQ_SECRET") - +# def icy_update(v) = # Parse the argument l = string.split(separator=",",v) @@ -47,8 +47,8 @@ def icy_update(v) = "Done !" end -def clear_queue() = -end +# def clear_queue() = +# end server.register("update",namespace="metadata", description="Update metadata", @@ -68,6 +68,7 @@ current_dump_filename = ref "" stop_dump_f = ref (fun () -> ()) live_dj = ref empty() +live_video_audio = ref empty() def get_user(user,password) = if user == "source" then @@ -218,14 +219,24 @@ def pub_metadata(m) = # log("desc: #{desc}"); end -hls_source = audio_to_stereo(drop_video((input.hls("https://vj.bluelighttapes.com/hls/datafruits.m3u8"):source(2,1,0)))) +live_video_audio := audio_to_stereo(drop_video((input.external.ffmpeg(show_command=true, restart_on_error=true, buffer=60.0, max=120.0, "-i http://streampusher.com:1024/dash/datafruits.mpd")))) +#live_video_audio := audio_to_stereo(drop_video((input.external.ffmpeg(show_command=true, restart_on_error=true, buffer=30.0, max=60.0, "-i http://rtmp:1024/hls/datafruits.m3u8")))) +#live_video_audio := audio_to_stereo(drop_video((input.external.ffmpeg(show_command=true, restart_on_error=true, buffer=30.0, max=60.0, "-i http://rtmp:1024/dash/datafruits.mpd")))) +#live_video_audio := audio_to_stereo(drop_video((input.external.ffmpeg(show_command=true, restart_on_error=true, buffer=30.0, max=60.0, "-i https://vj.bluelighttapes.com/hls/datafruits.m3u8")))) + +#live_video = audio_to_stereo(drop_audio(input.external.ffmpeg("https://vj.bluelighttapes.com/hls/datafruits.m3u8"))) + +#vj_video_only = drop_audio((input.external.ffmpeg("https://vj.bluelighttapes.com/hls/datafruits.m3u8"):source(2,1,0))) live_dj := map_metadata(new_meta, !live_dj,update=false) live_dj := pipe(process='./stereo_tool_cmd_64 - - -s ./stereotool.sts', buffer=10.0, !live_dj) +live_video_audio := pipe(process='./stereo_tool_cmd_64 - - -s ./stereotool.sts', buffer=10.0, !live_video_audio) source = fallback(id="fallback",track_sensitive=false, - [hls_source, !live_dj,mksafe(backup_playlist)]) + [!live_video_audio, !live_dj, mksafe(backup_playlist)]) + +#video_source = fallback([live_video, vj_video]) source = if tunein_metadata_updates_enabled == "true" then on_track(tunein.submit(partnerid=tunein_partner_id,partnerkey=tunein_partner_key,stationid=tunein_station_id), source) else source end @@ -245,3 +256,5 @@ clock.assign_new(id="mp3_icecast", [output.icecast(%mp3,id="icecast", icy_metadata="true",description="", url="", encoding="UTF-8", mksafe(buffer(source)))]) + +# output.external.ffmpeg From a9f23b1495df771aac7d0a56770bcf6244ddd151 Mon Sep 17 00:00:00 2001 From: Tony Miller Date: Fri, 5 Feb 2021 23:57:02 +0900 Subject: [PATCH 05/16] use arch linux --- liquidsoap/Dockerfile | 83 +++++++++++-------------------------------- 1 file changed, 21 insertions(+), 62 deletions(-) diff --git a/liquidsoap/Dockerfile b/liquidsoap/Dockerfile index 152bc66..81805f2 100644 --- a/liquidsoap/Dockerfile +++ b/liquidsoap/Dockerfile @@ -1,72 +1,31 @@ -FROM ubuntu:latest +FROM archlinux -RUN rm -rf /etc/apt/sources.list -RUN echo "deb mirror://mirrors.ubuntu.com/mirrors.txt bionic main restricted universe multiverse" >> /etc/apt/sources.list -RUN echo "deb mirror://mirrors.ubuntu.com/mirrors.txt bionic-updates main restricted universe multiverse" >> /etc/apt/sources.list -RUN echo "deb-src mirror://mirrors.ubuntu.com/mirrors.txt bionic-updates main restricted universe multiverse" >> /etc/apt/sources.list -RUN echo "deb mirror://mirrors.ubuntu.com/mirrors.txt bionic-backports main restricted universe multiverse" >> /etc/apt/sources.list -RUN echo "deb mirror://mirrors.ubuntu.com/mirrors.txt bionic-security main restricted universe multiverse" >> /etc/apt/sources.list +RUN yes | pacman -Sy opam make m4 gcc patch diffutils ffmpeg git automake autoconf pkg-config which taglib -RUN apt-get clean -RUN apt-get update && apt-get upgrade -y -RUN apt-get install -y software-properties-common -RUN add-apt-repository ppa:avsm/ppa -RUN apt-get update && apt-get upgrade -y +RUN useradd liquidsoap && mkdir /home/liquidsoap && chown -R liquidsoap /home/liquidsoap -# for liquidsoap -RUN apt-get install -y --allow-unauthenticated build-essential autoconf curl git ocaml ocaml-native-compilers camlp4-extra opam \ - libmad0-dev libtag1-dev libmp3lame-dev libogg-dev libvorbis-dev libfaac-dev libfaad-dev libfdk-aac-dev libflac-dev ffmpeg \ - libmagic-dev \ - pkg-config \ - wget telnet \ - mccs sudo -# for ruby -RUN apt-get install -y --force-yes libssl-dev libreadline-dev - -# jq -RUN apt-get install -y --force-yes jq - -RUN apt-get clean - -# add liquidsoap user -RUN useradd --create-home -s /bin/bash liquidsoap ;\ - adduser liquidsoap sudo -RUN echo "Defaults !requiretty" >> /etc/sudoers -RUN echo "%sudo ALL=NOPASSWD: ALL" >> /etc/sudoers -RUN echo 'eval "$(opam config env)"' >> /home/liquidsoap/.bashrc - -RUN touch /var/log/liquidsoap.log -RUN chown liquidsoap:users /var/log/liquidsoap.log - -RUN apt-get install -y libpcre3-dev -RUN apt-get install -y gdb +ENV HOME=/home/liquidsoap USER liquidsoap -RUN opam init -y --disable-sandboxing --solver=mccs -RUN opam switch create new 4.08.0 -RUN opam update -y -RUN opam install depext -y -RUN eval `opam config env` -RUN sudo opam depext taglib mad lame ogg vorbis cry samplerate ffmpeg gavl gstreamer liquidsoap -y -RUN opam install taglib mad lame ogg vorbis cry samplerate ffmpeg gavl gstreamer liquidsoap -y -RUN eval `opam config env` && liquidsoap --version +RUN opam init --disable-sandboxing --yes -#RUN ["/bin/bash", "-c", "ls -lha ~"] -# RUN cd /home/liquidsoap; git clone https://github.com/savonet/liquidsoap-full -# ADD PACKAGES /home/liquidsoap/liquidsoap-full/PACKAGES -# RUN ["/bin/bash", "-c", "cd /home/liquidsoap/liquidsoap-full/; git rev-parse HEAD;"] -# RUN ["/bin/bash", "-c", "cd /home/liquidsoap/liquidsoap-full/; make init && make update;"] -# RUN ["/bin/bash", "-c", "cd /home/liquidsoap/liquidsoap-full/liquidsoap; git rev-parse HEAD;"] -#RUN ["/bin/bash", "-c", "cd /home/liquidsoap/liquidsoap-full/ocaml-mm; git rev-parse HEAD;"] -#RUN ["/bin/bash", "-c", "cd /home/liquidsoap/liquidsoap-full/ocaml-mm; eval `opam config env`; opam pin add . -y;"] -#ADD protocols.liq /home/liquidsoap/liquidsoap-full/liquidsoap/libs/protocols.liq -#RUN ["/bin/bash", "-c", "cd /home/liquidsoap/liquidsoap-full/liquidsoap; eval `opam config env`; opam pin add . -y;"] -# RUN ["/bin/bash", "-c", "cd /home/liquidsoap/liquidsoap-full; ./bootstrap;"] -# #RUN ["/bin/bash", "-c", "cd /home/liquidsoap/liquidsoap-full; ls -lha; cat configure"] -# RUN ["/bin/bash", "-c", "cd /home/liquidsoap/liquidsoap-full; eval `opam config env`; ./configure;"] -# RUN ["/bin/bash", "-c", "cd /home/liquidsoap/liquidsoap-full; eval `opam config env`; make;"] -# RUN ["/bin/bash", "-c", "cd /home/liquidsoap/liquidsoap-full; eval `opam config env`; sudo make install"] +WORKDIR /home/liquidsoap + +# add liquidsoap user +#RUN useradd --create-home -s /bin/bash liquidsoap +# usermod -a -G sudo liquidsoap +# RUN echo "Defaults !requiretty" >> /etc/sudoers +# RUN echo "%sudo ALL=NOPASSWD: ALL" >> /etc/sudoers +#RUN echo 'eval "$(opam config env)"' >> /home/liquidsoap/.bashrc + +#RUN touch /var/log/liquidsoap.log +#RUN chown liquidsoap:users /var/log/liquidsoap.log + +RUN for i in ocaml-ffmpeg ocaml-dtools ocaml-duppy ocaml-mm ocaml-cry ocaml-taglib liquidsoap; do \ + cd /home/liquidsoap && git clone https://github.com/savonet/$i && cd $i && opam pin add --yes --no-action .; \ + done +RUN opam install --yes liquidsoap ffmpeg cry taglib RUN mkdir /home/liquidsoap/radio ADD ./ /home/liquidsoap/radio/ From 5f6a4ae07cf1b24b290e0e0b4a0f409d817d0fb8 Mon Sep 17 00:00:00 2001 From: Tony Miller Date: Tue, 9 Feb 2021 12:05:23 +0900 Subject: [PATCH 06/16] fix dockerfile --- liquidsoap/Dockerfile | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/liquidsoap/Dockerfile b/liquidsoap/Dockerfile index 81805f2..a85b73f 100644 --- a/liquidsoap/Dockerfile +++ b/liquidsoap/Dockerfile @@ -1,8 +1,11 @@ FROM archlinux -RUN yes | pacman -Sy opam make m4 gcc patch diffutils ffmpeg git automake autoconf pkg-config which taglib +RUN yes | pacman -Sy opam make m4 gcc patch diffutils ffmpeg git automake autoconf pkg-config which taglib sudo glibc jq RUN useradd liquidsoap && mkdir /home/liquidsoap && chown -R liquidsoap /home/liquidsoap +RUN usermod -aG wheel liquidsoap +RUN echo "Defaults !requiretty" >> /etc/sudoers +RUN echo "%wheel ALL=NOPASSWD: ALL" >> /etc/sudoers ENV HOME=/home/liquidsoap @@ -19,13 +22,17 @@ WORKDIR /home/liquidsoap # RUN echo "%sudo ALL=NOPASSWD: ALL" >> /etc/sudoers #RUN echo 'eval "$(opam config env)"' >> /home/liquidsoap/.bashrc -#RUN touch /var/log/liquidsoap.log -#RUN chown liquidsoap:users /var/log/liquidsoap.log - -RUN for i in ocaml-ffmpeg ocaml-dtools ocaml-duppy ocaml-mm ocaml-cry ocaml-taglib liquidsoap; do \ - cd /home/liquidsoap && git clone https://github.com/savonet/$i && cd $i && opam pin add --yes --no-action .; \ - done -RUN opam install --yes liquidsoap ffmpeg cry taglib +RUN sudo touch /var/log/liquidsoap.log +RUN sudo chown liquidsoap:users /var/log/liquidsoap.log + +RUN opam install depext -y +RUN opam depext taglib mad lame ogg vorbis cry samplerate liquidsoap -y +RUN opam install taglib mad lame ogg vorbis cry samplerate liquidsoap -y +# RUN for i in ocaml-ffmpeg ocaml-dtools ocaml-duppy ocaml-mm ocaml-cry ocaml-taglib ocaml-lame ocaml-ogg ocaml-vorbis ocaml-samplerate liquidsoap; do \ +# cd /home/liquidsoap && git clone https://github.com/savonet/$i && cd $i && opam pin add --yes --no-action .; \ +# done +# RUN opam install --yes liquidsoap ffmpeg cry taglib lame ogg vorbis samplerate +RUN eval `opam config env`;liquidsoap --version RUN mkdir /home/liquidsoap/radio ADD ./ /home/liquidsoap/radio/ From 24c868d0fcc66a5eb97c08e01c2f17d09bc75c1f Mon Sep 17 00:00:00 2001 From: Tony Miller Date: Sat, 20 Feb 2021 10:02:36 +0900 Subject: [PATCH 07/16] video fallback --- liquidsoap/Dockerfile | 7 +++++-- liquidsoap/radio.liq | 38 ++++++++++++++++++++++---------------- 2 files changed, 27 insertions(+), 18 deletions(-) diff --git a/liquidsoap/Dockerfile b/liquidsoap/Dockerfile index a85b73f..5e75361 100644 --- a/liquidsoap/Dockerfile +++ b/liquidsoap/Dockerfile @@ -26,8 +26,8 @@ RUN sudo touch /var/log/liquidsoap.log RUN sudo chown liquidsoap:users /var/log/liquidsoap.log RUN opam install depext -y -RUN opam depext taglib mad lame ogg vorbis cry samplerate liquidsoap -y -RUN opam install taglib mad lame ogg vorbis cry samplerate liquidsoap -y +RUN opam depext gavl ffmpeg taglib mad lame ogg vorbis cry samplerate liquidsoap -y +RUN opam install gavl ffmpeg taglib mad lame ogg vorbis cry samplerate liquidsoap -y # RUN for i in ocaml-ffmpeg ocaml-dtools ocaml-duppy ocaml-mm ocaml-cry ocaml-taglib ocaml-lame ocaml-ogg ocaml-vorbis ocaml-samplerate liquidsoap; do \ # cd /home/liquidsoap && git clone https://github.com/savonet/$i && cd $i && opam pin add --yes --no-action .; \ # done @@ -40,10 +40,13 @@ RUN mkdir /home/liquidsoap/tracks RUN chown liquidsoap:liquidsoap /home/liquidsoap/tracks RUN mkdir /home/liquidsoap/recordings RUN chown liquidsoap:liquidsoap /home/liquidsoap/recordings +RUN mkdir /home/liquidsoap/hls +RUN chown liquidsoap:liquidsoap /home/liquidsoap/hls WORKDIR /home/liquidsoap/radio RUN chown 1000:1000 /home/liquidsoap/tracks RUN chown 1000:1000 /home/liquidsoap/recordings +RUN chown 1000:1000 /home/liquidsoap/hls EXPOSE 9000 CMD ["/bin/bash", "-c", "eval `opam config env` && liquidsoap radio.liq"] diff --git a/liquidsoap/radio.liq b/liquidsoap/radio.liq index c7a40ce..5fa12f6 100755 --- a/liquidsoap/radio.liq +++ b/liquidsoap/radio.liq @@ -5,11 +5,11 @@ set("log.file",true) set("log.file.path","/var/log/liquidsoap.log") set("log.stdout",true) -set("log.level",5) +set("log.level",3) -#set("server.telnet",true) -#set("server.socket",true) -#set("server.socket.path","/home/liquidsoap/tracks/liquidsoap.sock") +set("server.telnet",true) +set("server.socket",true) +set("server.socket.path","/home/liquidsoap/tracks/liquidsoap.sock") set("harbor.bind_addrs",["0.0.0.0"]) @@ -69,6 +69,8 @@ stop_dump_f = ref (fun () -> ()) live_dj = ref empty() live_video_audio = ref empty() +live_video = ref empty() +vj_video = ref empty() def get_user(user,password) = if user == "source" then @@ -136,7 +138,7 @@ def my_request_function () = end end -backup_playlist = cue_cut(audio_to_stereo(request.dynamic(id="requests", timeout=60.0, my_request_function))) +backup_playlist = audio_to_stereo(request.dynamic(id="requests", timeout=60.0, my_request_function)) def format_time(~sec,~min,~hour,~mday,~mon,~year, ~wday,~yday,~isdst) = @@ -219,24 +221,25 @@ def pub_metadata(m) = # log("desc: #{desc}"); end -live_video_audio := audio_to_stereo(drop_video((input.external.ffmpeg(show_command=true, restart_on_error=true, buffer=60.0, max=120.0, "-i http://streampusher.com:1024/dash/datafruits.mpd")))) -#live_video_audio := audio_to_stereo(drop_video((input.external.ffmpeg(show_command=true, restart_on_error=true, buffer=30.0, max=60.0, "-i http://rtmp:1024/hls/datafruits.m3u8")))) -#live_video_audio := audio_to_stereo(drop_video((input.external.ffmpeg(show_command=true, restart_on_error=true, buffer=30.0, max=60.0, "-i http://rtmp:1024/dash/datafruits.mpd")))) -#live_video_audio := audio_to_stereo(drop_video((input.external.ffmpeg(show_command=true, restart_on_error=true, buffer=30.0, max=60.0, "-i https://vj.bluelighttapes.com/hls/datafruits.m3u8")))) +live_video := input.external.ffmpeg(show_command=true, restart_on_error=true, buffer=60.0, max=120.0, "-i https://viz.streampusher.com:16666/hls/datafruits.m3u8") +vj_video := input.external.ffmpeg(show_command=true, restart_on_error=true, buffer=60.0, max=120.0, "-i https://viz.streampusher.com:16666/vj/datafruits.m3u8") -#live_video = audio_to_stereo(drop_audio(input.external.ffmpeg("https://vj.bluelighttapes.com/hls/datafruits.m3u8"))) - -#vj_video_only = drop_audio((input.external.ffmpeg("https://vj.bluelighttapes.com/hls/datafruits.m3u8"):source(2,1,0))) +live_video_audio := audio_to_stereo(drop_video(!live_video)) live_dj := map_metadata(new_meta, !live_dj,update=false) -live_dj := pipe(process='./stereo_tool_cmd_64 - - -s ./stereotool.sts', buffer=10.0, !live_dj) -live_video_audio := pipe(process='./stereo_tool_cmd_64 - - -s ./stereotool.sts', buffer=10.0, !live_video_audio) +live_audio = fallback(id="live_audio_fallback", track_sensitive=false, [!live_video_audio, !live_dj]) +live_audio = pipe(process='./stereo_tool_cmd_64 - - -s ./stereotool.sts', buffer=10.0, live_audio) source = fallback(id="fallback",track_sensitive=false, [!live_video_audio, !live_dj, mksafe(backup_playlist)]) -#video_source = fallback([live_video, vj_video]) +single_video = noise() + +video_source = fallback(id="video_fallback",track_sensitive=false, + [!live_video, + mux_audio(drop_audio(!vj_video), audio=source), + mux_audio(single_video, audio=source)]) source = if tunein_metadata_updates_enabled == "true" then on_track(tunein.submit(partnerid=tunein_partner_id,partnerkey=tunein_partner_key,stationid=tunein_station_id), source) else source end @@ -257,4 +260,7 @@ clock.assign_new(id="mp3_icecast", [output.icecast(%mp3,id="icecast", url="", encoding="UTF-8", mksafe(buffer(source)))]) -# output.external.ffmpeg +output.file.hls.ffmpeg(playlist="#{radio_name}.m3u8", + directory="/home/liquidsoap/hls", + fallible=true, + video_source) From 345aaf8beb3aae53d7cb1a293ea17641cbf7b112 Mon Sep 17 00:00:00 2001 From: Tony Miller Date: Mon, 10 May 2021 22:04:02 +0900 Subject: [PATCH 08/16] try liquidsoap 2.0 --- liquidsoap/Dockerfile | 16 ++++++-- liquidsoap/radio.liq | 94 ++++++++++++++++++++++++++++++------------- 2 files changed, 79 insertions(+), 31 deletions(-) diff --git a/liquidsoap/Dockerfile b/liquidsoap/Dockerfile index 5e75361..22a6331 100644 --- a/liquidsoap/Dockerfile +++ b/liquidsoap/Dockerfile @@ -25,13 +25,23 @@ WORKDIR /home/liquidsoap RUN sudo touch /var/log/liquidsoap.log RUN sudo chown liquidsoap:users /var/log/liquidsoap.log -RUN opam install depext -y -RUN opam depext gavl ffmpeg taglib mad lame ogg vorbis cry samplerate liquidsoap -y -RUN opam install gavl ffmpeg taglib mad lame ogg vorbis cry samplerate liquidsoap -y +#RUN opam install depext -y +#RUN opam depext gavl ffmpeg taglib mad lame ogg vorbis cry samplerate liquidsoap -y +#RUN opam install gavl ffmpeg taglib mad lame ogg vorbis cry samplerate liquidsoap -y # RUN for i in ocaml-ffmpeg ocaml-dtools ocaml-duppy ocaml-mm ocaml-cry ocaml-taglib ocaml-lame ocaml-ogg ocaml-vorbis ocaml-samplerate liquidsoap; do \ # cd /home/liquidsoap && git clone https://github.com/savonet/$i && cd $i && opam pin add --yes --no-action .; \ # done # RUN opam install --yes liquidsoap ffmpeg cry taglib lame ogg vorbis samplerate +# RUN opam install depext -y +# RUN opam depext taglib mad lame ogg vorbis cry samplerate liquidsoap -y +# RUN opam install taglib mad lame ogg vorbis cry samplerate liquidsoap -y + +RUN for i in ocaml-gavl ocaml-ffmpeg ocaml-dtools ocaml-duppy ocaml-mm ocaml-cry ocaml-taglib ocaml-lame ocaml-ogg ocaml-vorbis ocaml-samplerate; do \ + cd /home/liquidsoap && git clone https://github.com/savonet/$i && cd $i && opam pin add --yes --no-action .; \ +done +RUN cd /home/liquidsoap && git clone https://github.com/savonet/liquidsoap && cd liquidsoap && git checkout v2.0.0-alpha1 && opam pin add --yes --no-action . +RUN opam install --yes liquidsoap ffmpeg cry taglib lame ogg vorbis samplerate + RUN eval `opam config env`;liquidsoap --version RUN mkdir /home/liquidsoap/radio diff --git a/liquidsoap/radio.liq b/liquidsoap/radio.liq index bd180ea..4e8c361 100755 --- a/liquidsoap/radio.liq +++ b/liquidsoap/radio.liq @@ -1,5 +1,5 @@ #!/usr/local/bin/liquidsoap -%include "tunein.liq" +# %include "tunein.liq" #set("sandbox.tool","disabled") set("log.file",true) @@ -19,10 +19,10 @@ icecast_host = "icecast" icecast_port = "8000" crossfade_enabled = getenv("CROSSFADE") -tunein_partner_id = getenv("TUNEIN_PARTNER_ID") -tunein_partner_key = getenv("TUNEIN_PARTNER_KEY") -tunein_station_id = getenv("TUNEIN_STATION_ID") -tunein_metadata_updates_enabled = getenv("TUNEIN_METADATA_UPDATES_ENABLED") +# tunein_partner_id = getenv("TUNEIN_PARTNER_ID") +# tunein_partner_key = getenv("TUNEIN_PARTNER_KEY") +# tunein_station_id = getenv("TUNEIN_STATION_ID") +# tunein_metadata_updates_enabled = getenv("TUNEIN_METADATA_UPDATES_ENABLED") # liq_secret = getenv("LIQ_SECRET") # @@ -57,20 +57,20 @@ server.register("update",namespace="metadata", # refs -title_prefix = ref "" +title_prefix = ref("") -current_dj = ref "" -last_dj_disconnected = ref "" -current_dj_connected_at = ref 0.0 -last_dj_disconnected_at = ref 0.0 -current_dump_filename = ref "" +current_dj = ref("") +last_dj_disconnected = ref("") +current_dj_connected_at = ref(0.0) +last_dj_disconnected_at = ref(0.0) +current_dump_filename = ref("") -stop_dump_f = ref (fun () -> ()) +stop_dump_f = ref(fun () -> ()) -live_dj = ref empty() -live_video_audio = ref empty() -live_video = ref empty() -vj_video = ref empty() +live_dj = ref(empty()) +live_video_audio = ref(empty()) +live_video = ref(empty()) +vj_video = ref(empty()) def dj_dummy_started() = log("dj dummy on_start") @@ -115,7 +115,7 @@ def dj_auth(user,password) = if ret == "true" then title_prefix := "LIVE -- #{u}" current_dj := "#{u}" - current_dj_connected_at := gettimeofday() + current_dj_connected_at := time() log("dj auth succeeded") log("#{current_dj}") log("#{current_dj_connected_at}") @@ -164,7 +164,7 @@ def on_connect(headers) = log("last_dj_disconnected_at: #{!last_dj_disconnected_at}") if (!last_dj_disconnected_at == 0.0) then log("*****************************************CREATING NEW DUMP, last_dj_disconnected_at is null***************************************************") - current_dump_filename := "#{!current_dj}-#{localtime(!current_dj_connected_at, format_time)}" + current_dump_filename := "#{!current_dj}-#{time.local(!current_dj_connected_at)}" log("new dump filename (first dump):") log(!current_dump_filename); log("sending live notification") @@ -173,7 +173,7 @@ def on_connect(headers) = log(ret) elsif (((!current_dj_connected_at - !last_dj_disconnected_at) > 60.0) or (!current_dj != !last_dj_disconnected)) then log("*****************************************CREATING NEW DUMP***************************************************") - current_dump_filename := "#{!current_dj}-#{localtime(!current_dj_connected_at, format_time)}" + current_dump_filename := "#{!current_dj}-#{time.local(!current_dj_connected_at)}" log("new dump filename:") log(!current_dump_filename); log("sending live notification") @@ -233,15 +233,15 @@ def pub_metadata(m) = # log("desc: #{desc}"); end -live_video := input.external.ffmpeg(show_command=true, restart_on_error=true, buffer=60.0, max=120.0, "-i https://viz.streampusher.com:16666/hls/datafruits.m3u8") -vj_video := input.external.ffmpeg(show_command=true, restart_on_error=true, buffer=60.0, max=120.0, "-i https://viz.streampusher.com:16666/vj/datafruits.m3u8") +live_video := input.ffmpeg(fallible=true, buffer=60.0, "https://viz.streampusher.com:16666/hls/datafruits.m3u8") +vj_video := input.ffmpeg(fallible=true, buffer=60.0, "https://viz.streampusher.com:16666/vj/datafruits.m3u8") live_video_audio := audio_to_stereo(drop_video(!live_video)) live_dj := map_metadata(new_meta, !live_dj,update=false) -live_audio = fallback(id="live_audio_fallback", track_sensitive=false, [!live_video_audio, !live_dj]) -live_audio = pipe(process='./stereo_tool_cmd_64 - - -s ./stereotool.sts', buffer=10.0, live_audio) +# live_audio = fallback(id="live_audio_fallback", track_sensitive=false, [!live_video_audio, !live_dj]) +# live_audio = pipe(process='./stereo_tool_cmd_64 - - -s ./stereotool.sts', buffer=10.0, live_audio) output.dummy(fallible=true, on_start=dj_dummy_started, on_stop=dj_dummy_stopped, !live_dj) @@ -255,9 +255,9 @@ video_source = fallback(id="video_fallback",track_sensitive=false, mux_audio(drop_audio(!vj_video), audio=source), mux_audio(single_video, audio=source)]) -source = if tunein_metadata_updates_enabled == "true" then on_track(tunein.submit(partnerid=tunein_partner_id,partnerkey=tunein_partner_key,stationid=tunein_station_id), source) else source end +#source = if tunein_metadata_updates_enabled == "true" then on_track(tunein.submit(partnerid=tunein_partner_id,partnerkey=tunein_partner_key,stationid=tunein_station_id), source) else source end -source = on_track(pub_metadata, source) +source.on_track(pub_metadata) source = server.insert_metadata(id="fallback", source) @@ -274,7 +274,45 @@ clock.assign_new(id="mp3_icecast", [output.icecast(%mp3,id="icecast", url="", encoding="UTF-8", mksafe(buffer(source)))]) -output.file.hls.ffmpeg(playlist="#{radio_name}.m3u8", - directory="/home/liquidsoap/hls", - fallible=true, +aac_lofi = %ffmpeg(format="mpegts", + %audio( + codec="aac", + channels=2, + ar=44100 + )) + +aac_midfi = %ffmpeg(format="mpegts", + %audio( + codec="aac", + channels=2, + ar=44100, + b="96k" + )) + +aac_hifi = %ffmpeg(format="mpegts", + %audio( + codec="aac", + channels=2, + ar=44100, + b="192k" + )) + +streams = [("aac_lofi",aac_lofi), + ("aac_midfi", aac_midfi), + ("aac_hifi", aac_hifi)] + +def segment_name(~position,~extname,stream_name) = + timestamp = int_of_float(gettimeofday()) + duration = 2 + "#{stream_name}_#{duration}_#{timestamp}_#{position}.#{extname}" +end + +output.file.hls(playlist="#{radio_name}.m3u8", + segment_duration=2.0, + segments=5, + segments_overhead=5, + segment_name=segment_name, + persist_at="/home/liquidsoap/state.config", + "/home/liquidsoap/hls", + streams, video_source) From 2414c8f9eb9e3b78617bf6c75a4273fa86f2b97f Mon Sep 17 00:00:00 2001 From: Tony Miller Date: Mon, 10 May 2021 22:14:35 +0900 Subject: [PATCH 09/16] make video source infallible --- liquidsoap/radio.liq | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/liquidsoap/radio.liq b/liquidsoap/radio.liq index 4e8c361..d56656f 100755 --- a/liquidsoap/radio.liq +++ b/liquidsoap/radio.liq @@ -253,7 +253,7 @@ single_video = noise() video_source = fallback(id="video_fallback",track_sensitive=false, [!live_video, mux_audio(drop_audio(!vj_video), audio=source), - mux_audio(single_video, audio=source)]) + mksafe(mux_audio(single_video, audio=source))]) #source = if tunein_metadata_updates_enabled == "true" then on_track(tunein.submit(partnerid=tunein_partner_id,partnerkey=tunein_partner_key,stationid=tunein_station_id), source) else source end From eabe17b9e0fe5936e3a101c76f52843f6ca876d1 Mon Sep 17 00:00:00 2001 From: Tony Miller Date: Tue, 11 May 2021 10:06:00 +0900 Subject: [PATCH 10/16] add video output for hls --- liquidsoap/radio.liq | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/liquidsoap/radio.liq b/liquidsoap/radio.liq index d56656f..f01a3cc 100755 --- a/liquidsoap/radio.liq +++ b/liquidsoap/radio.liq @@ -233,8 +233,8 @@ def pub_metadata(m) = # log("desc: #{desc}"); end -live_video := input.ffmpeg(fallible=true, buffer=60.0, "https://viz.streampusher.com:16666/hls/datafruits.m3u8") -vj_video := input.ffmpeg(fallible=true, buffer=60.0, "https://viz.streampusher.com:16666/vj/datafruits.m3u8") +live_video := input.ffmpeg(id="main_video", fallible=true, buffer=60.0, "https://viz.streampusher.com:16666/hls/datafruits.m3u8") +vj_video := input.ffmpeg(id="vj_video", fallible=true, buffer=60.0, "https://viz.streampusher.com:16666/vj/datafruits.m3u8") live_video_audio := audio_to_stereo(drop_video(!live_video)) @@ -279,7 +279,12 @@ aac_lofi = %ffmpeg(format="mpegts", codec="aac", channels=2, ar=44100 - )) + ), + %video( + codec="libx264", + b="5M" + ) + ) aac_midfi = %ffmpeg(format="mpegts", %audio( @@ -287,7 +292,12 @@ aac_midfi = %ffmpeg(format="mpegts", channels=2, ar=44100, b="96k" - )) + ), + %video( + codec="libx264", + b="5M" + ) + ) aac_hifi = %ffmpeg(format="mpegts", %audio( @@ -295,14 +305,19 @@ aac_hifi = %ffmpeg(format="mpegts", channels=2, ar=44100, b="192k" - )) + ), + %video( + codec="libx264", + b="5M" + ) + ) streams = [("aac_lofi",aac_lofi), ("aac_midfi", aac_midfi), ("aac_hifi", aac_hifi)] def segment_name(~position,~extname,stream_name) = - timestamp = int_of_float(gettimeofday()) + timestamp = int_of_float(time()) duration = 2 "#{stream_name}_#{duration}_#{timestamp}_#{position}.#{extname}" end From 6eee722b20824ed86fb8d92d36b82f14125d53a9 Mon Sep 17 00:00:00 2001 From: Tony Miller Date: Wed, 12 May 2021 20:13:32 +0900 Subject: [PATCH 11/16] use master branch --- liquidsoap/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/liquidsoap/Dockerfile b/liquidsoap/Dockerfile index 22a6331..a5d35cf 100644 --- a/liquidsoap/Dockerfile +++ b/liquidsoap/Dockerfile @@ -39,7 +39,7 @@ RUN sudo chown liquidsoap:users /var/log/liquidsoap.log RUN for i in ocaml-gavl ocaml-ffmpeg ocaml-dtools ocaml-duppy ocaml-mm ocaml-cry ocaml-taglib ocaml-lame ocaml-ogg ocaml-vorbis ocaml-samplerate; do \ cd /home/liquidsoap && git clone https://github.com/savonet/$i && cd $i && opam pin add --yes --no-action .; \ done -RUN cd /home/liquidsoap && git clone https://github.com/savonet/liquidsoap && cd liquidsoap && git checkout v2.0.0-alpha1 && opam pin add --yes --no-action . +RUN cd /home/liquidsoap && git clone https://github.com/savonet/liquidsoap && cd liquidsoap && opam pin add --yes --no-action . RUN opam install --yes liquidsoap ffmpeg cry taglib lame ogg vorbis samplerate RUN eval `opam config env`;liquidsoap --version From 9298a47b0d256c1ef487c16f5e00d73bf1693cd5 Mon Sep 17 00:00:00 2001 From: Tony Miller Date: Wed, 12 May 2021 20:13:48 +0900 Subject: [PATCH 12/16] convert to process.read.lines --- liquidsoap/radio.liq | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/liquidsoap/radio.liq b/liquidsoap/radio.liq index f01a3cc..ec2f711 100755 --- a/liquidsoap/radio.liq +++ b/liquidsoap/radio.liq @@ -104,11 +104,11 @@ def get_password(user,password) = end #auth function -def dj_auth(user,password) = +def dj_auth(user,password,address) = log("dj auth") u = get_user(user,password) p = get_password(user,password) - ret = get_process_lines("./dj_auth.sh '#{u}' '#{p}' '#{radio_name}'") + ret = process.read.lines("./dj_auth.sh '#{u}' '#{p}' '#{radio_name}'") #ret has now the value of the live client (dj1,dj2, or djx), or "ERROR"/"unknown" ret = list.hd(default="",ret) #return true to let the client transmit data, or false to tell harbor to decline @@ -127,7 +127,7 @@ end def my_request_function () = - lines = get_process_lines("./next_song.sh") + lines = process.read.lines("./next_song.sh") result = list.hd(default="", lines) log("result: #{result}") log("lines: #{lines}") @@ -168,7 +168,7 @@ def on_connect(headers) = log("new dump filename (first dump):") log(!current_dump_filename); log("sending live notification") - ret = get_process_lines("./live_notification.sh 'LIVE - #{!current_dj}'") + ret = process.read.lines("./live_notification.sh 'LIVE - #{!current_dj}'") ret = list.hd(default="",ret) log(ret) elsif (((!current_dj_connected_at - !last_dj_disconnected_at) > 60.0) or (!current_dj != !last_dj_disconnected)) then @@ -177,7 +177,7 @@ def on_connect(headers) = log("new dump filename:") log(!current_dump_filename); log("sending live notification") - ret = get_process_lines("./live_notification.sh 'LIVE - #{!current_dj}'") + ret = process.read.lines("./live_notification.sh 'LIVE - #{!current_dj}'") ret = list.hd(default="",ret) log(ret) else @@ -217,7 +217,7 @@ end def pub_metadata(m) = log("on_track"); title = m["title"] - ret = get_process_lines("./pub_metadata.sh '#{title}'") + ret = process.read.lines("./pub_metadata.sh '#{title}'") ret = list.hd(default="",ret) log(ret) #url = "https://#{radio_name}.streampusher.com/publish_metadata.json" From 51a2d0fc96eeeb4ba85b0abfe610d008bc3e0abb Mon Sep 17 00:00:00 2001 From: Tony Miller Date: Tue, 18 May 2021 10:01:33 +0900 Subject: [PATCH 13/16] use new syntax for harbor auth --- liquidsoap/radio.liq | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/liquidsoap/radio.liq b/liquidsoap/radio.liq index ec2f711..47db937 100755 --- a/liquidsoap/radio.liq +++ b/liquidsoap/radio.liq @@ -104,10 +104,10 @@ def get_password(user,password) = end #auth function -def dj_auth(user,password,address) = +def dj_auth(args) = log("dj auth") - u = get_user(user,password) - p = get_password(user,password) + u = get_user(args.user, args.password) + p = get_password(args.user, args.password) ret = process.read.lines("./dj_auth.sh '#{u}' '#{p}' '#{radio_name}'") #ret has now the value of the live client (dj1,dj2, or djx), or "ERROR"/"unknown" ret = list.hd(default="",ret) From 909c58f36ccd9687ee532c5d54aaf55352716c6c Mon Sep 17 00:00:00 2001 From: Tony Miller Date: Tue, 18 May 2021 10:01:58 +0900 Subject: [PATCH 14/16] install more pkgs --- liquidsoap/Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/liquidsoap/Dockerfile b/liquidsoap/Dockerfile index a5d35cf..172b8cc 100644 --- a/liquidsoap/Dockerfile +++ b/liquidsoap/Dockerfile @@ -36,11 +36,11 @@ RUN sudo chown liquidsoap:users /var/log/liquidsoap.log # RUN opam depext taglib mad lame ogg vorbis cry samplerate liquidsoap -y # RUN opam install taglib mad lame ogg vorbis cry samplerate liquidsoap -y -RUN for i in ocaml-gavl ocaml-ffmpeg ocaml-dtools ocaml-duppy ocaml-mm ocaml-cry ocaml-taglib ocaml-lame ocaml-ogg ocaml-vorbis ocaml-samplerate; do \ +RUN for i in ocaml-gavl ocaml-ffmpeg ocaml-dtools ocaml-duppy ocaml-mm ocaml-cry ocaml-taglib ocaml-lame ocaml-mad ocaml-ogg ocaml-vorbis ocaml-samplerate; do \ cd /home/liquidsoap && git clone https://github.com/savonet/$i && cd $i && opam pin add --yes --no-action .; \ done RUN cd /home/liquidsoap && git clone https://github.com/savonet/liquidsoap && cd liquidsoap && opam pin add --yes --no-action . -RUN opam install --yes liquidsoap ffmpeg cry taglib lame ogg vorbis samplerate +RUN opam install --yes liquidsoap ffmpeg cry taglib lame mad ogg vorbis samplerate RUN eval `opam config env`;liquidsoap --version From 3993135025667f7018692ba31035bd9986fd358b Mon Sep 17 00:00:00 2001 From: Tony Miller Date: Sun, 18 Jul 2021 13:10:03 -0700 Subject: [PATCH 15/16] try 2.0.0-beta2 tag --- liquidsoap/Dockerfile | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/liquidsoap/Dockerfile b/liquidsoap/Dockerfile index 172b8cc..8635c20 100644 --- a/liquidsoap/Dockerfile +++ b/liquidsoap/Dockerfile @@ -1,6 +1,7 @@ FROM archlinux -RUN yes | pacman -Sy opam make m4 gcc patch diffutils ffmpeg git automake autoconf pkg-config which taglib sudo glibc jq +RUN yes | pacman -Sy opam make m4 gcc patch diffutils ffmpeg git automake autoconf pkg-config which taglib sudo glibc jq libmad +RUN yes | pacman -Syu RUN useradd liquidsoap && mkdir /home/liquidsoap && chown -R liquidsoap /home/liquidsoap RUN usermod -aG wheel liquidsoap @@ -39,7 +40,7 @@ RUN sudo chown liquidsoap:users /var/log/liquidsoap.log RUN for i in ocaml-gavl ocaml-ffmpeg ocaml-dtools ocaml-duppy ocaml-mm ocaml-cry ocaml-taglib ocaml-lame ocaml-mad ocaml-ogg ocaml-vorbis ocaml-samplerate; do \ cd /home/liquidsoap && git clone https://github.com/savonet/$i && cd $i && opam pin add --yes --no-action .; \ done -RUN cd /home/liquidsoap && git clone https://github.com/savonet/liquidsoap && cd liquidsoap && opam pin add --yes --no-action . +RUN cd /home/liquidsoap && git clone https://github.com/savonet/liquidsoap && cd liquidsoap && git checkout v2.0.0-beta2 && opam pin add --yes --no-action . RUN opam install --yes liquidsoap ffmpeg cry taglib lame mad ogg vorbis samplerate RUN eval `opam config env`;liquidsoap --version From a3f8cfd45288b93e9a147ea3c03986d1b5681819 Mon Sep 17 00:00:00 2001 From: Tony Miller Date: Sun, 18 Jul 2021 14:16:28 -0700 Subject: [PATCH 16/16] use main branch --- liquidsoap/Dockerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/liquidsoap/Dockerfile b/liquidsoap/Dockerfile index 8635c20..828cc4c 100644 --- a/liquidsoap/Dockerfile +++ b/liquidsoap/Dockerfile @@ -40,7 +40,8 @@ RUN sudo chown liquidsoap:users /var/log/liquidsoap.log RUN for i in ocaml-gavl ocaml-ffmpeg ocaml-dtools ocaml-duppy ocaml-mm ocaml-cry ocaml-taglib ocaml-lame ocaml-mad ocaml-ogg ocaml-vorbis ocaml-samplerate; do \ cd /home/liquidsoap && git clone https://github.com/savonet/$i && cd $i && opam pin add --yes --no-action .; \ done -RUN cd /home/liquidsoap && git clone https://github.com/savonet/liquidsoap && cd liquidsoap && git checkout v2.0.0-beta2 && opam pin add --yes --no-action . +#RUN cd /home/liquidsoap && git clone https://github.com/savonet/liquidsoap && cd liquidsoap && git checkout v2.0.0-beta2 && opam pin add --yes --no-action . +RUN cd /home/liquidsoap && git clone https://github.com/savonet/liquidsoap && cd liquidsoap && opam pin add --yes --no-action . RUN opam install --yes liquidsoap ffmpeg cry taglib lame mad ogg vorbis samplerate RUN eval `opam config env`;liquidsoap --version