savonet / liquidsoap

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

LS 2.2.0+git@dcf405ff4 crashes when trying to play an image in a video playlist #3157

Closed Moonbase59 closed 1 year ago

Moonbase59 commented 1 year ago

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

#
# VIDEO STREAM 
#

# For debugging
settings.log.level := 4

# Video format (defaults)
#settings.frame.video.width := 1280
#settings.frame.video.height := 720
#settings.frame.video.framerate := 25

# Edit This: Station Base Directory
#station_base_dir = "/var/azuracast/stations/niteradio"
station_base_dir = "/home/matthias"

# Video playlist (a watched folder)
video_playlist = station_base_dir ^ "/media/videostream/videos/"

# Font and station logo
font_file = station_base_dir ^ "/media/videostream/Erikas_Farbband_Regular.ttf"
# Maximum length of text in characters (shorten will add a "…") -- depends on font used
font_maxlen = 53
logo_file = station_base_dir ^ "/media/videostream/niteradio-cover.png"

# Fake a radio stream, using a playlist
#a = mksafe(playlist("~/Musik/Electronic.m3u"))
#a = amplify(1.,override="replaygain_track_gain", a)
a = mksafe(input.http("http://radio:8000/radio.aac"))

# reduce volume target from -18 LUFS to EBU recommended -23 LUFS
a = amplify(0.562, a)

# Shorten string so it fits on screen (depends on font, must be measured)
def shorten(s, l=font_maxlen)
  if string.length(s) > l then
    # Using 3 periods instead of real ellipsis, because ellipsis isn’t fully displayed
    string.sub(s, start=0, length=l) ^ "..."
  else
    s
  end
end

# Add Now Playing metadata
# If we get an empty artist, assume a stream
# and try to split the title into artist and title.
nowplaying = ref("")
def update_nowplaying(m)
    nowplaying.set(shorten(m["title"]) ^ "\n" ^ shorten(m["artist"]))
    if string.length(m["artist"]) <= 0 then
      if string.contains(substring=" - ", m["title"]) then
          let (a, t) = string.split.first(separator=" - ", m["title"])
          nowplaying.set(shorten(t) ^ "\n" ^ shorten(a))
      end
    end
end
a.on_metadata(update_nowplaying)

# calculate % played of current video track
def v_percent(s)
  source.elapsed(s) / source.duration(s) * 100.0
end

#v = video.testsrc(width=1280, height=720)
v = mksafe(playlist(reload_mode="watch", video_playlist))
s = mux_video(video=v, a)

# pre-calculate since everything done per frame is costly
px_per_pct = 1280.0/100.0

s = video.add_image(x=50, y=50, width=100, height=100, file=logo_file, s)
s = video.add_rectangle(color=0x80444444, height=108, width=1280, x=0, y=562, s)
s = video.add_text(font=font_file, size=40, x=50, y=572, color=0xebebeb, {nowplaying()}, s)
# progress bar for audio track (will stay empty if unknown, i.e. with streams)
s = video.add_rectangle(color=0xc0ebebeb, x=0, y=662, height=4, width={int(px_per_pct*v_percent(a))}, s)
# progress bar for video track
s = video.add_rectangle(color=0xc0ebebeb, x=0, y=666, height=4, width={int(px_per_pct*v_percent(v))}, s)

# Icecast video stream shall get its own clock, for decoupling
videostream = mksafe(buffer(s))
clock.assign_new(id="videostream", [videostream])

output.icecast(%ffmpeg(format="mpegts",
  %audio(codec="ac3",channel_coupling=0),
  %video(codec="libx264",b="2600k",
         "x264-params"="scenecut=0:open_gop=0:min-keyint=150:keyint=150",
         preset="ultrafast")),
host="radio", port=8000, password="mysecretpassword", mount="/video.m2t", send_icy_metadata=true, public=false, videostream)

The image I used in the "videostream/videos" folder: Come to the Dark Side

LS output (level 4):

