Releases: savonet/liquidsoap
Liquidsoap 1.3.1
This is a bugfix release, addressing a couple of bugs from the recent 1.3.0
release. Changelog is:
New:
-
Allow any tags allowed in
"encoder.encoder.export"
settings in vorbis streams (#418) -
Allow
"audio/mp3"
mime-type for mp3 in file resolution protocol. (#451)
Fixed:
-
Fixed run_process, get_process_lines, get_process_output when compiling with OCaml <= 4.03 (#437, #439)
-
Calls to wait_for while the scheduler isn't running (#442)
-
Revert default handling of environment in run_process, get_process_lines, get_process_output to passing calling process' environment by default.
Liquidsoap 1.3.0
New:
-
Added support for recursive functions (#406)
-
Add peak and peak.stereo operators (#364)
-
Change
track_sensitive
parameter to a boolean getter (fixed value or anonymous function). -
Add SSL support to the varous harbor operators, either via openssl or OSX's SecureTransport.
-
Add optional "dj" and "next" metadata for Shoutcast v2, wrap "dj" value in a callback in output.shoutcast (#370, #388)
-
Allow partial parsing of JSON objects in of_json.
-
Generalize list.assoc to allow default values. Legacy code must be updated: list.assoc(k,l) -> list.assoc(default="",k,l)
-
Generalize list.hd to allow default values. Legacy code must be updated: list.hd(l) -> list.hd(default="",l)
-
Allow to pass a default to list.nth. Legacy code must be updated: list.nth(l,pos) -> list.nth(default=<..>,l,pos)
-
Added on_offset to execute a callback at a given offset within a source's tracks.
-
Added mutexify to protect a function from being called concurrently.
-
Added request.log to get log data associated with a request
-
Added overlap_sources to rotate between sources with overlapping tracks.
-
Added replay_metadata to input.harbor()
-
Added <char code> syntax for strings (#368)
-
Added string.sub
-
Added run_process to run a process with optional environment and return (stdout,stderr,exit_status)
-
Added add_playlist_parser to register new playlist parsers
-
Added optional static parameter to add_protocol
-
Added file.temp to create fresh temporary filename
-
Added process: protocol
-
Reimplemented curl-based fetch process using process:
-
Added s3:// protocol to fetch files from AWS S3 using the AWS CLI.
-
Added polly: protocol to enable speech synthesis using AWS polly. Generated files are mono so make sure you use audio_to_stereo().
-
Added youtube-dl: protocol to resolved requests using youtube-dl
-
Added which() to find an exectuable within the $PATH
-
Added register() to allow to register new configuration settings
Changed:
-
Reverted default value for --error_as_warnings option, renamed to --strict.
-
Moved say: protocol registration to utils.liq.
-
Moved get_process_lines and get_process_output to utils.liq, added optional env parameter
-
Set conservative=true by default in cross() and smartcross()
Deprecated (can be removed in any future version):
- Dynamic plugins compilation, deprecated in favor of opam rebuild mechanism.
Removed:
-
aac and aacplus encoders, removed in favor of fdk-aac.
-
dirac/schroedinger video encoder: obsolete, abandoned upstream.
-
force_mpeg option in taglib metadata decoder. Has not been used for years and allows to decouple taglib code from the mad decoder.
Bugfixes:
-
Fix negative seek (#390)
-
Prevent flows metadata updata from stalling sources (#377)
-
Add revdns setting for telnet, set all revdns default to false (#372)
-
Fix icy metadata in output.harbor (#358)
-
Fix missing first line of headers from icy clients in input.harbor (#380)
-
Fix timestamp in some logged output (#395)
-
Fix crash in external (download) protocol.
-
Fix fade.{in,out} metadata handling for new fade duration and type.
-
Compute normalization regardless of child sources ready status in add() to avoid unexpected change of volume.
Liquidsoap 1.2.1
1.2.1 (01-07-2016)
New:
- Support for https (SSL/TLS) icecast connections.
- Added http.{put,head,delete}, https.{get,post,head,put,delete}.
- Added input.https.
- Added list.mapi.
- Added rotate.sequence.
- New pipe() operator to pipe audio data through an external program.
- Switched to curl for request resolution/fetch.
Bugfixes:
Liquidsoap 1.2.0
New:
- Websocket server (#90): this means that you can stream to harbor directly from
your browser! - Add support for AIFF format (#112).
- Add url.split_args to split the argument of an url (#123).
- Add buffer.adaptative to cope with small network delays (#131).
- Add sleeper operator to simulate network delays and test robustness (#131).
- Add stereo.left and stereo.right to extract channels from a stereo stream.
- Add restart command to restart liquidsoap (#135).
- Add file.contents to read the contents of a file.
- Add filter.rc for first-order RC filters.
Enhancements:
- Add support for sending OSC data (osc.send_*).
- Native support for (some) AVI files (#256) which enables support for external
video encoders (#233). - Improve rms operator (#105) to have per channel rms (#102), the ability to
dynamically set window duration (#103) and multiple monitors (#104). - Icecast streaming can now use HTTP1.1 chunked encoding (#82, #107).
- Add support for multiple shoutcast extensions (#216).
- Fade type can be overridden by metadata in fade.in / fade.out (#64).
- Allow LADSPA plugins with arbitrary number of channels (#191).
- Rename shine encoder from %mp3.fxp to %shine.
- fdkaac: dynamic plugin (#79), set afterburner parameter, use MPEG4 by default
(#83). - Improved subtyping on lists (#125, #126).
- Add native simple JSON decoder.
- Better code: do not abusively use assertions (#137), issue more warnings and
fix them (#162).
Bugfixes:
- Correctly close connection in http.get / http.post (#72).
- Remove input.lastfm which has been broken for a while.
- Lots of small bugfixes.
Liquidsoap 1.1.1
New:
- Add support for FDK-AAC, which seems to be the best AAC(+) encoder around for
now. Replacement candidate for VO-AAC and AACPLUS - Add %ifencoder to check whether Liquidsoap was compiled with support for a
particular encoding format. - There is now an emacs mode in scripts/liquidsoap-mode.el.
- Liquidsoap can be used as a Windows service.
Enhancements:
- Handle more OSC types (float, float_pair, bool, string, string_pair) and added
osc.on_*. - Better infrastructure for decoding images. add_image can now handle most image
file types. - Add random.int as well as min_int and max_int to standard library.
- Add playlist.merge to play a whole playlist as one track.
- Add gstreamer.hls to play http live streams (HLS).
- Add say.program to specify text-to-speech program in scripts.
- Add "random" transition type to video.fade.* in order to select a random
transition each time. - Add max parameter to drop data on buffer overrun with input.gstreamer.*.
- Add bytes_per_page parameter to ogg encoders.
- Add support for DTX in speex and opus, as well as VAD for speex.
- Localize some more parsing errors in files.
Bugfixes:
- Avoid deadlocks in harbor.
- Correctly flush lame encoder.
- Correct sequence operator when there is only one source.
- Handle relative URLs in http playlists.
- portaudio is now an active source.
- Avoid jack I/O lowering the volume.
Liquidsoap 1.1.0
New:
- Add support for GStreamer decoding, processing and encoding (%gstreamer
format, v4l webcam input is now implemented using GStreamer). - Add support for opus decoding and encoding.
- Add support for the shine encoder, which can efficiently work on architectures
without FPU. - Add support for automatically computing the duration of tracks in the
"duration" metadata [LS-641]. It can be enabled with
set("request.metadata_decoders.duration",true) - Add support for frei0r video effects.
- Allow %define'd variables in encoding formats [LS-634], e.g.
%define BITRATE 24
%define STEREO true
output.file(%mp3(bitrate = BITRATE, stereo = STEREO),"bla.mp3",s)
Enhancements:
- Taglib now reads all metadatas (even non-standard ones).
- Add a mode to automatically reload a playlist when the file was changed
[LS-363,LS-523]. For instance, s =
playlist("~/Music",reload_mode="watch"). Also, add file.watch to call a
callback when a file is changed, with inotify support when present. - Add support for FFMpeg as video converter, which you can use with
set("video.converter.preferred", "ffmpeg") - Add back_time argument to blank operators [LS-609].
- Add a metadata to override fade.final duration.
- MIME is computed at most once when extracting replaygain.
- Default samplerate converter is now "fast".
- BPM detection (bpm) now uses a callback.
- Add clock.unify to unify clocks of all sources from a list.
- Add "source_url" metadata to input.http streams.
- Improved error message when theora format is not supported.
- Add list.filter function.
- video.add_image can now take any image format as input.
- Add mux_stereo.
- Support for external decoders in streams.
- Move bugtracker to https://github.com/savonet/liquidsoap/issues
Bugfixes:
- Configure is now compatible with OCaml >= 4.0 and removed support for OCaml <
3.11 [LS-625]. - Fix random memory access / memory leak when decoding AAC/MP4 files [LS-647].
- Correct resampling of wav files.
- Use the length for data indicated in header for wav files.
- Argv.(0) now returns the script name [LS-605].
- Liquidsoap should now operate fine when compiled with -noassert [LS-578].
- Better handling of inexistent MIDI channels.
- Video decoder now correctly handles videos from Icecast.
- Avoid visu.volume freezing Liquidsoap on shutdown.
- Fix a memory leak when decoding both audio and video in ogg [LS-636].
- More efficient handling of video converters, also fixes some crashes [LS-623].
- Have the soundtouch operator preserve tags [LS-621].
- Fix remaining time estimation in cross and smart_cross.
- Avoid deadlocks in harbor and input.http.
- Remove leftover files in configure [LS-567].
- Handle wav files with padded fmt headers.
- Handle end-of-stream when seeking mp3 with mad.
Liquidsoap 1.0.1
Fixes:
- correct type for the "flush" parameter in output.external()
thanks to Romaric Petion for pointing it out - fix bug where MP3 encoder would discard initial ID3v2 rendering
- fix bug where smart_cross() would stop before the end of tracks,
thanks to Edward Kimber for raising the issue - load libraries in --interactive [LS-618]
- update examples, notably the installed radio.liq
thanks to Emery Hemingway for noticing the problem - generalize the types of input.http() and input.harbor() to allow variable
content kinds, and also allow video for harbor [LS-601] - request.equeue() now allows to remove requests from the primary queue
- fix compilation of lame dynamic plugin.
New:
- new values for metadata fields does not override old one anymore;
use setting "request.metadata_decoders.override" to restore old behavior - stereo_mode and internal_quality parameters for %mp3 encoder
- enable mad decoder for MP1 and MP2 in addition to MP3, create aliased
configuration keys "decoder.file_extensions/mime_types.mad" - support for CUE sheet playlists and metadata in M3U
- setting "decoder.taglib.force_mpeg" to force taglib to consider files as MPEG
- scripting builtins getenv(), setenv() and environment()
- scripting builtin source.fallible()
- harbor is now verb-oriented, supporting GET, POST, PUT, HEAD, DELETE, OPTIONS
- load DSSI plugins from environment variables and using dssi.register()
- also display the type of the whole expression when -i is passed
- generalized custom path support for facilitating standalone distributions
- and as usual, various improvements in the code, log and error messages, etc.
Liquidsoap 1.0.0
Finally, the 1.0.0 release! It brings several important fixes, but also some nice novelties. The most outstanding difference concerns output.icecast()
: its restart and restart_delay parameters are gone, replaced by a new on_stop
handler which is called on every error (failed connection or disconnection) and returns the new restart delay. The on_error
handler receives a string describing the error which enables user-friendly reporting, adaptative
delays, etc. Note that on_error
defaults to fun(_)->3.
which is equivalent to having restart=true
, restart_delay=3.
in previous versions, NOT the same as the former restart=false
default. As a result, Liquidsoap won't fail to startup if an initial connection attempt fails.
Fixes:
- LS-532,527: avoid freeze after errors in streaming threads or source
initialization routines - LS-542: race condition in playlist*() breaking randomness
- LS-489: double expiration lead to illegal queue length and freeze of
request-based sources - Avoid multiple simultaneous reloading in playlist*(),
thanks to Fabio Costa for his help on this one! - Pass charset information to icecast server to avoid encoding bugs
- LS-555: timeout for icecast connection attempts
- LS-559: permanent stop after disconnection on Ogg streams
- LS-565: efficient and crash-free error handling in input.http/harbor()
when the input stream has an invalid number of channels - LS-431: proper handling of duration in blank() avoids abusive empty tracks
- LS-556: rework conversion operators, optimizations used to be unsafe & broken
- LS-574: silent MIDI synthesis operators
- LS-396: drop*()'s types reflect that they don't support variable arities
- LS-442: allow comments not terminated by newline at end of file
New:
- on_error handler in output.icecast(), see above
- New msg param in %mp3 for marking frame headers, defaults to version string
- output.file(): new on_close parameter, may be used to write exact duration
- %mp3.vbr/abr for variable bitrate MP3, %mp3 is now a synonym of %mp3.cbr
- MP3 encoders now support ID3v2 tags
- input.http(): new "status" command
- LS-556: mux_mono() for adding a single audio channel into a stream
- video.add_text() using libgd (gd4o) for environments without X
Dependency on graphics can be disabled (to work around erreneous detection) - script language: add infix operator mod (patch by Fabio Costa)
- delay() now has an "initial" parameter
- LS-557: "server.timeout" setting can now be disabled by setting it to -1
- LS-532: source.init() for selective init with a way to handle errors,
plus settings "clock.allow_streaming_errors" and "init.force_stat" (or
--force-start on the command line) for easing dynamic uses of liquidsoap
Enhancements: - Panic crash to avoid frozen liquidsoap after duppy crashes
- Text-to-speech: festival and sox are now only runtime dependencies
- LS-475,516: better support for dynamic URL change in input.http()
- LS-484: display user-friendly error messages in interactive mode
- LS-308: use seconds internally in request sources, avoid overflow and
display more user-friendly debug messages - Cleanup visu.volume() and video.vis_volume()
- LS-573: replace " " by "_" in identifiers to make them valid in the server
- Script syntax: unary minus now usable without parenthesis after semicolon
- Two generic queues by default, to avoid deadlocks in advanced situations
- Documentation, build & install system, etc.
Liquidsoap 1.0.0 beta 3
- Feature: Added of_json to parse json data. Depends
on json-wheel. - Feature: Added file.exists and is_directory.
- Feature: Added timeout options for:
telnet, harbor (server), input.icecast - Enhancement: finer-grained timeout detection
for input.harbor and input.http - Fix: deadlock when disconnecting harbor users
through server/telnet command. - Fix: dynlink detection in native mode with old
versions of ocaml - Fix: deadlock when an exception is raised during
startup while the clock is owned by a source
(e.g. input.alsa). See LS-527 for more details.
Liquidsoap 1.0.0 beta 2.1
- Fix: playlist.safe() was unusable in beta2, as a side effect of removing
duplicate "timeout" parameter in playlist(). - Minor enhancements to documentation, settings and reference.