savonet/liquidsoap

Dummy outputs leak?

Parakovsky opened this issue · 1 comments

Describe the bug
I think I have dummy outputs leak, if Allowing replaygain my system start produce dummy outputs each time it encounters weird errors like this one
`

Decoding "/storage/Audio/James Holden - Imagine This Is A High Dimensional Space Of All Possibilities (2023) - WEB FLAC 24-48/01. You Are In A Clearing.flac" ended: Ffmpeg_decoder.End_of_file.`

It happens only for replaygain function available, it looks like this on the tellnet:

Available commands:
| Audio.next
| Audio.reload
| Audio.skip
| Audio.uri [<uri>]
| dummy.10.metadata
| dummy.10.remaining
| dummy.10.skip
| dummy.11.metadata
| dummy.11.remaining
| dummy.11.skip
| dummy.12.metadata
| dummy.12.remaining
| dummy.12.skip
| dummy.13.metadata
| dummy.13.remaining
| dummy.13.skip
| dummy.14.metadata
| dummy.14.remaining
| dummy.14.skip
| dummy.15.metadata
| dummy.15.remaining
| dummy.15.skip
| dummy.16.metadata
| dummy.16.remaining
| dummy.16.skip
| dummy.2.metadata
| dummy.2.remaining
| dummy.2.skip
| dummy.3.metadata
| dummy.3.remaining
| dummy.3.skip
| dummy.4.metadata
| dummy.4.remaining
| dummy.4.skip
| dummy.5.metadata
| dummy.5.remaining
| dummy.5.skip
| dummy.6.metadata
| dummy.6.remaining
| dummy.6.skip
| dummy.7.metadata
| dummy.7.remaining
| dummy.7.skip
| dummy.8.metadata
| dummy.8.remaining
| dummy.8.skip
| dummy.9.metadata
| dummy.9.remaining
| dummy.9.skip
| dummy.metadata
| dummy.remaining
| dummy.skip
| exit
| help [<command>]
| input.harbor.buffer_length
| input.harbor.status
| input.harbor.stop
| liq_ogg.metadata
| liq_ogg.remaining
| liq_ogg.skip
| quit
| request.alive
| request.all
| request.flush_and_skip
| request.metadata <rid>
| request.on_air
| request.push <uri>
| request.queue
| request.resolving
| request.skip
| request.trace <rid>
| uptime
| var.get
| var.list
| var.set <name> = <value>
| version

To Reproduce
Here is my setup:

#!/home/parakovsky/.opam/default/bin/liquidsoap

settings.server.telnet := true
server.harbor()
# interactive.harbor()
# 
enable_replaygain_metadata()

# Main


# x = playlist("/home/parakovsky/to-play.m3u", reload_mode="watch")
s = replaygain(playlist(reload_mode="watch", "/storage/Audio"))
# LIVE DJ SET INTERRUPTION
live = input.harbor("tuziknet", port=8090, password="DJ4")
settings.harbor.bind_addrs := ["0.0.0.0"]
s = fallback (track_sensitive=false, [live, request.queue(id="request"), s])
s = crossfade(smart=true, s)



# OUTPUTS AND STUFF

# s = fallback([ request.queue(id="request"),
                    # s])

# mic = input.pulseaudio(device = "alsa_card.usb-Samson_Technologies_Samson_Meteor_Mic-00")
# mic = blank.strip(max_blank=2., min_noise=.1, threshold=-20., mic)

output.icecast(%ogg(%flac), 
     host = "localhost", port = 8030, fallible=true,
     password = "DjCreative1822", format = "audio/ogg", mount = "liq.ogg", s)

# output.file.hls("/tmp/hls", fallible=true,
# [("mp3-low", %mp3(bitrate=96)), ("mp3-hi", %mp3(bitrate=160))],
# s)

# output.icecast(%vorbis(samplerate=44100, channels=2, quality=0.9),
# host = "localhost", port = 8030, fallible=true,
# password = "DjCreati22", format = "audio/ogg", mount = "lossy.ogg", s)

# output.dummy(s)

# a = source.mux.video(video=mksafe(video.cover(s)), s)

# TWITCH STREAM

# key = string.trim(file.contents("twitch-key"))
# url = "rtmp://hel03.contribute.live-video.net/app/#{key}"
# enc = %ffmpeg(format="flv",
# %audio(codec="libmp3lame", samplerate=44100, b="320k"),
# %video(codec="libx264", width=854, height=480,
# b="800k", g=50, preset="veryfast"))
# output.url(fallible=true, url=url, enc, a)


Expected behavior
I would like to not have this dummy devices clogging my help output.

Version details
Everything updated on Arch.

Install method
OPAM

Common issues
My common issue is to think that liquidsoap is too awesome.

I can confirm this behavior. With each new track, the dummy is registered to calculate the replay gain.

  1. Generate tracks
    mkdir music;
    for i in $(seq 1 9); do
      ffmpeg \
        -f lavfi -i "sine=frequency=${i}00:duration=10" \
        -c:a libmp3lame -b:a 128k \
        "music/$i.mp3";
    done
  2. main.liq
    enable_replaygain_metadata()
    
    s = playlist("/tmp/test/music")
    s = replaygain(s)
    output.dummy(s, fallible=true)

You don't even need to connect to the telnet server to see the growing number of dummy ids in the log.

[decoder.ffmpeg:3] Requested content-type for "/tmp/test/music/8.mp3": {audio=pcm(stereo)}
[decoder.ffmpeg:3] FFmpeg recognizes "/tmp/test/music/8.mp3" as audio: {codec: mp3, 44100Hz, 1 channel(s)} 
[decoder.ffmpeg:3] Decoded content-type for "/tmp/test/music/8.mp3": {audio=pcm(mono)}
[file.replaygain.70:3] Computing replay gain for "/tmp/test/music/8.mp3"
[dummy.71:3] Content type is {audio=pcm(stereo)}.
[source.replaygain.compute.70:3] Content type is {audio=pcm(stereo)}.
[request.once.70:3] Content type is {audio=pcm(stereo)}.
[decoder.ffmpeg:3] Requested content-type for "/tmp/test/music/8.mp3": {audio=pcm(stereo)}
[decoder.ffmpeg:3] FFmpeg recognizes "/tmp/test/music/8.mp3" as audio: {codec: mp3, 44100Hz, 1 channel(s)} 
[decoder.ffmpeg:3] Decoded content-type for "/tmp/test/music/8.mp3": {audio=pcm(mono)}
[request.once.70:3] Prepared "/tmp/test/music/8.mp3" (RID 139).
[decoder:2] Decoding "/tmp/test/music/8.mp3" ended: Ffmpeg_decoder.End_of_file.
[dummy.71:3] Source failed (no more tracks) stopping output... 
[file.replaygain.70:3] Computed replay gain 7.12 dB for "/tmp/test/music/8.mp3" (time: 0.306236982346 s).