This setting is only used in buffered alsa I/O, and affects latency. Set to 0 to disable this setting and use ALSA’s default.
set("alsa.alsa_buffer",0)
This is only used for buffered ALSA I/O, and affects latency.
set("alsa.buffer_length",1)
Set to 0 to disable this setting and use ALSA’s default.
set("alsa.periods",0)
Preferred samplerate converter. The native converter is always available.
set("audio.converter.samplerate.converters",["ffmpeg","libsamplerate","native"])
Resampling quality, one of: "best"
,
"medium"
, "fast"
, "zero_order"
or
"linear"
. Refer to ocaml-samplerate for details.
set("audio.converter.samplerate.libsamplerate.quality","fast")
Resampling quality: either “nearest” or “linear”.
set("audio.converter.samplerate.native.quality","linear")
Control the behaviour of clocks when an error occurs during streaming. This has no effect on errors occurring during source initializations. By default, any error will cause liquidsoap to shutdown. If errors are allowed, faulty sources are simply removed and clocks keep running. Allowing errors can result in complex surprising situations; use at your own risk!
set("clock.allow_streaming_errors",false)
set("console.colorize","auto")
WARNING: Do not enable unless a developer instructed you to do so! The debugging mode makes it easier to understand why decoding fails, but as a side effect it will crash liquidsoap at the end of every track.
set("decoder.debug",false)
Path to faad binary
set("decoder.external.faad.path","faad")
Path to ffmpeg binary
set("decoder.external.ffmpeg.path","ffmpeg")
Path to ffprobe binary
set("decoder.external.ffprobe.path","ffprobe")
Path to flac binary
set("decoder.external.flac.path","flac")
Path to metaflac binary
set("decoder.external.metaflac.path","metaflac")
Path to mpcdec binary
set("decoder.external.mpcdec.path","mpcdec")
set("decoder.file_decoders",["META","WAV","AIFF","MIDI","IMAGE","FFMPEG","FLAC","AAC","MP4","OGG","MAD","GSTREAMER"])
set("decoder.file_extensions.aac",["aac"])
set("decoder.file_extensions.aiff",["aiff","aif","aifc"])
set("decoder.file_extensions.ffmpeg",["mp3","mp4","m4a","wav","flac","ogg","wma","webm","osb"])
set("decoder.file_extensions.flac",["flac"])
set("decoder.file_extensions.gstreamer",["wma","wmv","avi","mp4","3gp","webm","mkv"])
set("decoder.file_extensions.mad",["mp3","mp2","mp1"])
set("decoder.file_extensions.mp3",["mp3","mp2","mp1"])
set("decoder.file_extensions.mp4",["m4a","m4b","m4p","m4v","m4r","3gp","mp4"])
set("decoder.file_extensions.ogg",["ogv","oga","ogx","ogg","opus"])
set("decoder.file_extensions.taglib",["mp3"])
set("decoder.file_extensions.wav",["wav","wave"])
set("decoder.image_file_decoders",["PPM","CAMLIMAGES","SDL/IMAGE"])
set("decoder.mime_types.aac",["audio/aac","audio/aacp","audio/x-hx-aac-adts"])
set("decoder.mime_types.aiff",["audio/x-aiff","audio/aiff"])
set("decoder.mime_types.basic",["audio/basic"])
set("decoder.mime_types.ffmpeg",["application/ffmpeg"])
set("decoder.mime_types.flac",["audio/flac","audio/x-flac"])
set("decoder.mime_types.gstreamer",["video/x-ms-asf","video/x-msvideo","video/mp4","video/3gpp","video/webm","video/x-matroska","video/mp2t","video/MP2T"])
set("decoder.mime_types.mad",["audio/mpeg","audio/MPA"])
set("decoder.mime_types.mp3",["audio/mpeg","audio/MPA"])
set("decoder.mime_types.mp4",["audio/mp4","application/mp4"])
set("decoder.mime_types.ogg",["audio/opus","application/ogg","application/x-ogg","audio/x-ogg","audio/ogg","video/ogg"])
set("decoder.mime_types.taglib",["audio/mpeg"])
set("decoder.mime_types.wav",["audio/vnd.wave","audio/wav","audio/wave","audio/x-wav"])
set("decoder.stream_decoders",["WAV","AIFF","PCM/BASIC","RAW AUDIO","FFMPEG","FLAC","AAC","OGG","MAD"])
The list of labels of exported metadata.
set("encoder.encoder.export",["artist","title","album","genre","date","tracknumber","comment","track","year","dj","next"])
set("ffmpeg.log.level",3)
Set FFMPEG log level, one of: “quiet”, “panic”, “fatal” “error”, “warning”, “info”, “verbose” or “debug”
set("ffmpeg.log.verbosity","warning")
set("frame.audio.channels",2)
set("frame.audio.samplerate",44100)
Audio and video samplerates constrain the possible frame durations. This setting is used as a hint for the duration, when ‘frame.audio.size’ is not provided. Tweaking frame duration is tricky but needed when dealing with latency or getting soundcard I/O correctly synchronized with liquidsoap.
set("frame.duration",0.04)
set("frame.midi.channels",0)
set("frame.video.channels",0)
set("frame.video.height",240)
set("frame.video.samplerate",25)
set("frame.video.width",320)
set("gstreamer.add_borders",true)
set("gstreamer.max_buffers",10)
IP addresses on which the harbor should listen.
set("harbor.bind_addr","0.0.0.0")
set("harbor.bind_addrs",["0.0.0.0"])
set("harbor.icy_formats",["audio/mpeg","audio/aacp","audio/aac","audio/x-aac","audio/wav","audio/wave","audio/flac","audio/x-flac"])
set("harbor.max_connections",2)
set("harbor.reverse_dns",false)
set("harbor.ssl.certificate","")
set("harbor.ssl.password","")
set("harbor.ssl.private_key","")
set("harbor.ssl.read_timeout",-1.)
set("harbor.ssl.write_timeout",-1.)
set("harbor.timeout",300.)
set("harbor.verbose",false)
This should be reserved for advanced dynamic uses of liquidsoap such as running inside an isolated environment like docker.
set("init.allow_root",false)
set("init.catch_exn",true)
set("init.concurrent",false)
set("init.daemon",false)
set("init.daemon.change_user",false)
set("init.daemon.change_user.group","daemon")
set("init.daemon.change_user.user","daemon")
set("init.daemon.pidfile",true)
set("init.daemon.pidfile.path","<sysrundir>/<script>.pid")
This should be reserved for advanced dynamic uses of liquidsoap.
set("init.force_start",false)
set("init.trace",false)
set("ladspa.dirs",["/usr/lib64/ladspa","/usr/lib/ladspa","/usr/local/lib/ladspa"])
set("ladspa.enable",true)
set("lang.debug",false)
set("lang.debug_errors",false)
set("log.file",false)
set("log.file.append",true)
set("log.file.path","<syslogdir>/<script>.log")
set("log.file.perms",384)
set("log.level",3)
set("log.stdout",true)
set("log.unix_timestamps",false)
set("mpd.debug",false)
set("mpd.host","127.0.0.1")
set("mpd.path","/var/lib/mpd/music")
set("mpd.port",6600)
set("mpd.randomize",true)
set("osc.port",7777)
Some playlists format, such as CUE files specify index points to start tracks playback. In this case, tracks are resolved to a annotate: request with a cue-in metadata containing the index. If you want to make use of this index, you should specify here what label you want for this metadata and use the cue_cut operator on the resulting source
set("playlists.cue_in_metadata","liq_cue_in")
Some playlists format, such as CUE files specify index points to start tracks playback. In this case, tracks are resolved to a annotate: request with a cue-in metadata containing the index. If you want to make use of this index, you should specify here what label you want for this metadata and use the cue_cut operator on the resulting source
set("playlists.cue_out_metadata","liq_cue_out")
set("playlists.mime_types.xml",["video/x-ms-asf","audio/x-ms-asx","text/xml","application/xml","application/smil","application/smil+xml","application/xspf+xml","application/rss+xml"])
Alternative endpoint URL (useful for other S3 implementations).
set("protocol.aws.endpoint","")
Path to aws CLI binary
set("protocol.aws.path","aws")
Output format
set("protocol.aws.polly.format","mp3")
Voice ID
set("protocol.aws.polly.voice","Joanna")
Use a specific profile from your credential file.
set("protocol.aws.profile","")
AWS Region
set("protocol.aws.region","")
set("protocol.external",true)
set("protocol.external.curl","curl")
set("protocol.external.protocols",["http","https","ftp"])
set("protocol.ffmpeg.channels",2)
set("protocol.ffmpeg.metadata",true)
set("protocol.ffmpeg.path","ffmpeg")
set("protocol.ffmpeg.replaygain",false)
List of environment variables passed down to the executed process.
set("protocol.process.env",[])
Inherit calling process’s environment when env
parameter
is empty.
set("protocol.process.inherit_env",true)
set("protocol.replay_gain.path","/usr/local/share/liquidsoap/1.4.3/bin/extract-replaygain")
set("protocol.say.sox_path","sox")
set("protocol.text2wave.path","text2wave")
set("protocol.youtube-dl.path","youtube-dl")
set("request.grace_time",600.)
set("request.leak_warning",100)
set("request.metadata_decoders",["FFMPEG","FLAC","MP4","OGG","TAGLIB","GSTREAMER"])
set("request.metadata_decoders.duration",false)
set("request.metadata_decoders.override",false)
If the latency gets higher than this value, the outputs will be reset, instead of trying to catch it up second by second. The reset is typically only useful to reconnect icecast mounts.
set("root.max_latency",60.)
set("sandbox","disabled")
set("sandbox.binary","bwrap")
set("sandbox.network",true)
set("sandbox.ro",["/"])
set("sandbox.rw",["/home/opam","/tmp"])
set("sandbox.setenv",["TEMPDIR=/tmp","TEMP=/tmp","TMPDIR=/tmp","TMP=/tmp"])
set("sandbox.shell",true)
set("sandbox.shell.path","/bin/bash")
set("sandbox.unsetenv",[])
Number of queues that are dedicated to fast tasks. It might be useful
to create some if your request resolutions, or some user defined tasks
(cf. add_timeout()
), are delayed too much because of slow
tasks blocking the generic queues, such as last.fm submissions or slow
add_timeout
handlers.
set("scheduler.fast_queues",0)
Number of event queues accepting any kind of task. There should at least be one. Having more can be useful to avoid that trivial request resolutions (local files) are not delayed because of a stalled download. But N stalled download can block N queues anyway.
set("scheduler.generic_queues",2)
set("scheduler.log",false)
Number of queues dedicated to internal non-blocking tasks. These are only started if such tasks are needed. There should be at least one.
set("scheduler.non_blocking_queues",2)
The main advantage of this method is that you can set very precisely
the access permissions for the socket, just like for any other file. A
useful command to use this interface is: “socat stdin unix:
set("server.socket",false)
In this filename, <pid>
,
<script>
and <sysrundir>
are
replaced by their respective values: PID of the instance of liquidsoap,
base name of the .liq script (if any), default runtime data
directory.
set("server.socket.path","<sysrundir>/<script>.sock")
This parameter is better written in octal notation. Although you can write octal numbers like 0o660, they are not displayed back in octal. For example, the default value 384 is the decimal for 0o600.
set("server.socket.permissions",384)
This allows you to communicate with the server via a telnet interface, i.e., a simple text-based communication over TCP. The standard “telnet” command will allow you to communicate through that interface, as well as the telnet libraries available in most script languages. Since there is currently no authentication, you should be careful about who can access this interface: either restrict it to connections from localhost (using the bind_addr param) or set up a firewall.
set("server.telnet",false)
set("server.telnet.bind_addr","127.0.0.1")
set("server.telnet.port",1234)
set("server.telnet.revdns",false)
A negative value disables timeout.
set("server.timeout",30.)
set("srt.log.level",5)
set("srt.poll.timeout",100)
set("tag.encodings",["UTF-8","ISO-8859-1"])
Quality setting for gavl video conversion. Range from 1 to 5
set("video.converter.gavl.quality",2)
Scale mode. Values must be one of: “auto” “nearest” “bilinear” “quadratic” “cubic_bspline” “cubic_mitchell” “cubic_catmull” “scale_sinc_lanczos”
set("video.converter.gavl.scale_mode","auto")
set("video.converter.preferred","gavl")
set("video.converter.proportional_scale",true)