INFO: Loading Sdl_image, Target = linux
INFO: Loading Sdl_ttf, Target = linux
2023/06/18 09:58:58 >>> LOG START
2023/06/18 09:58:51 [main:3] Liquidsoap 2.2.0+git@dcf405ff4
2023/06/18 09:58:51 [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=d3773ec camomile.lib=d3773ec 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-91-gdcf405f liquidsoap_ao=rolling-release-v2.2.x-91-gdcf405f liquidsoap_bjack=rolling-release-v2.2.x-91-gdcf405f liquidsoap_builtins=rolling-release-v2.2.x-91-gdcf405f liquidsoap_camlimages=rolling-release-v2.2.x-91-gdcf405f liquidsoap_core=rolling-release-v2.2.x-91-gdcf405f liquidsoap_dssi=rolling-release-v2.2.x-91-gdcf405f liquidsoap_faad=rolling-release-v2.2.x-91-gdcf405f liquidsoap_fdkaac=rolling-release-v2.2.x-91-gdcf405f liquidsoap_ffmpeg=rolling-release-v2.2.x-91-gdcf405f liquidsoap_flac=rolling-release-v2.2.x-91-gdcf405f liquidsoap_frei0r=rolling-release-v2.2.x-91-gdcf405f liquidsoap_gd=rolling-release-v2.2.x-91-gdcf405f liquidsoap_irc=rolling-release-v2.2.x-91-gdcf405f liquidsoap_ladspa=rolling-release-v2.2.x-91-gdcf405f liquidsoap_lame=rolling-release-v2.2.x-91-gdcf405f liquidsoap_lastfm=rolling-release-v2.2.x-91-gdcf405f liquidsoap_lilv=rolling-release-v2.2.x-91-gdcf405f liquidsoap_lo=rolling-release-v2.2.x-91-gdcf405f liquidsoap_mad=rolling-release-v2.2.x-91-gdcf405f liquidsoap_magic=rolling-release-v2.2.x-91-gdcf405f liquidsoap_mem_usage=rolling-release-v2.2.x-91-gdcf405f liquidsoap_memtrace=rolling-release-v2.2.x-91-gdcf405f liquidsoap_ogg=rolling-release-v2.2.x-91-gdcf405f liquidsoap_ogg_flac=rolling-release-v2.2.x-91-gdcf405f liquidsoap_optionals=rolling-release-v2.2.x-91-gdcf405f liquidsoap_opus=rolling-release-v2.2.x-91-gdcf405f liquidsoap_osc=rolling-release-v2.2.x-91-gdcf405f liquidsoap_oss=rolling-release-v2.2.x-91-gdcf405f liquidsoap_portaudio=rolling-release-v2.2.x-91-gdcf405f liquidsoap_posix_time=rolling-release-v2.2.x-91-gdcf405f liquidsoap_prometheus=rolling-release-v2.2.x-91-gdcf405f liquidsoap_pulseaudio=rolling-release-v2.2.x-91-gdcf405f liquidsoap_runtime=rolling-release-v2.2.x-91-gdcf405f liquidsoap_samplerate=rolling-release-v2.2.x-91-gdcf405f liquidsoap_sdl=rolling-release-v2.2.x-91-gdcf405f liquidsoap_shine=rolling-release-v2.2.x-91-gdcf405f liquidsoap_soundtouch=rolling-release-v2.2.x-91-gdcf405f liquidsoap_speex=rolling-release-v2.2.x-91-gdcf405f liquidsoap_srt=rolling-release-v2.2.x-91-gdcf405f liquidsoap_ssl=rolling-release-v2.2.x-91-gdcf405f liquidsoap_stereotool=rolling-release-v2.2.x-91-gdcf405f liquidsoap_taglib=rolling-release-v2.2.x-91-gdcf405f liquidsoap_theora=rolling-release-v2.2.x-91-gdcf405f liquidsoap_tls=rolling-release-v2.2.x-91-gdcf405f liquidsoap_vorbis=rolling-release-v2.2.x-91-gdcf405f liquidsoap_xmlplaylist=rolling-release-v2.2.x-91-gdcf405f liquidsoap_yaml=rolling-release-v2.2.x-91-gdcf405f 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-91-gdcf405f 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/18 09:58:51 [clock:3] Using native (high-precision) implementation for latency control
2023/06/18 09:58:58 [main:3] Standard library loaded in 7.67 seconds.
2023/06/18 09:58:58 [frame:4] frame.audio.samplerate set to: 44100
2023/06/18 09:58:58 [frame:4] frame.video.framerate set to: 25
2023/06/18 09:58:58 [videos:4] Reloading playlist.
2023/06/18 09:58:58 [videos:4] Playlist is a directory.
2023/06/18 09:58:58 [lang.deprecated:2] WARNING: "mux_video" is deprecated and will be removed in future version. Please use "source" instead.
2023/06/18 09:58:58 [frame:4] frame.video.width set to: 1280
2023/06/18 09:58:58 [frame:4] frame.video.height set to: 720
2023/06/18 09:58:58 [frame:4] frame.audio.channels set to: 2
2023/06/18 09:58:58 [frame:4] frame.video.default set to: false
2023/06/18 09:58:58 [frame:4] frame.midi.channels set to: 0
2023/06/18 09:58:58 [frame:4] frame.audio.samplerate set to: 44100
2023/06/18 09:58:58 [frame:3] Using 44100Hz audio, 25Hz video, 44100Hz main.
2023/06/18 09:58:58 [frame:3] Video frame size set to: 1280x720
2023/06/18 09:58:58 [frame:3] Frame size must be a multiple of 1764 ticks = 1764 audio samples = 1 video samples.
2023/06/18 09:58:58 [frame:3] Targeting 'frame.duration': 0.04s = 1764 audio samples = 1764 ticks.
2023/06/18 09:58:58 [frame:3] Frames last 0.04s = 1764 audio samples = 1 video samples = 1764 ticks.
2023/06/18 09:58:58 [sandbox:3] Sandboxing disabled
2023/06/18 09:58:58 [startup:3] DSSI plugins registration: 0.00s
2023/06/18 09:58:58 [startup:3] FFmpeg filters registration: 0.10s
2023/06/18 09:58:58 [startup:3] FFmpeg bitstream filters registration: 0.00s
2023/06/18 09:58:58 [startup:3] Lilv plugins registration: 0.02s
2023/06/18 09:58:58 [startup:3] Frei0r plugin registration: 0.00s
2023/06/18 09:58:58 [startup:3] LADSPA plugins registration: 0.00s
2023/06/18 09:58:58 [startup:3] Typechecking: 7.45s
2023/06/18 09:58:58 [startup:3] Evaluation: 0.02s
2023/06/18 09:58:58 [startup:3] Typechecking: 0.05s
2023/06/18 09:58:58 [startup:3] Evaluation: 0.00s
2023/06/18 09:58:58 [startup:3] Typechecking: 0.02s
2023/06/18 09:58:58 [startup:3] Evaluation: 0.00s
2023/06/18 09:58:58 [startup:3] Loaded videostream4.liq: 0.02s
2023/06/18 09:58:58 [video.converter:3] Using preferred video converter: ffmpeg.
2023/06/18 09:58:58 [audio.converter:3] Using samplerate converter: libsamplerate.
2023/06/18 09:58:58 [clock:4] Currently 2 clock(s) allocated.
2023/06/18 09:58:58 [clock.videostream:4] Starting 1 source(s)...
2023/06/18 09:58:58 [source:4] Source output.icecast gets up with content type: {audio=pcm(stereo),video=canvas}.
2023/06/18 09:58:58 [/video_m2t:3] Content type is {audio=pcm(stereo),video=canvas}.
2023/06/18 09:58:58 [source:4] Source mksafe.3 gets up with content type: {audio=pcm(stereo),video=canvas}.
2023/06/18 09:58:58 [source:4] Source buffer.producer gets up with content type: {audio=pcm(stereo),video=canvas}.
2023/06/18 09:58:58 [buffer.producer:3] Content type is {audio=pcm(stereo),video=canvas}.
2023/06/18 09:58:58 [source:4] Source safe_blank.3 gets up with content type: {audio=pcm(stereo),video=canvas}.
2023/06/18 09:58:58 [safe_blank.3:3] Content type is {audio=pcm(stereo),video=canvas}.
2023/06/18 09:58:58 [threads:4] Created thread "clock_videostream" (1 total).
2023/06/18 09:58:58 [clock.main:4] Starting 2 source(s)...
2023/06/18 09:58:58 [source:4] Source input.http gets up with content type: {audio=pcm(stereo)}.
2023/06/18 09:58:58 [source:4] Source buffer.consumer gets up with content type: {audio=pcm(stereo),video=canvas}.
2023/06/18 09:58:58 [buffer.consumer:3] Content type is {audio=pcm(stereo),video=canvas}.
2023/06/18 09:58:58 [source:4] Source video.rectangle.3 gets up with content type: {audio=pcm(stereo),video=canvas}.
2023/06/18 09:58:58 [video.rectangle.3:3] Content type is {audio=pcm(stereo),video=canvas}.
2023/06/18 09:58:58 [source:4] Source video.rectangle.2 gets up with content type: {audio=pcm(stereo),video=canvas}.
2023/06/18 09:58:58 [video.rectangle.2:3] Content type is {audio=pcm(stereo),video=canvas}.
2023/06/18 09:58:58 [source:4] Source source.4 gets up with content type: {audio=pcm(stereo),video=canvas}.
2023/06/18 09:58:58 [source.4:3] Content type is {audio=pcm(stereo),video=canvas}.
2023/06/18 09:58:58 [source:4] Source video.add.2 gets up with content type: {video=canvas}.
2023/06/18 09:58:58 [video.add.2:3] Content type is {video=canvas}.
2023/06/18 09:58:58 [source:4] Source video.rectangle gets up with content type: {audio=pcm(stereo),video=canvas}.
2023/06/18 09:58:58 [video.rectangle:3] Content type is {audio=pcm(stereo),video=canvas}.
2023/06/18 09:58:58 [source:4] Source video_add_image gets up with content type: {audio=pcm(stereo),video=canvas}.
2023/06/18 09:58:58 [video_add_image:3] Content type is {audio=pcm(stereo),video=canvas}.
2023/06/18 09:58:58 [source:4] Source video.add gets up with content type: {video=canvas}.
2023/06/18 09:58:58 [video.add:3] Content type is {video=canvas}.
2023/06/18 09:58:58 [source:4] Source source.2 gets up with content type: {audio=pcm(stereo),video=canvas}.
2023/06/18 09:58:58 [source.2:3] Content type is {audio=pcm(stereo),video=canvas}.
2023/06/18 09:58:58 [source:4] Source mksafe.2 gets up with content type: {video=canvas}.
2023/06/18 09:58:58 [source:4] Source videos gets up with content type: {video=canvas}.
2023/06/18 09:58:58 [videos:3] Content type is {video=canvas}.
2023/06/18 09:58:58 [source:4] Source safe_blank.2 gets up with content type: {video=canvas}.
2023/06/18 09:58:58 [safe_blank.2:3] Content type is {video=canvas}.
2023/06/18 09:58:58 [source:4] Source amplify.3 gets up with content type: {audio=pcm(stereo)}.
2023/06/18 09:58:58 [amplify.3:3] Content type is {audio=pcm(stereo)}.
2023/06/18 09:58:58 [source:4] Source mksafe gets up with content type: {audio=pcm(stereo)}.
2023/06/18 09:58:58 [source:4] Source safe_blank gets up with content type: {audio=pcm(stereo)}.
2023/06/18 09:58:58 [safe_blank:3] Content type is {audio=pcm(stereo)}.
2023/06/18 09:58:58 [source:4] Source amplify.2 gets up with content type: {audio=pcm(stereo)}.
2023/06/18 09:58:58 [amplify.2:3] Content type is {audio=pcm(stereo)}.
2023/06/18 09:58:58 [source:4] Source track_video_add_image.2 gets up with content type: {video=canvas}.
2023/06/18 09:58:58 [track_video_add_image.2:3] Content type is {video=canvas}.
2023/06/18 09:58:58 [source:4] Source video.crop gets up with content type: {video=canvas}.
2023/06/18 09:58:58 [video.crop:3] Content type is {video=canvas}.
2023/06/18 09:58:58 [source:4] Source track_video_add_image gets up with content type: {video=canvas}.
2023/06/18 09:58:58 [track_video_add_image:3] "/home/matthias/media/videostream/niteradio-cover.png" is static, resolving once for all...
2023/06/18 09:58:58 [clock.videostream:3] Streaming loop starts in auto-sync mode
2023/06/18 09:58:58 [clock.videostream:3] Delegating synchronization to CPU clock
2023/06/18 09:58:58 [decoder.ogg:4] Unsupported file extension for "/home/matthias/media/videostream/niteradio-cover.png"!
2023/06/18 09:58:58 [decoder.ogg:4] Unsupported MIME type for "/home/matthias/media/videostream/niteradio-cover.png": image/png!
2023/06/18 09:58:58 [decoder.srt:4] Unsupported file extension for "/home/matthias/media/videostream/niteradio-cover.png"!
2023/06/18 09:58:58 [decoder.srt:4] Unsupported MIME type for "/home/matthias/media/videostream/niteradio-cover.png": image/png!
2023/06/18 09:58:58 [decoder:4] Available decoders: ffmpeg (priority: 10), image (priority: 1)
2023/06/18 09:58:58 [decoder:4] Trying decoder "ffmpeg"
2023/06/18 09:58:58 [decoder:4] Cannot decode file "/home/matthias/media/videostream/niteradio-cover.png" with decoder ffmpeg as {video=canvas}. Detected content: {}
2023/06/18 09:58:58 [decoder:4] Trying decoder "image"
2023/06/18 09:58:58 [decoder:4] Trying method "sdl/image" for "/home/matthias/media/videostream/niteradio-cover.png"...
2023/06/18 09:58:58 [decoder:4] Decoder "sdl/image" failed on "/home/matthias/media/videostream/niteradio-cover.png": Failure("img_of_surface: unhandled format 376840196")!
2023/06/18 09:58:58 [decoder:4] Trying method "ffmpeg" for "/home/matthias/media/videostream/niteradio-cover.png"...
2023/06/18 09:58:58 [mksafe.3:3] Switch to safe_blank.3.
[swscaler @ 0x7f99040086c0] Warning: data is not aligned! This can lead to a speed loss
2023/06/18 09:58:58 [decoder:3] Method "ffmpeg" accepted "/home/matthias/media/videostream/niteradio-cover.png".
2023/06/18 09:58:58 [decoder:4] Selected decoder image for file "/home/matthias/media/videostream/niteradio-cover.png" with expected kind {video=canvas} and detected content {video=canvas}
2023/06/18 09:58:58 [decoder.video.metadata:4] Unsupported file extension for "/home/matthias/media/videostream/niteradio-cover.png"!
2023/06/18 09:58:58 [decoder.video.metadata:4] Unsupported MIME type for "/home/matthias/media/videostream/niteradio-cover.png": image/png!
2023/06/18 09:58:58 [decoder.ogg.metadata:4] Unsupported file extension for "/home/matthias/media/videostream/niteradio-cover.png"!
2023/06/18 09:58:58 [decoder.ogg.metadata:4] Unsupported MIME type for "/home/matthias/media/videostream/niteradio-cover.png": image/png!
2023/06/18 09:58:58 [decoder.id3:4] Unsupported file extension for "/home/matthias/media/videostream/niteradio-cover.png"!
2023/06/18 09:58:58 [decoder.id3:4] Unsupported MIME type for "/home/matthias/media/videostream/niteradio-cover.png": image/png!
2023/06/18 09:58:58 [decoder.id3:4] Unsupported file extension for "/home/matthias/media/videostream/niteradio-cover.png"!
2023/06/18 09:58:58 [decoder.id3:4] Unsupported MIME type for "/home/matthias/media/videostream/niteradio-cover.png": image/png!
2023/06/18 09:58:58 [decoder.id3:4] Unsupported file extension for "/home/matthias/media/videostream/niteradio-cover.png"!
2023/06/18 09:58:58 [decoder.id3:4] Unsupported MIME type for "/home/matthias/media/videostream/niteradio-cover.png": image/png!
2023/06/18 09:58:58 [decoder.flac.metadata:4] Unsupported file extension for "/home/matthias/media/videostream/niteradio-cover.png"!
2023/06/18 09:58:58 [decoder.flac.metadata:4] Unsupported MIME type for "/home/matthias/media/videostream/niteradio-cover.png": image/png!
2023/06/18 09:58:58 [metadata.mp4:4] Unsupported file extension for "/home/matthias/media/videostream/niteradio-cover.png"!
2023/06/18 09:58:58 [metadata.mp4:4] Unsupported MIME type for "/home/matthias/media/videostream/niteradio-cover.png": image/png!
2023/06/18 09:58:58 [/video_m2t:3] Connecting mount /video.m2t for source@radio...
2023/06/18 09:58:58 [metadata.flac:4] Unsupported file extension for "/home/matthias/media/videostream/niteradio-cover.png"!
2023/06/18 09:58:58 [metadata.flac:4] Unsupported MIME type for "/home/matthias/media/videostream/niteradio-cover.png": image/png!
2023/06/18 09:58:58 [decoder.ogg:4] Unsupported file extension for "/home/matthias/media/videostream/niteradio-cover.png"!
2023/06/18 09:58:58 [decoder.ogg:4] Unsupported MIME type for "/home/matthias/media/videostream/niteradio-cover.png": image/png!
2023/06/18 09:58:58 [decoder.taglib:4] Unsupported file extension for "/home/matthias/media/videostream/niteradio-cover.png"!
2023/06/18 09:58:58 [decoder.taglib:4] Unsupported MIME type for "/home/matthias/media/videostream/niteradio-cover.png": image/png!
2023/06/18 09:58:58 [source:4] Source source.available gets up with content type: {video=canvas}.
2023/06/18 09:58:58 [source.available:3] Content type is {video=canvas}.
2023/06/18 09:58:58 [source:4] Source video.translate gets up with content type: {video=canvas}.
2023/06/18 09:58:58 [video.translate:3] Content type is {video=canvas}.
2023/06/18 09:58:58 [source:4] Source video.info gets up with content type: {video=canvas}.
2023/06/18 09:58:58 [video.info:3] Content type is {video=canvas}.
2023/06/18 09:58:58 [source:4] Source video.crop.2 gets up with content type: {video=canvas}.
2023/06/18 09:58:58 [video.crop.2:3] Content type is {video=canvas}.
2023/06/18 09:58:58 [source:4] Source video.text gets up with content type: {video=canvas}.
2023/06/18 09:58:58 [video.text:3] Content type is {video=canvas}.
2023/06/18 09:58:58 [threads:4] Created thread "clock_main" (2 total).
2023/06/18 09:58:58 [clock:4] Main phase starts.
2023/06/18 09:58:58 [threads:4] Created thread "generic queue #1" (1 total).
2023/06/18 09:58:58 [threads:4] Created thread "generic queue #2" (2 total).
2023/06/18 09:58:58 [threads:4] Created thread "non-blocking queue #1" (3 total).
2023/06/18 09:58:58 [threads:4] Created thread "non-blocking queue #2" (4 total).
2023/06/18 09:58:58 [video.text:3] Using sdl implementation
2023/06/18 09:58:58 [decoder.ogg:4] Unsupported file extension for "/home/matthias/media/videostream/videos/Come to the Dark Side.png"!
2023/06/18 09:58:58 [decoder.ogg:4] Unsupported MIME type for "/home/matthias/media/videostream/videos/Come to the Dark Side.png": image/png!
2023/06/18 09:58:58 [decoder.srt:4] Unsupported file extension for "/home/matthias/media/videostream/videos/Come to the Dark Side.png"!
2023/06/18 09:58:58 [decoder.srt:4] Unsupported MIME type for "/home/matthias/media/videostream/videos/Come to the Dark Side.png": image/png!
2023/06/18 09:58:58 [decoder:4] Available decoders: ffmpeg (priority: 10), image (priority: 1)
2023/06/18 09:58:58 [decoder:4] Trying decoder "ffmpeg"
2023/06/18 09:58:58 [decoder:4] Cannot decode file "/home/matthias/media/videostream/videos/Come to the Dark Side.png" with decoder ffmpeg as {video=canvas}. Detected content: {}
2023/06/18 09:58:58 [decoder:4] Trying decoder "image"
2023/06/18 09:58:58 [decoder:4] Trying method "sdl/image" for "/home/matthias/media/videostream/videos/Come to the Dark Side.png"...
2023/06/18 09:58:58 [decoder:4] Decoder "sdl/image" failed on "/home/matthias/media/videostream/videos/Come to the Dark Side.png": Failure("img_of_surface: unhandled format 376840196")!
2023/06/18 09:58:58 [decoder:4] Trying method "ffmpeg" for "/home/matthias/media/videostream/videos/Come to the Dark Side.png"...
2023/06/18 09:58:58 [clock.main:3] Streaming loop starts in auto-sync mode
2023/06/18 09:58:58 [clock.main:3] Delegating synchronization to CPU clock
2023/06/18 09:58:58 [decoder.ffmpeg:3] Requested content-type for "http://radio:8000/radio.aac": {audio=pcm(stereo)}
2023/06/18 09:58:58 [decoder.ffmpeg:3] FFmpeg recognizes "http://radio:8000/radio.aac" as audio: {codec: aac, 44100Hz, 2 channel(s)}
2023/06/18 09:58:58 [decoder.ffmpeg:3] Decoded content-type for "http://radio:8000/radio.aac": {audio=pcm(stereo)}
2023/06/18 09:58:58 [decoder:4] Trying method "sdl/image" for "/home/matthias/media/videostream/niteradio-cover.png"...
2023/06/18 09:58:59 [decoder:4] Decoder "sdl/image" failed on "/home/matthias/media/videostream/niteradio-cover.png": Failure("img_of_surface: unhandled format 376840196")!
2023/06/18 09:58:59 [decoder:4] Trying method "ffmpeg" for "/home/matthias/media/videostream/niteradio-cover.png"...
2023/06/18 09:58:59 [decoder:3] Method "ffmpeg" accepted "/home/matthias/media/videostream/videos/Come to the Dark Side.png".
2023/06/18 09:58:59 [decoder:4] Selected decoder image for file "/home/matthias/media/videostream/videos/Come to the Dark Side.png" with expected kind {video=canvas} and detected content {video=canvas}
2023/06/18 09:58:59 [decoder.video.metadata:4] Unsupported file extension for "/home/matthias/media/videostream/videos/Come to the Dark Side.png"!
2023/06/18 09:58:59 [decoder.video.metadata:4] Unsupported MIME type for "/home/matthias/media/videostream/videos/Come to the Dark Side.png": image/png!
2023/06/18 09:58:59 [decoder.ogg.metadata:4] Unsupported file extension for "/home/matthias/media/videostream/videos/Come to the Dark Side.png"!
2023/06/18 09:58:59 [decoder.ogg.metadata:4] Unsupported MIME type for "/home/matthias/media/videostream/videos/Come to the Dark Side.png": image/png!
2023/06/18 09:58:59 [decoder.id3:4] Unsupported file extension for "/home/matthias/media/videostream/videos/Come to the Dark Side.png"!
2023/06/18 09:58:59 [decoder.id3:4] Unsupported MIME type for "/home/matthias/media/videostream/videos/Come to the Dark Side.png": image/png!
2023/06/18 09:58:59 [decoder.id3:4] Unsupported file extension for "/home/matthias/media/videostream/videos/Come to the Dark Side.png"!
2023/06/18 09:58:59 [decoder.id3:4] Unsupported MIME type for "/home/matthias/media/videostream/videos/Come to the Dark Side.png": image/png!
2023/06/18 09:58:59 [decoder.id3:4] Unsupported file extension for "/home/matthias/media/videostream/videos/Come to the Dark Side.png"!
2023/06/18 09:58:59 [decoder.id3:4] Unsupported MIME type for "/home/matthias/media/videostream/videos/Come to the Dark Side.png": image/png!
2023/06/18 09:58:59 [decoder.flac.metadata:4] Unsupported file extension for "/home/matthias/media/videostream/videos/Come to the Dark Side.png"!
2023/06/18 09:58:59 [decoder.flac.metadata:4] Unsupported MIME type for "/home/matthias/media/videostream/videos/Come to the Dark Side.png": image/png!
2023/06/18 09:58:59 [metadata.mp4:4] Unsupported file extension for "/home/matthias/media/videostream/videos/Come to the Dark Side.png"!
2023/06/18 09:58:59 [metadata.mp4:4] Unsupported MIME type for "/home/matthias/media/videostream/videos/Come to the Dark Side.png": image/png!
2023/06/18 09:58:59 [decoder:3] Method "ffmpeg" accepted "/home/matthias/media/videostream/niteradio-cover.png".
[swscaler @ 0x7f98e057d640] Warning: dstStride is not aligned!
         ->cannot do aligned memory accesses anymore
2023/06/18 09:58:59 [track_video_add_image:3] Prepared "/home/matthias/media/videostream/niteradio-cover.png" (RID 0).
2023/06/18 09:58:59 [mksafe.2:3] Switch to safe_blank.2.
2023/06/18 09:58:59 [mksafe:3] Switch to safe_blank.
2023/06/18 09:58:59 [mksafe:3] Switch to input.http with transition.
2023/06/18 09:58:59 [source:4] Source replay_metadata gets up with content type: {audio=pcm(stereo)}.
2023/06/18 09:58:59 [replay_metadata:3] Content type is {audio=pcm(stereo)}.
2023/06/18 09:58:59 [clock.main:3] Delegating synchronization to active sources
2023/06/18 09:58:59 [metadata.flac:4] Unsupported file extension for "/home/matthias/media/videostream/videos/Come to the Dark Side.png"!
2023/06/18 09:58:59 [metadata.flac:4] Unsupported MIME type for "/home/matthias/media/videostream/videos/Come to the Dark Side.png": image/png!
2023/06/18 09:58:59 [decoder.ogg:4] Unsupported file extension for "/home/matthias/media/videostream/videos/Come to the Dark Side.png"!
2023/06/18 09:58:59 [decoder.ogg:4] Unsupported MIME type for "/home/matthias/media/videostream/videos/Come to the Dark Side.png": image/png!
2023/06/18 09:58:59 [decoder.taglib:4] Unsupported file extension for "/home/matthias/media/videostream/videos/Come to the Dark Side.png"!
2023/06/18 09:58:59 [decoder.taglib:4] Unsupported MIME type for "/home/matthias/media/videostream/videos/Come to the Dark Side.png": image/png!
2023/06/18 09:58:59 [videos:4] Queued 1 requests
2023/06/18 09:58:59 [videos:4] Remaining 0 requests
2023/06/18 09:58:59 [decoder:4] Trying method "sdl/image" for "/home/matthias/media/videostream/videos/Come to the Dark Side.png"...
2023/06/18 09:58:59 [decoder:4] Decoder "sdl/image" failed on "/home/matthias/media/videostream/videos/Come to the Dark Side.png": Failure("img_of_surface: unhandled format 376840196")!
2023/06/18 09:58:59 [decoder:4] Trying method "ffmpeg" for "/home/matthias/media/videostream/videos/Come to the Dark Side.png"...
2023/06/18 09:58:59 [decoder.ogg:4] Unsupported file extension for "/home/matthias/media/videostream/videos/VJ Loops - Hyperspace Journey 25fps.mkv"!
2023/06/18 09:58:59 [decoder.ogg:4] Unsupported MIME type for "/home/matthias/media/videostream/videos/VJ Loops - Hyperspace Journey 25fps.mkv": video/x-matroska!
2023/06/18 09:58:59 [decoder.srt:4] Unsupported file extension for "/home/matthias/media/videostream/videos/VJ Loops - Hyperspace Journey 25fps.mkv"!
2023/06/18 09:58:59 [decoder.srt:4] Unsupported MIME type for "/home/matthias/media/videostream/videos/VJ Loops - Hyperspace Journey 25fps.mkv": video/x-matroska!
2023/06/18 09:58:59 [decoder:4] Available decoders: ffmpeg (priority: 10), image (priority: 1)
2023/06/18 09:58:59 [decoder:4] Trying decoder "ffmpeg"
2023/06/18 09:58:59 [/video_m2t:3] Connection setup was successful.
2023/06/18 09:58:59 [decoder.ffmpeg:3] Requested content-type for "/home/matthias/media/videostream/videos/VJ Loops - Hyperspace Journey 25fps.mkv": {video=canvas}
2023/06/18 09:58:59 [decoder.ffmpeg:3] FFmpeg recognizes "/home/matthias/media/videostream/videos/VJ Loops - Hyperspace Journey 25fps.mkv" as video: {codec: h264, 1920x1080, yuv420p}, audio: {codec: aac, 44100Hz, 2 channel(s)}
2023/06/18 09:58:59 [decoder.ffmpeg:3] Decoded content-type for "/home/matthias/media/videostream/videos/VJ Loops - Hyperspace Journey 25fps.mkv": {video=canvas}
2023/06/18 09:58:59 [decoder:4] Selected decoder ffmpeg for file "/home/matthias/media/videostream/videos/VJ Loops - Hyperspace Journey 25fps.mkv" with expected kind {video=canvas} and detected content {video=canvas}
2023/06/18 09:58:59 [decoder.video.metadata:4] Unsupported file extension for "/home/matthias/media/videostream/videos/VJ Loops - Hyperspace Journey 25fps.mkv"!
2023/06/18 09:58:59 [decoder.video.metadata:4] Unsupported MIME type for "/home/matthias/media/videostream/videos/VJ Loops - Hyperspace Journey 25fps.mkv": video/x-matroska!
2023/06/18 09:58:59 [decoder.ogg.metadata:4] Unsupported file extension for "/home/matthias/media/videostream/videos/VJ Loops - Hyperspace Journey 25fps.mkv"!
2023/06/18 09:58:59 [decoder.ogg.metadata:4] Unsupported MIME type for "/home/matthias/media/videostream/videos/VJ Loops - Hyperspace Journey 25fps.mkv": video/x-matroska!
2023/06/18 09:58:59 [decoder.image.metadata:4] Unsupported file extension for "/home/matthias/media/videostream/videos/VJ Loops - Hyperspace Journey 25fps.mkv"!
2023/06/18 09:58:59 [decoder.image.metadata:4] Unsupported MIME type for "/home/matthias/media/videostream/videos/VJ Loops - Hyperspace Journey 25fps.mkv": video/x-matroska!
2023/06/18 09:58:59 [decoder.id3:4] Unsupported file extension for "/home/matthias/media/videostream/videos/VJ Loops - Hyperspace Journey 25fps.mkv"!
2023/06/18 09:58:59 [decoder.id3:4] Unsupported MIME type for "/home/matthias/media/videostream/videos/VJ Loops - Hyperspace Journey 25fps.mkv": video/x-matroska!
2023/06/18 09:58:59 [decoder.id3:4] Unsupported file extension for "/home/matthias/media/videostream/videos/VJ Loops - Hyperspace Journey 25fps.mkv"!
2023/06/18 09:58:59 [decoder.id3:4] Unsupported MIME type for "/home/matthias/media/videostream/videos/VJ Loops - Hyperspace Journey 25fps.mkv": video/x-matroska!
2023/06/18 09:58:59 [decoder.id3:4] Unsupported file extension for "/home/matthias/media/videostream/videos/VJ Loops - Hyperspace Journey 25fps.mkv"!
2023/06/18 09:58:59 [decoder.id3:4] Unsupported MIME type for "/home/matthias/media/videostream/videos/VJ Loops - Hyperspace Journey 25fps.mkv": video/x-matroska!
2023/06/18 09:58:59 [decoder.flac.metadata:4] Unsupported file extension for "/home/matthias/media/videostream/videos/VJ Loops - Hyperspace Journey 25fps.mkv"!
2023/06/18 09:58:59 [decoder.flac.metadata:4] Unsupported MIME type for "/home/matthias/media/videostream/videos/VJ Loops - Hyperspace Journey 25fps.mkv": video/x-matroska!
2023/06/18 09:58:59 [metadata.mp4:4] Unsupported file extension for "/home/matthias/media/videostream/videos/VJ Loops - Hyperspace Journey 25fps.mkv"!
2023/06/18 09:58:59 [metadata.mp4:4] Unsupported MIME type for "/home/matthias/media/videostream/videos/VJ Loops - Hyperspace Journey 25fps.mkv": video/x-matroska!
2023/06/18 09:58:59 [metadata.flac:4] Unsupported file extension for "/home/matthias/media/videostream/videos/VJ Loops - Hyperspace Journey 25fps.mkv"!
2023/06/18 09:58:59 [metadata.flac:4] Unsupported MIME type for "/home/matthias/media/videostream/videos/VJ Loops - Hyperspace Journey 25fps.mkv": video/x-matroska!
2023/06/18 09:58:59 [decoder.ogg:4] Unsupported file extension for "/home/matthias/media/videostream/videos/VJ Loops - Hyperspace Journey 25fps.mkv"!
2023/06/18 09:58:59 [decoder.ogg:4] Unsupported MIME type for "/home/matthias/media/videostream/videos/VJ Loops - Hyperspace Journey 25fps.mkv": video/x-matroska!
2023/06/18 09:58:59 [decoder.taglib:4] Unsupported MIME type for "/home/matthias/media/videostream/videos/VJ Loops - Hyperspace Journey 25fps.mkv": video/x-matroska!
2023/06/18 09:58:59 [decoder.taglib:2] Error while decoding file tags: Taglib.File.Invalid_file
2023/06/18 09:58:59 [decoder.taglib:4] Raised by primitive operation at Taglib.File.open_file in file "src/taglib.ml", line 121, characters 12-36
2023/06/18 09:58:59 [decoder.taglib:4] Called from Taglib_plug.get_tags in file "src/core/decoder/taglib_plug.ml", line 67, characters 16-55
2023/06/18 09:58:59 [decoder.taglib:4] 
2023/06/18 09:58:59 [videos:4] Queued 1 requests
2023/06/18 09:58:59 [decoder:3] Method "ffmpeg" accepted "/home/matthias/media/videostream/videos/Come to the Dark Side.png".
2023/06/18 09:58:59 [videos:3] Prepared "/home/matthias/media/videostream/videos/Come to the Dark Side.png" (RID 1).
2023/06/18 09:58:59 [mksafe.2:3] Switch to videos with transition.
2023/06/18 09:58:59 [mksafe.3:3] Switch to buffer.producer with transition.
Speicherzugriffsfehler (Speicherabzug geschrieben)

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

smimram commented 1 year ago

I tried to reproduce but could not unfortunately... And I don't see much suspicous in the logs.

Moonbase59 commented 1 year ago

@smimram Anything else I could try to help diagnosing? A newer .deb isn’t available.

toots commented 1 year ago

@Moonbase59 you could try to get a gdb stacktrace:

gdb /path/to/liquidsoap
> r <options>
... crash
> thread apply all bt
Moonbase59 commented 1 year ago

@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.

Moonbase59 commented 1 year ago

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.

toots commented 1 year ago

I can't reproduce here, have tried with savonet/liquidsoap:52fb69c. Would you mind sending a faulty jpeg/png image as well?

toots commented 1 year ago

Correction, I see that the file is attached now.

Attached is a minimal script I used here.

videostream.zip

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.

Moonbase59 commented 1 year ago

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.

Moonbase59 commented 1 year ago

@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 commented 1 year ago

@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?

Moonbase59 commented 1 year ago

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?

toots commented 1 year ago

Yup.

Moonbase59 commented 1 year ago

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 :-)

toots commented 1 year ago

Interesting. Even inside a docker image?

Could you provide a standalone reproduction zip like I did?

Moonbase59 commented 1 year ago

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.

videostream.zip

Moonbase59 commented 1 year ago

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
toots commented 1 year ago

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!

Moonbase59 commented 1 year ago

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?

Moonbase59 commented 1 year ago

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...
Moonbase59 commented 1 year ago

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...
smimram commented 1 year ago

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.

Moonbase59 commented 1 year ago

@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.

Moonbase59 commented 1 year ago

@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.

smimram commented 1 year ago

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.

Moonbase59 commented 1 year ago

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 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.

Moonbase59 commented 1 year ago

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.

Moonbase59 commented 1 year ago

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!

toots commented 1 year ago

Awesome!