Closed Moonbase59 closed 1 year ago
I tried to reproduce but could not unfortunately... And I don't see much suspicous in the logs.
@smimram Anything else I could try to help diagnosing? A newer .deb
isn’t available.
@Moonbase59 you could try to get a gdb
stacktrace:
gdb /path/to/liquidsoap
> r <options>
... crash
> thread apply all bt
@toots Good hint, thanks. For completeness, here are both the script and the gdb output:
Liquidsoap dcf405ff4 image crash.zip
To be honest, I found this problem by accidentally moving an image into the videos playlist folder. But such things might happen to users in real life, and we wouldn’t want a complete AzuraCast station to fail just because a user accidentally copied an image file into the wrong folder…
Thinking about it, this could actually turn out to be a nice feature for notes or advertisements, if we had sensible defaults, i.e. an image as a single()
should have a default duration of "endless" (as it is now), but an image in a playlist()
should have an automatic default of, say, 5 or 15 seconds (settable?).
I didn’t dare setting a playlist duration annotation on this watched folder playlist, since I think that might influence the videos.
Looking at the gdb output, what bugs me a little is
Thread 15 "liquidsoap" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fff9943b640 (LWP 1766330)]
0x00007ffff660dcfb in av_freep () from /lib/x86_64-linux-gnu/libavutil.so.56
and my ffmpeg
warning WARNING: library configuration mismatch
:
ffmpeg version 4.4.2-0ubuntu0.22.04.1 Copyright (c) 2000-2021 the FFmpeg developers
built with gcc 11 (Ubuntu 11.2.0-19ubuntu1)
configuration: --prefix=/usr --extra-version=0ubuntu0.22.04.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-pocketsphinx --enable-librsvg --enable-libmfx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared
WARNING: library configuration mismatch
avcodec configuration: --prefix=/usr --extra-version=0ubuntu0.22.04.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-pocketsphinx --enable-librsvg --enable-libmfx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared --enable-version3 --disable-doc --disable-programs --enable-libaribb24 --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libtesseract --enable-libvo_amrwbenc --enable-libsmbclient
libavutil 56. 70.100 / 56. 70.100
libavcodec 58.134.100 / 58.134.100
libavformat 58. 76.100 / 58. 76.100
libavdevice 58. 13.100 / 58. 13.100
libavfilter 7.110.100 / 7.110.100
libswscale 5. 9.100 / 5. 9.100
libswresample 3. 9.100 / 3. 9.100
libpostproc 55. 9.100 / 55. 9.100
Hyper fast Audio and Video encoder
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...
Use -h to get full help or, even better, run 'man ffmpeg'
I wonder where that comes from. I’m on Linux Mint 21.1 (Ubuntu Jammy-based) and did nothing unusual, just the usual updates. Then again, I use my ffmpeg
daily, for lots of tasks, and it never fails.
Just cross-checked with my Azuracast (Ubuntu 22.04.2 LTS, running in a Docker). ffmpeg
says:
ffmpeg version 4.4.2-0ubuntu0.22.04.1 Copyright (c) 2000-2021 the FFmpeg developers
built with gcc 11 (Ubuntu 11.2.0-19ubuntu1)
configuration: --prefix=/usr --extra-version=0ubuntu0.22.04.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-pocketsphinx --enable-librsvg --enable-libmfx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared
libavutil 56. 70.100 / 56. 70.100
libavcodec 58.134.100 / 58.134.100
libavformat 58. 76.100 / 58. 76.100
libavdevice 58. 13.100 / 58. 13.100
libavfilter 7.110.100 / 7.110.100
libswscale 5. 9.100 / 5. 9.100
libswresample 3. 9.100 / 3. 9.100
libpostproc 55. 9.100 / 55. 9.100
Hyper fast Audio and Video encoder
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...
Use -h to get full help or, even better, run 'man ffmpeg'
So no warning here, but the same crash (using the same LS) whenever I try to put a .png
or .jpg
into the videostream/videos/
watched playlist folder.
I can't reproduce here, have tried with savonet/liquidsoap:52fb69c
. Would you mind sending a faulty jpeg/png image as well?
Correction, I see that the file is attached now.
Attached is a minimal script I used here.
To run:
% docker run -ti --entrypoint /bin/bash -v /tmp/videostream/:/tmp/videostream savonet/liquidsoap:52fb69c
$ liquidsoap /tmp/videostream/videostream5.liq
You will need to adjust the icecast server to your host's IP.
Very odd. Apart from lots of "We must catchup" and stuttering audio it works. I even re-introduced the alpha you removed. Using VLC as a player, upon transition to the image, it has horrible tearing the first few fractions of a second, then stabilizes.
I added a short video to see what it will do, and once it reaches the image it is stuck at the image forever.
But that is another problem—can we somehow define a default image duration if images are played between videos?
Still using LS 2.2.0+git@dcf405ff4 on Linux Mint for the test.
I see
2023/06/21 09:43:08 [decoder:3] Method "sdl/image" accepted "/tmp/videostream/pl/video/unnamed.png".
[swscaler @ 0x7f43206fe140] Warning: dstStride is not aligned!
->cannot do aligned memory accesses anymore
in LS’ output.
When I switch back from your variant in /tmp/videostream to mine in /home/matthias/media/videostream and use my original "videostream5.liq" but put your "unnamed.png" into the "videos" subfolder, I immediately get the crash again. Wonder what we’re having here…
Meld shows not many differences between your version and mine, apart from the locations of the playlists, the removal of rectangle alpha, and the icecast address and passowrd, of course.
The other difference is in my test I used an .m3u playlist that’s in /home/matthias/Musik, and has relative paths to music files in (/home/matthias/Musik/)Tagged/subfolder/subfolder/….
This is the first audio it tries to play before the crash:
2023/06/21 09:57:46 [Electronic_m3u:3] Prepared "/home/matthias/Musik/Tagged/Gorillaz/Gorillaz - Demon Days (2005 album, DE)/Gorillaz - Demon Days.mp3" (RID 3).
2023/06/21 09:57:46 [mksafe:3] Switch to Electronic_m3u with transition.
[mp3float @ 0x7f275c1c69c0] Could not update timestamps for skipped samples.
2023/06/21 09:57:47 [decoder.taglib:2] Error while decoding file tags: Taglib.File.Invalid_file
Speicherzugriffsfehler (Speicherabzug geschrieben)
The MP3 itself plays fine in Audacious and other players, and the usual tools (MP3 Diags, rmlyrics3, loudgain, spex, kid3, MusicBrainz Picard, …) don’t show any irregularities.
I also tried throwing in an arbitrary JPEG, which also plays with yours but crashes mine. Maybe we’re having some obscure path or taglib problem, after all? Just wildly guessing. I distinctly remember taglib had some segfault issues back in the days when I wrote loudgain.
@toots Just installed https://github.com/savonet/liquidsoap-release-assets/releases/download/rolling-release-v2.2.x/liquidsoap-6469ce0_2.2.0-ubuntu-jammy-1_amd64.deb here and on my actual AzuraCast, and both crash when putting any PNG or JPG into the videos folder. AzuraCast even worse, because it enters an endless station reboot loop (tries to auto-restart LS when it crashes).
Apart from that, 6469ce0 works fine so far.
@toots Just installed https://github.com/savonet/liquidsoap-release-assets/releases/download/rolling-release-v2.2.x/liquidsoap-6469ce0_2.2.0-ubuntu-jammy-1_amd64.deb here and on my actual AzuraCast, and both crash when putting any PNG or JPG into the videos folder. AzuraCast even worse, because it enters an endless station reboot loop (tries to auto-restart LS when it crashes).
Apart from that, 6469ce0 works fine so far.
The error I'm seeing from your gdb trace could be due to an inconsistency with the installed ffmpeg libraries. Could you check on docker to see if it crashes there?
How would I do that? The only docker I use was the AzuraCast one, and it has the same ffmpeg as my laptop. I’m not even sure I have docker installed on my laptop (would you recommend docker.io or docker-ce?).
Would the command you gave above be all I need to do? As far as I understand, it would get LS @ 52fb69c and map a /tmp/videostream volume, then enter bash, right?
Yup.
Ok, tried that.
Using "yours", it works. Copying "mine" over to /tmp/videostream
and adjusting the paths, same segfault. Even with ffmpeg 6.0 and the newer libraries. Working with Docker is so cumbersome… "friendly_banzai", hee hee :-)
Interesting. Even inside a docker image?
Could you provide a standalone reproduction zip like I did?
Sure. I’ll just take "mine" as it is right now in /tmp/videostream
and only change the Icecast credentials. I made up a quick ’n’ dirty 10s-video and use your audio so you can have something playing, and then drop any image from "images-off-rotation" into the "videos" folder. Moving (mv
) instead of copying suggested, so it’s atomic.
Side note: After dropping an image into "videos", the video/audio playout stops and stutters, many "catchup" errors appear, and when it finally has the image prepared … it crashes.
Just realized the old videostream5.liq
still uses the "old" transparency color 0xAARRGGBB values. Thanks for keeping that backwards-compatible!
(But that’s not the issue: My newer code already uses alpha=
and it segfaults the same.)
For completeness, here’s my docker info
:
Client: Docker Engine - Community
Version: 24.0.2
Context: default
Debug Mode: false
Plugins:
buildx: Docker Buildx (Docker Inc.)
Version: v0.10.5
Path: /usr/libexec/docker/cli-plugins/docker-buildx
compose: Docker Compose (Docker Inc.)
Version: v2.18.1
Path: /usr/libexec/docker/cli-plugins/docker-compose
Server:
Containers: 4
Running: 0
Paused: 0
Stopped: 4
Images: 1
Server Version: 24.0.2
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Using metacopy: false
Native Overlay Diff: true
userxattr: false
Logging Driver: json-file
Cgroup Driver: systemd
Cgroup Version: 2
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: io.containerd.runc.v2 runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 3dce8eb055cbb6872793272b4f20ed16117344f8
runc version: v1.1.7-0-g860f061
init version: de40ad0
Security Options:
apparmor
seccomp
Profile: builtin
cgroupns
Kernel Version: 5.15.0-75-generic
Operating System: Linux Mint 21.1
OSType: linux
Architecture: x86_64
CPUs: 8
Total Memory: 15.6GiB
Name: e6510
ID: f0d06851-e147-4d32-9daf-f6737c81ce45
Docker Root Dir: /var/lib/docker
Debug Mode: false
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
I was able to reproduce and went down a rabbit hole of weird ocaml GC internals heh. This should hopefully be fixed by: https://github.com/savonet/ocaml-ffmpeg/commit/20929df162e6fbd51cda279dea6a8f4287dadad3.
Could you try latest rolling-release-v2.2.x build when it comes out: https://github.com/savonet/liquidsoap/actions/runs/5339795462
Thanks!
Thank you for all your work! I’ll surely give it a try.
Hope you’ll be able to come up with a working .deb
for all us weirdos using point release OS’es like Debian, Ubuntu, Mint that never update their software (thinking of ffmpeg) like Arch-based distros… ;-)
And—if I may—please let us know a good way to set a duration for images that are mixed with videos, so looping doesn’t get "stuck" at the first image. Rationale: See above, some posts back. Maybe it’s just something easy I didn’t yet learn?
Using https://github.com/savonet/liquidsoap/releases/download/rolling-release-v2.2.x/liquidsoap-3665c37_2.2.0-ubuntu-jammy-1_amd64.deb and the /tmp/videostream
I sent you in the zip, first thing I get is this:
INFO: Loading Sdl_image, Target = linux
INFO: Loading Sdl_ttf, Target = linux
2023/06/22 14:27:56 >>> LOG START
2023/06/22 14:27:48 [main:3] Liquidsoap 2.2.0+git@3665c3765
2023/06/22 14:27:48 [main:3] Using: alsa=0.3.0 angstrom=0.15.0 ao=0.2.4 asetmap=0.8.1 asn1-combinators=0.2.6 astring=0.8.5 base.caml=v0.15.1 base64=3.5.1 bigarray=[distributed with OCaml] bigarray-compat=1.1.0 bigstringaf=0.9.1 bjack=0.1.6 bos=0.2.1 bytes=[distributed with OCaml] ca-certs=v0.2.3 camlimages.all_formats=4.2.6 camlimages.core=5.0.4 camlimages.exif=5.0.4 camlimages.gif=5.0.4 camlimages.jpeg=5.0.4 camlimages.png=5.0.4 camlimages.tiff=5.0.4 camlimages.xpm=5.0.4 camlp-streams camomile.lib=2.0 cohttp=5.1.0 cohttp-lwt=5.1.0 cohttp-lwt-unix=5.1.0 conduit=6.2.0 conduit-lwt=6.2.0 conduit-lwt-unix=6.2.0 cry=1.0.0 cstruct=6.2.0 ctypes=0.20.2 ctypes.foreign=0.20.2 ctypes.stubs=0.20.2 curl=0.9.2 domain-name=0.4.0 dssi=0.1.5 dtools=0.4.5 dune-build-info=3.7.1 dune-private-libs.dune-section=3.7.1 dune-site=3.7.1 dune-site.private=3.7.1 duppy=0.9.3 eqaf=0.9 eqaf.bigstring=0.9 eqaf.cstruct=0.9 faad=0.5.2 fdkaac=0.3.3 ffmpeg-av=1.1.8 ffmpeg-avcodec=1.1.8 ffmpeg-avdevice=1.1.8 ffmpeg-avfilter=1.1.8 ffmpeg-avutil=1.1.8 ffmpeg-swresample=1.1.8 ffmpeg-swscale=1.1.8 fileutils=0.6.4 flac=0.4.0 flac.decoder=0.4.0 flac.ogg=0.4.0 fmt=0.9.0 fpath=0.7.3 frei0r=0.1.2 gd=1.0a5 gen=1.1 gmap=0.3.0 hkdf=1.0.4 inotify=2.4.1 integers ipaddr=5.5.0 ipaddr-sexp=5.5.0 ipaddr.unix=5.5.0 irc-client irc-client-unix ladspa=0.2.2 lame=0.3.7 lastfm=0.3.3 lilv=0.1.0 liquidsoap-lang=2.2.0 liquidsoap-lang.console=2.2.0 liquidsoap_alsa=rolling-release-v2.2.x-115-g3665c37 liquidsoap_ao=rolling-release-v2.2.x-115-g3665c37 liquidsoap_bjack=rolling-release-v2.2.x-115-g3665c37 liquidsoap_builtins=rolling-release-v2.2.x-115-g3665c37 liquidsoap_camlimages=rolling-release-v2.2.x-115-g3665c37 liquidsoap_core=rolling-release-v2.2.x-115-g3665c37 liquidsoap_dssi=rolling-release-v2.2.x-115-g3665c37 liquidsoap_faad=rolling-release-v2.2.x-115-g3665c37 liquidsoap_fdkaac=rolling-release-v2.2.x-115-g3665c37 liquidsoap_ffmpeg=rolling-release-v2.2.x-115-g3665c37 liquidsoap_flac=rolling-release-v2.2.x-115-g3665c37 liquidsoap_frei0r=rolling-release-v2.2.x-115-g3665c37 liquidsoap_gd=rolling-release-v2.2.x-115-g3665c37 liquidsoap_irc=rolling-release-v2.2.x-115-g3665c37 liquidsoap_ladspa=rolling-release-v2.2.x-115-g3665c37 liquidsoap_lame=rolling-release-v2.2.x-115-g3665c37 liquidsoap_lastfm=rolling-release-v2.2.x-115-g3665c37 liquidsoap_lilv=rolling-release-v2.2.x-115-g3665c37 liquidsoap_lo=rolling-release-v2.2.x-115-g3665c37 liquidsoap_mad=rolling-release-v2.2.x-115-g3665c37 liquidsoap_magic=rolling-release-v2.2.x-115-g3665c37 liquidsoap_mem_usage=rolling-release-v2.2.x-115-g3665c37 liquidsoap_memtrace=rolling-release-v2.2.x-115-g3665c37 liquidsoap_ogg=rolling-release-v2.2.x-115-g3665c37 liquidsoap_ogg_flac=rolling-release-v2.2.x-115-g3665c37 liquidsoap_optionals=rolling-release-v2.2.x-115-g3665c37 liquidsoap_opus=rolling-release-v2.2.x-115-g3665c37 liquidsoap_osc=rolling-release-v2.2.x-115-g3665c37 liquidsoap_oss=rolling-release-v2.2.x-115-g3665c37 liquidsoap_portaudio=rolling-release-v2.2.x-115-g3665c37 liquidsoap_posix_time=rolling-release-v2.2.x-115-g3665c37 liquidsoap_prometheus=rolling-release-v2.2.x-115-g3665c37 liquidsoap_pulseaudio=rolling-release-v2.2.x-115-g3665c37 liquidsoap_runtime=rolling-release-v2.2.x-115-g3665c37 liquidsoap_samplerate=rolling-release-v2.2.x-115-g3665c37 liquidsoap_sdl=rolling-release-v2.2.x-115-g3665c37 liquidsoap_shine=rolling-release-v2.2.x-115-g3665c37 liquidsoap_soundtouch=rolling-release-v2.2.x-115-g3665c37 liquidsoap_speex=rolling-release-v2.2.x-115-g3665c37 liquidsoap_srt=rolling-release-v2.2.x-115-g3665c37 liquidsoap_ssl=rolling-release-v2.2.x-115-g3665c37 liquidsoap_stereotool=rolling-release-v2.2.x-115-g3665c37 liquidsoap_taglib=rolling-release-v2.2.x-115-g3665c37 liquidsoap_theora=rolling-release-v2.2.x-115-g3665c37 liquidsoap_tls=rolling-release-v2.2.x-115-g3665c37 liquidsoap_vorbis=rolling-release-v2.2.x-115-g3665c37 liquidsoap_xmlplaylist=rolling-release-v2.2.x-115-g3665c37 liquidsoap_yaml=rolling-release-v2.2.x-115-g3665c37 lo=0.2.0 logs=0.7.0 logs.fmt=0.7.0 logs.lwt=0.7.0 lwt=5.6.1 lwt.unix=5.6.1 macaddr=5.5.0 mad=0.5.3 magic=0.7.3 magic-mime=1.3.0 mem_usage=0.0.4 memtrace=0.2.3 menhirLib=20230415 metadata=0.2.0 mirage-crypto=0.11.1 mirage-crypto-ec=0.11.1 mirage-crypto-pk=0.11.1 mirage-crypto-rng=0.11.1 mirage-crypto-rng.unix=0.11.1 mm=0.8.4 mm.audio=0.8.4 mm.base=0.8.4 mm.image=0.8.4 mm.midi=0.8.4 mm.video=0.8.4 ocplib-endian ocplib-endian.bigstring ogg=0.7.4 ogg.decoder=0.7.4 opus=0.2.3 opus.decoder=0.2.3 osc osc-unix parsexp=v0.15.0 pbkdf pcre=7.5.0 portaudio=0.2.3 posix-base=b516d46 posix-socket=b516d46 posix-socket.constants=b516d46 posix-socket.stubs=b516d46 posix-socket.types=b516d46 posix-time2=b516d46 posix-time2.constants=b516d46 posix-time2.stubs=b516d46 posix-time2.types=b516d46 posix-types=b516d46 posix-types.constants=b516d46 ppx_sexp_conv.runtime-lib=v0.15.0 prometheus=1.2 prometheus-app=1.2 ptime=1.1.0 ptime.clock.os=1.1.0 pulseaudio=0.1.6 re=1.10.4 result=1.5 rresult=0.7.0 samplerate=0.1.6 sedlex=3.1 seq=[distributed with OCaml 4.07 or above] sexplib=v0.15.1 sexplib0=v0.15.0 shine=0.2.3 soundtouch=0.1.9 speex=0.4.2 speex.decoder=0.4.2 srt=0.3.0 srt.constants=0.3.0 srt.stubs=0.3.0 srt.stubs.locked=0.3.0 srt.types=0.3.0 ssl=0.5.13 stdlib-shims=0.3.0 stereotool=rolling-release-v2.2.x-115-g3665c37 str=[distributed with OCaml] stringext=1.6.0 taglib=0.3.10 theora=0.4.1 theora.decoder=0.4.1 threads=[distributed with OCaml] threads.posix=[distributed with OCaml] tls=0.17.0 tsdl=v1.0.0 tsdl-image=0.5 tsdl-ttf=0.5 unix=[distributed with OCaml] unix-errno=0.6.2 unix-errno.errno_bindings=0.6.2 unix-errno.errno_types=0.6.2 unix-errno.errno_types_detected=0.6.2 unix-errno.unix=0.6.2 uri=4.2.0 uri-sexp=4.2.0 uri.services=4.2.0 vorbis=0.8.1 vorbis.decoder=0.8.1 x509=0.16.4 xmlm=1.4.0 xmlplaylist=0.1.5 yaml=3.1.0 yaml.bindings=3.1.0 yaml.bindings.types=3.1.0 yaml.c=3.1.0 yaml.ffi=3.1.0 yaml.types=3.1.0 zarith=1.12
2023/06/22 14:27:48 [clock:3] Using native (high-precision) implementation for latency control
2023/06/22 14:27:56 [main:3] Standard library loaded in 7.55 seconds.
2023/06/22 14:27:56 [lang.deprecated:2] WARNING: "mux_video" is deprecated and will be removed in future version. Please use "source" instead.
2023/06/22 14:27:56 [frame:3] Using 44100Hz audio, 25Hz video, 44100Hz main.
2023/06/22 14:27:56 [frame:3] Video frame size set to: 1280x720
2023/06/22 14:27:56 [frame:3] Frame size must be a multiple of 1764 ticks = 1764 audio samples = 1 video samples.
2023/06/22 14:27:56 [frame:3] Targeting 'frame.duration': 0.04s = 1764 audio samples = 1764 ticks.
2023/06/22 14:27:56 [frame:3] Frames last 0.04s = 1764 audio samples = 1 video samples = 1764 ticks.
2023/06/22 14:27:56 [sandbox:3] Sandboxing disabled
2023/06/22 14:27:56 [startup:3] DSSI plugins registration: 0.00s
2023/06/22 14:27:56 [startup:3] FFmpeg filters registration: 0.09s
2023/06/22 14:27:56 [startup:3] FFmpeg bitstream filters registration: 0.00s
2023/06/22 14:27:56 [startup:3] Lilv plugins registration: 0.02s
2023/06/22 14:27:56 [startup:3] Frei0r plugin registration: 0.00s
2023/06/22 14:27:56 [startup:3] LADSPA plugins registration: 0.00s
2023/06/22 14:27:56 [startup:3] Typechecking: 7.33s
2023/06/22 14:27:56 [startup:3] Evaluation: 0.02s
2023/06/22 14:27:56 [startup:3] Typechecking: 0.06s
2023/06/22 14:27:56 [startup:3] Evaluation: 0.00s
2023/06/22 14:27:56 [startup:3] Typechecking: 0.01s
2023/06/22 14:27:56 [startup:3] Evaluation: 0.01s
2023/06/22 14:27:56 [startup:3] Loaded videostream5.liq: 0.02s
2023/06/22 14:27:56 [video.converter:3] Using preferred video converter: ffmpeg.
2023/06/22 14:27:56 [audio.converter:3] Using samplerate converter: libsamplerate.
2023/06/22 14:27:56 [buffer.consumer:3] Content type is {audio=pcm(stereo),video=canvas}.
2023/06/22 14:27:56 [video.add_rectangle.3:3] Content type is {audio=pcm(stereo),video=canvas}.
2023/06/22 14:27:56 [source.6:3] Content type is {audio=pcm(stereo),video=canvas}.
2023/06/22 14:27:56 [video.add.3:3] Content type is {video=canvas}.
2023/06/22 14:27:56 [video.add_rectangle.2:3] Content type is {audio=pcm(stereo),video=canvas}.
2023/06/22 14:27:56 [source.5:3] Content type is {audio=pcm(stereo),video=canvas}.
2023/06/22 14:27:56 [video.add.2:3] Content type is {video=canvas}.
2023/06/22 14:27:56 [video.add_rectangle:3] Content type is {audio=pcm(stereo),video=canvas}.
2023/06/22 14:27:56 [video_add_image:3] Content type is {audio=pcm(stereo),video=canvas}.
2023/06/22 14:27:56 [video.add:3] Content type is {video=canvas}.
2023/06/22 14:27:56 [source.3:3] Content type is {audio=pcm(stereo),video=canvas}.
2023/06/22 14:27:56 [videos:3] Content type is {video=canvas}.
2023/06/22 14:27:56 [safe_blank.2:3] Content type is {video=canvas}.
2023/06/22 14:27:56 [amplify.6:3] Content type is {audio=pcm(stereo)}.
2023/06/22 14:27:56 [amplify.3:3] Content type is {audio=pcm(stereo)}.
2023/06/22 14:27:56 [audio:3] Content type is {audio=pcm(stereo)}.
2023/06/22 14:27:56 [safe_blank:3] Content type is {audio=pcm(stereo)}.
2023/06/22 14:27:56 [amplify.2:3] Content type is {audio=pcm(stereo)}.
2023/06/22 14:27:56 [amplify.5:3] Content type is {audio=pcm(stereo)}.
2023/06/22 14:27:56 [track_video_add_image.2:3] Content type is {video=canvas}.
2023/06/22 14:27:56 [video.crop:3] Content type is {video=canvas}.
2023/06/22 14:27:56 [track_video_add_image:3] "/tmp/videostream/niteradio-cover.png" is static, resolving once for all...
[swscaler @ 0x7f409c074a80] Warning: data is not aligned! This can lead to a speed loss
2023/06/22 14:27:56 [decoder:3] Method "ffmpeg" accepted "/tmp/videostream/niteradio-cover.png".
2023/06/22 14:27:56 [source.available:3] Content type is {video=canvas}.
2023/06/22 14:27:56 [video.translate:3] Content type is {video=canvas}.
2023/06/22 14:27:56 [video.info:3] Content type is {video=canvas}.
2023/06/22 14:27:56 [video.crop.2:3] Content type is {video=canvas}.
2023/06/22 14:27:56 [video.text:3] Content type is {video=canvas}.
2023/06/22 14:27:56 [source.available.2:3] Content type is {video=canvas}.
2023/06/22 14:27:56 [video.translate.2:3] Content type is {video=canvas}.
2023/06/22 14:27:56 [video.info.2:3] Content type is {video=canvas}.
2023/06/22 14:27:56 [video.crop.3:3] Content type is {video=canvas}.
2023/06/22 14:27:56 [video.text.2:3] Content type is {video=canvas}.
2023/06/22 14:27:56 [videostream:3] Content type is {audio=pcm(stereo),video=canvas}.
2023/06/22 14:27:56 [buffer.producer:3] Content type is {audio=pcm(stereo),video=canvas}.
2023/06/22 14:27:56 [safe_blank.3:3] Content type is {audio=pcm(stereo),video=canvas}.
2023/06/22 14:27:56 [video.text:3] Using sdl implementation
2023/06/22 14:27:56 [clock.main:3] Streaming loop starts in auto-sync mode
2023/06/22 14:27:56 [clock.main:3] Delegating synchronization to CPU clock
2023/06/22 14:27:56 [clock.videostream:3] Streaming loop starts in auto-sync mode
2023/06/22 14:27:56 [clock.videostream:3] Delegating synchronization to CPU clock
2023/06/22 14:27:56 [decoder.ffmpeg:3] Requested content-type for "/tmp/videostream/videos/Nite Radio Promo.mkv": {video=canvas}
2023/06/22 14:27:56 [decoder.ffmpeg:3] FFmpeg recognizes "/tmp/videostream/videos/Nite Radio Promo.mkv" as video: {codec: h264, 1920x1080, yuv420p}, audio: {codec: aac, 48000Hz, 2 channel(s)}
2023/06/22 14:27:56 [decoder.ffmpeg:3] Decoded content-type for "/tmp/videostream/videos/Nite Radio Promo.mkv": {video=canvas}
2023/06/22 14:27:56 [decoder.ffmpeg:3] Requested content-type for "/tmp/videostream/audio/Paris_Streets_-_JO.BITE_(2).mp3": {audio=pcm(stereo)}
2023/06/22 14:27:56 [decoder.ffmpeg:3] FFmpeg recognizes "/tmp/videostream/audio/Paris_Streets_-_JO.BITE_(2).mp3" as audio: {codec: mp3, 44100Hz, 2 channel(s)}
2023/06/22 14:27:56 [decoder.ffmpeg:3] Decoded content-type for "/tmp/videostream/audio/Paris_Streets_-_JO.BITE_(2).mp3": {audio=pcm(stereo)}
2023/06/22 14:27:56 [decoder.taglib:2] Error while decoding file tags: Taglib.File.Invalid_file
2023/06/22 14:27:56 [mksafe.3:3] Switch to safe_blank.3.
2023/06/22 14:27:56 [videostream:3] Connecting mount /video.m2t for source@radio...
2023/06/22 14:27:56 [decoder:3] Method "ffmpeg" accepted "/tmp/videostream/niteradio-cover.png".
[swscaler @ 0x7f407c168d80] Warning: dstStride is not aligned!
->cannot do aligned memory accesses anymore
2023/06/22 14:27:56 [track_video_add_image:3] Prepared "/tmp/videostream/niteradio-cover.png" (RID 0).
2023/06/22 14:27:56 [mksafe.2:3] Switch to safe_blank.2.
2023/06/22 14:27:56 [videos:3] Prepared "/tmp/videostream/videos/Nite Radio Promo.mkv" (RID 1).
2023/06/22 14:27:56 [mksafe.2:3] Switch to videos with transition.
2023/06/22 14:27:56 [mksafe:3] Switch to safe_blank.
2023/06/22 14:27:56 [audio:3] Prepared "/tmp/videostream/audio/Paris_Streets_-_JO.BITE_(2).mp3" (RID 2).
2023/06/22 14:27:56 [mksafe:3] Switch to audio with transition.
2023/06/22 14:27:56 [clock.main:2] Source buffer.consumer failed while streaming: Invalid_argument("Not a color")!
2023/06/22 14:27:56 [clock.main:2] Raised at Mm_image__ImageBase.RGB8.Color.of_int in file "src/imageBase.ml", line 171, characters 27-65
2023/06/22 14:27:56 [clock.main:2] Called from Video_effects.Getter.map in file "src/core/operators/video_effects.ml", line 43, characters 21-27
2023/06/22 14:27:56 [clock.main:2] Called from Video_effects.(fun) in file "src/core/operators/video_effects.ml", line 232, characters 30-36
2023/06/22 14:27:56 [clock.main:2] Called from Mm_video__Video.MakeCanvas.map in file "src/video.ml", line 135, characters 17-26
2023/06/22 14:27:56 [clock.main:2] Called from Video_effects.base#get_frame in file "src/core/operators/video_effects.ml", line 71, characters 16-60
2023/06/22 14:27:56 [clock.main:2] Called from Source.operator#instrumented_get_frame in file "src/core/source.ml", line 642, characters 6-24
2023/06/22 14:27:56 [clock.main:2] Called from Source.operator#get in file "src/core/source.ml", line 766, characters 12-44
2023/06/22 14:27:56 [clock.main:2] Called from Add.base#feed_track in file "src/core/operators/add.ml", line 73, characters 10-24
2023/06/22 14:27:56 [clock.main:2] Called from Stdlib__List.fold_left in file "list.ml", line 121, characters 24-34
2023/06/22 14:27:56 [clock.main:2] Called from Add.video_add#get_frame in file "src/core/operators/add.ml", line 174, characters 16-40
2023/06/22 14:27:56 [clock.main:2] Called from Source.operator#instrumented_get_frame in file "src/core/source.ml", line 642, characters 6-24
2023/06/22 14:27:56 [clock.main:2] Called from Source.operator#get in file "src/core/source.ml", line 749, characters 10-41
2023/06/22 14:27:56 [clock.main:2] Called from Muxer.muxer#feed_fields in file "src/core/operators/muxer.ml", line 93, characters 8-22
2023/06/22 14:27:56 [clock.main:2] Called from Stdlib__List.iter in file "list.ml", line 110, characters 12-15
2023/06/22 14:27:56 [clock.main:2] Called from Muxer.muxer#feed in file "src/core/operators/muxer.ml", line 110, characters 8-51
2023/06/22 14:27:56 [clock.main:2] Called from Muxer.muxer#get_frame in file "src/core/operators/muxer.ml", line 132, characters 6-31
2023/06/22 14:27:56 [clock.main:2] Called from Source.operator#instrumented_get_frame in file "src/core/source.ml", line 642, characters 6-24
2023/06/22 14:27:56 [clock.main:2] Called from Source.operator#get in file "src/core/source.ml", line 749, characters 10-41
2023/06/22 14:27:56 [clock.main:2] Called from VFrame.get_content in file "src/core/stream/vFrame.ml", line 47, characters 4-20
2023/06/22 14:27:56 [clock.main:2] Called from Video_effects.base#get_frame in file "src/core/operators/video_effects.ml", line 69, characters 12-41
2023/06/22 14:27:56 [clock.main:2] Called from Source.operator#instrumented_get_frame in file "src/core/source.ml", line 642, characters 6-24
2023/06/22 14:27:56 [clock.main:2] Called from Source.operator#get in file "src/core/source.ml", line 766, characters 12-44
2023/06/22 14:27:56 [clock.main:2] Called from Add.base#feed_track in file "src/core/operators/add.ml", line 73, characters 10-24
2023/06/22 14:27:56 [clock.main:2] Called from Stdlib__List.fold_left in file "list.ml", line 121, characters 24-34
2023/06/22 14:27:56 [clock.main:2] Called from Add.video_add#get_frame in file "src/core/operators/add.ml", line 174, characters 16-40
2023/06/22 14:27:56 [clock.main:2] Called from Source.operator#instrumented_get_frame in file "src/core/source.ml", line 642, characters 6-24
2023/06/22 14:27:56 [clock.main:2] Called from Source.operator#get in file "src/core/source.ml", line 749, characters 10-41
2023/06/22 14:27:56 [clock.main:2] Called from Muxer.muxer#feed_fields in file "src/core/operators/muxer.ml", line 93, characters 8-22
2023/06/22 14:27:56 [clock.main:2] Called from Stdlib__List.iter in file "list.ml", line 110, characters 12-15
2023/06/22 14:27:56 [clock.main:2] Called from Muxer.muxer#feed in file "src/core/operators/muxer.ml", line 110, characters 8-51
2023/06/22 14:27:56 [clock.main:2] Called from Muxer.muxer#get_frame in file "src/core/operators/muxer.ml", line 132, characters 6-31
2023/06/22 14:27:56 [clock.main:2] Called from Source.operator#instrumented_get_frame in file "src/core/source.ml", line 642, characters 6-24
2023/06/22 14:27:56 [clock.main:2] Called from Source.operator#get in file "src/core/source.ml", line 749, characters 10-41
2023/06/22 14:27:56 [clock.main:2] Called from VFrame.get_content in file "src/core/stream/vFrame.ml", line 47, characters 4-20
2023/06/22 14:27:56 [clock.main:2] Called from Video_effects.base#get_frame in file "src/core/operators/video_effects.ml", line 69, characters 12-41
2023/06/22 14:27:56 [clock.main:2] Called from Source.operator#instrumented_get_frame in file "src/core/source.ml", line 642, characters 6-24
2023/06/22 14:27:56 [clock.main:2] Called from Source.operator#get in file "src/core/source.ml", line 749, characters 10-41
2023/06/22 14:27:56 [clock.main:2] Called from Output.output#output in file "src/core/outputs/output.ml", line 165, characters 10-30
2023/06/22 14:27:56 [clock.main:2] Called from Clock.MkClock.clock#end_tick.(fun) in file "src/core/clock.ml", line 313, characters 16-24
2023/06/22 14:27:56 [clock.main:2]
2023/06/22 14:27:56 [clock.main:3] Streaming loop stopped.
2023/06/22 14:27:56 [main:3] Shutdown started!
2023/06/22 14:27:56 [main:3] Waiting for main threads to terminate...
2023/06/22 14:27:56 [videostream:3] Connection setup was successful.
2023/06/22 14:27:56 [videostream:3] Closing connection...
2023/06/22 14:27:56 [clock.videostream:3] Streaming loop stopped.
2023/06/22 14:27:56 [main:3] Main threads terminated.
2023/06/22 14:27:56 [threads:3] Shutting down scheduler...
2023/06/22 14:27:56 [threads:3] Scheduler shut down.
2023/06/22 14:27:56 [main:3] Cleaning downloaded files...
2023/06/22 14:27:56 [main:3] Freeing memory...
Cross-checked with the docker, almost same output:
sudo docker run -ti --entrypoint /bin/bash -v /tmp/videostream/:/tmp/videostream savonet/liquidsoap:3665c37
cd /tmp/videostream/
liquidsoap videostream5.liq
gives us:
INFO: Loading Sdl_image, Target = linux
INFO: Loading Sdl_ttf, Target = linux
2023/06/22 13:15:40 >>> LOG START
2023/06/22 13:15:31 [ffmpeg.filter.bitstream:3] No valid mode found for filter pgs_frame_merge!
2023/06/22 13:15:31 [main:3] Liquidsoap 2.2.0+git@3665c3765
2023/06/22 13:15:31 [main:3] Using: alsa=0.3.0 angstrom=0.15.0 ao=0.2.4 asetmap=0.8.1 asn1-combinators=0.2.6 astring=0.8.5 base.caml=v0.15.1 base64=3.5.1 bigarray=[distributed with OCaml] bigarray-compat=1.1.0 bigstringaf=0.9.1 bjack=0.1.6 bos=0.2.1 bytes=[distributed with OCaml] ca-certs=v0.2.3 camlimages.all_formats=4.2.6 camlimages.core=5.0.4 camlimages.exif=5.0.4 camlimages.gif=5.0.4 camlimages.jpeg=5.0.4 camlimages.png=5.0.4 camlimages.tiff=5.0.4 camlimages.xpm=5.0.4 camlp-streams camomile.lib=2.0 cohttp=5.1.0 cohttp-lwt=5.1.0 cohttp-lwt-unix=5.1.0 conduit=6.2.0 conduit-lwt=6.2.0 conduit-lwt-unix=6.2.0 cry=1.0.0 cstruct=6.2.0 ctypes=0.20.2 ctypes.foreign=0.20.2 ctypes.stubs=0.20.2 curl=0.9.2 domain-name=0.4.0 dssi=0.1.5 dtools=0.4.5 dune-build-info=3.7.1 dune-private-libs.dune-section=3.7.1 dune-site=3.7.1 dune-site.private=3.7.1 duppy=0.9.3 eqaf=0.9 eqaf.bigstring=0.9 eqaf.cstruct=0.9 faad=0.5.2 fdkaac=0.3.3 ffmpeg-av=1.1.8 ffmpeg-avcodec=1.1.8 ffmpeg-avdevice=1.1.8 ffmpeg-avfilter=1.1.8 ffmpeg-avutil=1.1.8 ffmpeg-swresample=1.1.8 ffmpeg-swscale=1.1.8 fileutils=0.6.4 flac=0.4.0 flac.decoder=0.4.0 flac.ogg=0.4.0 fmt=0.9.0 fpath=0.7.3 frei0r=0.1.2 gd=1.0a5 gen=1.1 gmap=0.3.0 hkdf=1.0.4 inotify=2.4.1 integers ipaddr=5.5.0 ipaddr-sexp=5.5.0 ipaddr.unix=5.5.0 irc-client irc-client-unix ladspa=0.2.2 lame=0.3.7 lastfm=0.3.3 lilv=0.1.0 liquidsoap-lang=2.2.0 liquidsoap-lang.console=2.2.0 liquidsoap_alsa=rolling-release-v2.2.x-115-g3665c37 liquidsoap_ao=rolling-release-v2.2.x-115-g3665c37 liquidsoap_bjack=rolling-release-v2.2.x-115-g3665c37 liquidsoap_builtins=rolling-release-v2.2.x-115-g3665c37 liquidsoap_camlimages=rolling-release-v2.2.x-115-g3665c37 liquidsoap_core=rolling-release-v2.2.x-115-g3665c37 liquidsoap_dssi=rolling-release-v2.2.x-115-g3665c37 liquidsoap_faad=rolling-release-v2.2.x-115-g3665c37 liquidsoap_fdkaac=rolling-release-v2.2.x-115-g3665c37 liquidsoap_ffmpeg=rolling-release-v2.2.x-115-g3665c37 liquidsoap_flac=rolling-release-v2.2.x-115-g3665c37 liquidsoap_frei0r=rolling-release-v2.2.x-115-g3665c37 liquidsoap_gd=rolling-release-v2.2.x-115-g3665c37 liquidsoap_irc=rolling-release-v2.2.x-115-g3665c37 liquidsoap_ladspa=rolling-release-v2.2.x-115-g3665c37 liquidsoap_lame=rolling-release-v2.2.x-115-g3665c37 liquidsoap_lastfm=rolling-release-v2.2.x-115-g3665c37 liquidsoap_lilv=rolling-release-v2.2.x-115-g3665c37 liquidsoap_lo=rolling-release-v2.2.x-115-g3665c37 liquidsoap_mad=rolling-release-v2.2.x-115-g3665c37 liquidsoap_magic=rolling-release-v2.2.x-115-g3665c37 liquidsoap_mem_usage=rolling-release-v2.2.x-115-g3665c37 liquidsoap_memtrace=rolling-release-v2.2.x-115-g3665c37 liquidsoap_ogg=rolling-release-v2.2.x-115-g3665c37 liquidsoap_ogg_flac=rolling-release-v2.2.x-115-g3665c37 liquidsoap_optionals=rolling-release-v2.2.x-115-g3665c37 liquidsoap_opus=rolling-release-v2.2.x-115-g3665c37 liquidsoap_osc=rolling-release-v2.2.x-115-g3665c37 liquidsoap_oss=rolling-release-v2.2.x-115-g3665c37 liquidsoap_portaudio=rolling-release-v2.2.x-115-g3665c37 liquidsoap_posix_time=rolling-release-v2.2.x-115-g3665c37 liquidsoap_prometheus=rolling-release-v2.2.x-115-g3665c37 liquidsoap_pulseaudio=rolling-release-v2.2.x-115-g3665c37 liquidsoap_runtime=rolling-release-v2.2.x-115-g3665c37 liquidsoap_samplerate=rolling-release-v2.2.x-115-g3665c37 liquidsoap_sdl=rolling-release-v2.2.x-115-g3665c37 liquidsoap_shine=rolling-release-v2.2.x-115-g3665c37 liquidsoap_soundtouch=rolling-release-v2.2.x-115-g3665c37 liquidsoap_speex=rolling-release-v2.2.x-115-g3665c37 liquidsoap_srt=rolling-release-v2.2.x-115-g3665c37 liquidsoap_ssl=rolling-release-v2.2.x-115-g3665c37 liquidsoap_stereotool=rolling-release-v2.2.x-115-g3665c37 liquidsoap_taglib=rolling-release-v2.2.x-115-g3665c37 liquidsoap_theora=rolling-release-v2.2.x-115-g3665c37 liquidsoap_tls=rolling-release-v2.2.x-115-g3665c37 liquidsoap_vorbis=rolling-release-v2.2.x-115-g3665c37 liquidsoap_xmlplaylist=rolling-release-v2.2.x-115-g3665c37 liquidsoap_yaml=rolling-release-v2.2.x-115-g3665c37 lo=0.2.0 logs=0.7.0 logs.fmt=0.7.0 logs.lwt=0.7.0 lwt=5.6.1 lwt.unix=5.6.1 macaddr=5.5.0 mad=0.5.3 magic=0.7.3 magic-mime=1.3.0 mem_usage=0.0.4 memtrace=0.2.3 menhirLib=20230415 metadata=0.2.0 mirage-crypto=0.11.1 mirage-crypto-ec=0.11.1 mirage-crypto-pk=0.11.1 mirage-crypto-rng=0.11.1 mirage-crypto-rng.unix=0.11.1 mm=0.8.4 mm.audio=0.8.4 mm.base=0.8.4 mm.image=0.8.4 mm.midi=0.8.4 mm.video=0.8.4 ocplib-endian ocplib-endian.bigstring ogg=0.7.4 ogg.decoder=0.7.4 opus=0.2.3 opus.decoder=0.2.3 osc osc-unix parsexp=v0.15.0 pbkdf pcre=7.5.0 portaudio=0.2.3 posix-base=b516d46 posix-socket=b516d46 posix-socket.constants=b516d46 posix-socket.stubs=b516d46 posix-socket.types=b516d46 posix-time2=b516d46 posix-time2.constants=b516d46 posix-time2.stubs=b516d46 posix-time2.types=b516d46 posix-types=b516d46 posix-types.constants=b516d46 ppx_sexp_conv.runtime-lib=v0.15.0 prometheus=1.2 prometheus-app=1.2 ptime=1.1.0 ptime.clock.os=1.1.0 pulseaudio=0.1.6 re=1.10.4 result=1.5 rresult=0.7.0 samplerate=0.1.6 sedlex=3.1 seq=[distributed with OCaml 4.07 or above] sexplib=v0.15.1 sexplib0=v0.15.0 shine=0.2.3 soundtouch=0.1.9 speex=0.4.2 speex.decoder=0.4.2 srt=0.3.0 srt.constants=0.3.0 srt.stubs=0.3.0 srt.stubs.locked=0.3.0 srt.types=0.3.0 ssl=0.5.13 stdlib-shims=0.3.0 stereotool=rolling-release-v2.2.x-115-g3665c37 str=[distributed with OCaml] stringext=1.6.0 taglib=0.3.10 theora=0.4.1 theora.decoder=0.4.1 threads=[distributed with OCaml] threads.posix=[distributed with OCaml] tls=0.17.0 tsdl=v1.0.0 tsdl-image=0.5 tsdl-ttf=0.5 unix=[distributed with OCaml] unix-errno=0.6.2 unix-errno.errno_bindings=0.6.2 unix-errno.errno_types=0.6.2 unix-errno.errno_types_detected=0.6.2 unix-errno.unix=0.6.2 uri=4.2.0 uri-sexp=4.2.0 uri.services=4.2.0 vorbis=0.8.1 vorbis.decoder=0.8.1 x509=0.16.4 xmlm=1.4.0 xmlplaylist=0.1.5 yaml=3.1.0 yaml.bindings=3.1.0 yaml.bindings.types=3.1.0 yaml.c=3.1.0 yaml.ffi=3.1.0 yaml.types=3.1.0 zarith=1.12
2023/06/22 13:15:31 [clock:3] Using native (high-precision) implementation for latency control
2023/06/22 13:15:40 [main:3] Standard library loaded in 8.77 seconds.
2023/06/22 13:15:40 [lang.deprecated:2] WARNING: "mux_video" is deprecated and will be removed in future version. Please use "source" instead.
2023/06/22 13:15:40 [frame:3] Using 44100Hz audio, 25Hz video, 44100Hz main.
2023/06/22 13:15:40 [frame:3] Video frame size set to: 1280x720
2023/06/22 13:15:40 [frame:3] Frame size must be a multiple of 1764 ticks = 1764 audio samples = 1 video samples.
2023/06/22 13:15:40 [frame:3] Targeting 'frame.duration': 0.04s = 1764 audio samples = 1764 ticks.
2023/06/22 13:15:40 [frame:3] Frames last 0.04s = 1764 audio samples = 1 video samples = 1764 ticks.
2023/06/22 13:15:40 [sandbox:3] Sandboxing disabled
2023/06/22 13:15:40 [startup:3] DSSI plugins registration: 0.00s
2023/06/22 13:15:40 [startup:3] FFmpeg filters registration: 0.03s
2023/06/22 13:15:40 [startup:3] FFmpeg bitstream filters registration: 0.01s
2023/06/22 13:15:40 [startup:3] Lilv plugins registration: 0.00s
2023/06/22 13:15:40 [startup:3] Frei0r plugin registration: 0.00s
2023/06/22 13:15:40 [startup:3] LADSPA plugins registration: 0.00s
2023/06/22 13:15:40 [startup:3] Typechecking: 8.55s
2023/06/22 13:15:40 [startup:3] Evaluation: 0.02s
2023/06/22 13:15:40 [startup:3] Typechecking: 0.04s
2023/06/22 13:15:40 [startup:3] Evaluation: 0.00s
2023/06/22 13:15:40 [startup:3] Typechecking: 0.01s
2023/06/22 13:15:40 [startup:3] Evaluation: 0.01s
2023/06/22 13:15:40 [startup:3] Loaded videostream5.liq: 0.02s
2023/06/22 13:15:40 [video.converter:3] Using preferred video converter: ffmpeg.
2023/06/22 13:15:40 [audio.converter:3] Using samplerate converter: libsamplerate.
2023/06/22 13:15:40 [buffer.consumer:3] Content type is {audio=pcm(stereo),video=canvas}.
2023/06/22 13:15:40 [video.add_rectangle.3:3] Content type is {audio=pcm(stereo),video=canvas}.
2023/06/22 13:15:40 [source.6:3] Content type is {audio=pcm(stereo),video=canvas}.
2023/06/22 13:15:40 [video.add.3:3] Content type is {video=canvas}.
2023/06/22 13:15:40 [video.add_rectangle.2:3] Content type is {audio=pcm(stereo),video=canvas}.
2023/06/22 13:15:40 [source.5:3] Content type is {audio=pcm(stereo),video=canvas}.
2023/06/22 13:15:40 [video.add.2:3] Content type is {video=canvas}.
2023/06/22 13:15:40 [video.add_rectangle:3] Content type is {audio=pcm(stereo),video=canvas}.
2023/06/22 13:15:40 [video_add_image:3] Content type is {audio=pcm(stereo),video=canvas}.
2023/06/22 13:15:40 [video.add:3] Content type is {video=canvas}.
2023/06/22 13:15:40 [source.3:3] Content type is {audio=pcm(stereo),video=canvas}.
2023/06/22 13:15:40 [videos:3] Content type is {video=canvas}.
2023/06/22 13:15:40 [safe_blank.2:3] Content type is {video=canvas}.
2023/06/22 13:15:40 [amplify.6:3] Content type is {audio=pcm(stereo)}.
2023/06/22 13:15:40 [amplify.3:3] Content type is {audio=pcm(stereo)}.
2023/06/22 13:15:40 [audio:3] Content type is {audio=pcm(stereo)}.
2023/06/22 13:15:40 [safe_blank:3] Content type is {audio=pcm(stereo)}.
2023/06/22 13:15:40 [amplify.2:3] Content type is {audio=pcm(stereo)}.
2023/06/22 13:15:40 [amplify.5:3] Content type is {audio=pcm(stereo)}.
2023/06/22 13:15:40 [track_video_add_image.2:3] Content type is {video=canvas}.
2023/06/22 13:15:40 [video.crop:3] Content type is {video=canvas}.
2023/06/22 13:15:40 [track_video_add_image:3] "/tmp/videostream/niteradio-cover.png" is static, resolving once for all...
2023/06/22 13:15:40 [decoder:3] Method "ffmpeg" accepted "/tmp/videostream/niteradio-cover.png".
2023/06/22 13:15:40 [source.available:3] Content type is {video=canvas}.
2023/06/22 13:15:40 [video.translate:3] Content type is {video=canvas}.
2023/06/22 13:15:40 [video.info:3] Content type is {video=canvas}.
2023/06/22 13:15:40 [video.crop.2:3] Content type is {video=canvas}.
2023/06/22 13:15:40 [video.text:3] Content type is {video=canvas}.
2023/06/22 13:15:40 [source.available.2:3] Content type is {video=canvas}.
2023/06/22 13:15:40 [video.translate.2:3] Content type is {video=canvas}.
2023/06/22 13:15:40 [video.info.2:3] Content type is {video=canvas}.
2023/06/22 13:15:40 [video.crop.3:3] Content type is {video=canvas}.
2023/06/22 13:15:40 [video.text.2:3] Content type is {video=canvas}.
2023/06/22 13:15:40 [videostream:3] Content type is {audio=pcm(stereo),video=canvas}.
2023/06/22 13:15:40 [buffer.producer:3] Content type is {audio=pcm(stereo),video=canvas}.
2023/06/22 13:15:40 [safe_blank.3:3] Content type is {audio=pcm(stereo),video=canvas}.
2023/06/22 13:15:40 [clock.main:3] Streaming loop starts in auto-sync mode
2023/06/22 13:15:40 [clock.main:3] Delegating synchronization to CPU clock
2023/06/22 13:15:40 [clock.videostream:3] Streaming loop starts in auto-sync mode
2023/06/22 13:15:40 [clock.videostream:3] Delegating synchronization to CPU clock
2023/06/22 13:15:40 [video.text:3] Using sdl implementation
2023/06/22 13:15:40 [mksafe.3:3] Switch to safe_blank.3.
2023/06/22 13:15:40 [decoder.ffmpeg:3] Requested content-type for "/tmp/videostream/videos/Nite Radio Promo.mkv": {video=canvas}
2023/06/22 13:15:40 [decoder.ffmpeg:3] FFmpeg recognizes "/tmp/videostream/videos/Nite Radio Promo.mkv" as video: {codec: h264, 1920x1080, yuv420p}, audio: {codec: aac, 48000Hz, 2 channel(s)}
2023/06/22 13:15:40 [decoder.ffmpeg:3] Decoded content-type for "/tmp/videostream/videos/Nite Radio Promo.mkv": {video=canvas}
2023/06/22 13:15:40 [decoder.ffmpeg:3] Requested content-type for "/tmp/videostream/audio/Paris_Streets_-_JO.BITE_(2).mp3": {audio=pcm(stereo)}
2023/06/22 13:15:40 [decoder.ffmpeg:3] FFmpeg recognizes "/tmp/videostream/audio/Paris_Streets_-_JO.BITE_(2).mp3" as audio: {codec: mp3, 44100Hz, 2 channel(s)}
2023/06/22 13:15:40 [decoder.ffmpeg:3] Decoded content-type for "/tmp/videostream/audio/Paris_Streets_-_JO.BITE_(2).mp3": {audio=pcm(stereo)}
2023/06/22 13:15:40 [decoder.taglib:2] Error while decoding file tags: Taglib.File.Invalid_file
2023/06/22 13:15:40 [videostream:3] Connecting mount /video.m2t for source@radio...
2023/06/22 13:15:40 [decoder:3] Method "ffmpeg" accepted "/tmp/videostream/niteradio-cover.png".
[swscaler @ 0x7f4c10166ec0] Warning: dstStride is not aligned!
->cannot do aligned memory accesses anymore
2023/06/22 13:15:40 [track_video_add_image:3] Prepared "/tmp/videostream/niteradio-cover.png" (RID 0).
[swscaler @ 0x7f4c103eabc0] Warning: dstStride is not aligned!
->cannot do aligned memory accesses anymore
2023/06/22 13:15:40 [mksafe.2:3] Switch to safe_blank.2.
2023/06/22 13:15:41 [videos:3] Prepared "/tmp/videostream/videos/Nite Radio Promo.mkv" (RID 1).
2023/06/22 13:15:41 [mksafe.2:3] Switch to videos with transition.
2023/06/22 13:15:41 [mksafe:3] Switch to safe_blank.
2023/06/22 13:15:41 [audio:3] Prepared "/tmp/videostream/audio/Paris_Streets_-_JO.BITE_(2).mp3" (RID 2).
2023/06/22 13:15:41 [mksafe:3] Switch to audio with transition.
2023/06/22 13:15:41 [clock.main:2] Source buffer.consumer failed while streaming: Invalid_argument("Not a color")!
2023/06/22 13:15:41 [clock.main:2] Raised at Mm_image__ImageBase.RGB8.Color.of_int in file "src/imageBase.ml", line 171, characters 27-65
2023/06/22 13:15:41 [clock.main:2] Called from Video_effects.Getter.map in file "src/core/operators/video_effects.ml", line 43, characters 21-27
2023/06/22 13:15:41 [clock.main:2] Called from Video_effects.(fun) in file "src/core/operators/video_effects.ml", line 232, characters 30-36
2023/06/22 13:15:41 [clock.main:2] Called from Mm_video__Video.MakeCanvas.map in file "src/video.ml", line 135, characters 17-26
2023/06/22 13:15:41 [clock.main:2] Called from Video_effects.base#get_frame in file "src/core/operators/video_effects.ml", line 71, characters 16-60
2023/06/22 13:15:41 [clock.main:2] Called from Source.operator#instrumented_get_frame in file "src/core/source.ml", line 642, characters 6-24
2023/06/22 13:15:41 [clock.main:2] Called from Source.operator#get in file "src/core/source.ml", line 766, characters 12-44
2023/06/22 13:15:41 [clock.main:2] Called from Add.base#feed_track in file "src/core/operators/add.ml", line 73, characters 10-24
2023/06/22 13:15:41 [clock.main:2] Called from Stdlib__List.fold_left in file "list.ml", line 121, characters 24-34
2023/06/22 13:15:41 [clock.main:2] Called from Add.video_add#get_frame in file "src/core/operators/add.ml", line 174, characters 16-40
2023/06/22 13:15:41 [clock.main:2] Called from Source.operator#instrumented_get_frame in file "src/core/source.ml", line 642, characters 6-24
2023/06/22 13:15:41 [clock.main:2] Called from Source.operator#get in file "src/core/source.ml", line 749, characters 10-41
2023/06/22 13:15:41 [clock.main:2] Called from Muxer.muxer#feed_fields in file "src/core/operators/muxer.ml", line 93, characters 8-22
2023/06/22 13:15:41 [clock.main:2] Called from Stdlib__List.iter in file "list.ml", line 110, characters 12-15
2023/06/22 13:15:41 [clock.main:2] Called from Muxer.muxer#feed in file "src/core/operators/muxer.ml", line 110, characters 8-51
2023/06/22 13:15:41 [clock.main:2] Called from Muxer.muxer#get_frame in file "src/core/operators/muxer.ml", line 132, characters 6-31
2023/06/22 13:15:41 [clock.main:2] Called from Source.operator#instrumented_get_frame in file "src/core/source.ml", line 642, characters 6-24
2023/06/22 13:15:41 [clock.main:2] Called from Source.operator#get in file "src/core/source.ml", line 749, characters 10-41
2023/06/22 13:15:41 [clock.main:2] Called from VFrame.get_content in file "src/core/stream/vFrame.ml", line 47, characters 4-20
2023/06/22 13:15:41 [clock.main:2] Called from Video_effects.base#get_frame in file "src/core/operators/video_effects.ml", line 69, characters 12-41
2023/06/22 13:15:41 [clock.main:2] Called from Source.operator#instrumented_get_frame in file "src/core/source.ml", line 642, characters 6-24
2023/06/22 13:15:41 [clock.main:2] Called from Source.operator#get in file "src/core/source.ml", line 766, characters 12-44
2023/06/22 13:15:41 [clock.main:2] Called from Add.base#feed_track in file "src/core/operators/add.ml", line 73, characters 10-24
2023/06/22 13:15:41 [clock.main:2] Called from Stdlib__List.fold_left in file "list.ml", line 121, characters 24-34
2023/06/22 13:15:41 [clock.main:2] Called from Add.video_add#get_frame in file "src/core/operators/add.ml", line 174, characters 16-40
2023/06/22 13:15:41 [clock.main:2] Called from Source.operator#instrumented_get_frame in file "src/core/source.ml", line 642, characters 6-24
2023/06/22 13:15:41 [clock.main:2] Called from Source.operator#get in file "src/core/source.ml", line 749, characters 10-41
2023/06/22 13:15:41 [clock.main:2] Called from Muxer.muxer#feed_fields in file "src/core/operators/muxer.ml", line 93, characters 8-22
2023/06/22 13:15:41 [clock.main:2] Called from Stdlib__List.iter in file "list.ml", line 110, characters 12-15
2023/06/22 13:15:41 [clock.main:2] Called from Muxer.muxer#feed in file "src/core/operators/muxer.ml", line 110, characters 8-51
2023/06/22 13:15:41 [clock.main:2] Called from Muxer.muxer#get_frame in file "src/core/operators/muxer.ml", line 132, characters 6-31
2023/06/22 13:15:41 [clock.main:2] Called from Source.operator#instrumented_get_frame in file "src/core/source.ml", line 642, characters 6-24
2023/06/22 13:15:41 [clock.main:2] Called from Source.operator#get in file "src/core/source.ml", line 749, characters 10-41
2023/06/22 13:15:41 [clock.main:2] Called from VFrame.get_content in file "src/core/stream/vFrame.ml", line 47, characters 4-20
2023/06/22 13:15:41 [clock.main:2] Called from Video_effects.base#get_frame in file "src/core/operators/video_effects.ml", line 69, characters 12-41
2023/06/22 13:15:41 [clock.main:2] Called from Source.operator#instrumented_get_frame in file "src/core/source.ml", line 642, characters 6-24
2023/06/22 13:15:41 [clock.main:2] Called from Source.operator#get in file "src/core/source.ml", line 749, characters 10-41
2023/06/22 13:15:41 [clock.main:2] Called from Output.output#output in file "src/core/outputs/output.ml", line 165, characters 10-30
2023/06/22 13:15:41 [clock.main:2] Called from Clock.MkClock.clock#end_tick.(fun) in file "src/core/clock.ml", line 313, characters 16-24
2023/06/22 13:15:41 [clock.main:2]
2023/06/22 13:15:41 [clock.main:3] Streaming loop stopped.
2023/06/22 13:15:41 [main:3] Shutdown started!
2023/06/22 13:15:41 [main:3] Waiting for main threads to terminate...
2023/06/22 13:15:41 [videostream:3] Connection setup was successful.
2023/06/22 13:15:41 [videostream:3] Closing connection...
2023/06/22 13:15:41 [clock.videostream:3] Streaming loop stopped.
2023/06/22 13:15:41 [main:3] Main threads terminated.
2023/06/22 13:15:41 [threads:3] Shutting down scheduler...
2023/06/22 13:15:41 [threads:3] Scheduler shut down.
2023/06/22 13:15:41 [main:3] Cleaning downloaded files...
2023/06/22 13:15:41 [main:3] Freeing memory...
This is because you are using a non-valid color somewhere (I guess you left an alpha channel there). Il will try to have a smoother error message.
@smimram That was what I suspected, since "videostream5.liq" doesn’t use the new alpha=
but it still worked (backwards-compatible) in 6469ce0. Anyway, I already changed all colors to 0xRRGGBB
and used alpha
but still get the same message.
Will check again, maybe I missed one, after all.
@smimram Caught me indeed! ;-) I actually missed one.
So that means using 0xAARRGGBB
is not only deprecated, but gone altogether now? (Not much of a problem.)
And—if I may—please let us know a good way to set a duration for images that are mixed with videos, so looping doesn’t get "stuck" at the first image. Rationale: See above, some posts back. Maybe it’s just something easy I didn’t yet learn?
Any idea for this?
The real-life problem with this: Once a station operator sees his error (putting an image into a video playlist) and realizes the station is stuck playing the image forever, and he then removes the image again, it will still play the image forever.
For images the duration
metadata is used to control duration. So you can put in your playlist
annotate:duration=5:image.png
and it will display the image for 5 seconds.
Yep, sure, but what with a watched folder playlist that’s intended for videos? We’d never know before if and what kind of images someone put there, and we can’t set duration for the playlist (I think) so it would only affect the images but not the videos.
See:
To be honest, I found this problem by accidentally moving an image into the videos playlist folder. But such things might happen to users in real life, and we wouldn’t want a complete AzuraCast station to fail just because a user accidentally copied an image file into the wrong folder…
Thinking about it, this could actually turn out to be a nice feature for notes or advertisements, if we had sensible defaults, i.e. an image as a
single()
should have a default duration of "endless" (as it is now), but an image in aplaylist()
should have an automatic default of, say, 5 or 15 seconds (settable?).I didn’t dare setting a playlist duration annotation on this watched folder playlist, since I think that might influence the videos.
In the meantime, I’m now running https://github.com/savonet/liquidsoap-release-assets/releases/download/rolling-release-v2.2.x/liquidsoap-3665c37_2.2.0-ubuntu-jammy-1_amd64.deb on my real AzuraCast station (Ubuntu 22.04.2 LTS server, running AzuraCast in a Docker), for some stability testing.
It was actually easier than I expected: Annotating the playlist with a duration sets the duration correctly for images; this will be overwritten for videos with their native duration:
# Annotate a (default) duration of 10s, in case images are used here.
# For videos, the duration will be overwritten by the video’s length.
v = mksafe(playlist(prefix="annotate:duration=10.0:", reload_mode="watch", video_playlist))
Perfect! Closing this as resolved now, thanks @toots and @smimram!
Awesome!
Describe the bug I tried to place a PNG image into a video playlist and Liquidsoap 2.2.0+git@dcf405ff4 crashes when it arrives at trying to "play" it.
EDIT: It also crashes when using a JPG image.
To Reproduce My script
The image I used in the "videostream/videos" folder:
LS output (level 4):
Expected behavior I somehow expected LS to be able to "play" an image, probably using some defaults (i.e., for duration).
Version details
Install method
.deb
from https://github.com/savonet/liquidsoap-release-assets/releases/download/rolling-release-v2.2.x/liquidsoap-dcf405f_2.2.0-ubuntu-jammy-1_amd64.deb