This release is a pre-release of the 2.3.x
release branch of liquidsoap. It is provided to allow for early testing of the 2.3.0
release before it is officially published.
You can use it to install the latest stable code before it is published and test/prepare your production environment for it.
Please consider the code publishing here as in alpha release stage!
⚠️ Warning ⚠️
Assets in this release will be deleted. If you are looking for permanent links to release assets, please head over to https://github.com/savonet/liquidsoap-release-assets/releases
For more details about our release process, please checkout https://github.com/savonet/liquidsoap#release-details
2.3.0 (unreleased)
New:
- Rewrote the streaming API to work with immutable frame content. This
should greatly impact impredictable side-effect of the previous models w.r.t.
track marks, content sharing and more. This also impacts multiple operators
behavior. Mostly, things should be roughly the same with differences around
behaviors related to track marks (source.on_track
and etc). See @todo@ for
more details (#3577) - Added script caching layer for faster script startup time. See: our blog post
for details (#3924, #3949, #3959 and #3977) - Rewrote the clock/streaming loop layer. This prepares our streaming system to
support multicore when the OCaml compiler is mature enough to allow it. Clocks
are now attached to sources via theirclock
methods. Returned value is a stripped
downclock
variable. Users can use theclock
function to retrieve the full
methods, e.g.s = sine(); c = clock(s.clock)
. This value has advanced functions
for clock control such asstart
/stop
,ticks
andself_sync
to check for
self-sync
. See @todo@ for more details. (#3781) - Allow frames duration shorter than one video frames, typically values under
0.04s
.
Smaller frames means less latency and memory consumption at the expense of
a higher CPU usage. See @todo@ for more details (#3607) - Change default frame duration to
0.02s
(#4033) - Optimized runtime (#3927, #3928, #3919)
- Added
finally
to execute code regardless of whether or not an exception is raised
(see: #3895 for more details). - Removed gstreamer support. Gstreamer's architecture was never a good fit for us
and created a huge maintenance and debugging burden and it had been marked as
deprecated for a while. Most, if not all of its features should be available using
ffmpeg
. (#4036) - Add
video.canvas
to make it possible to position video elements independently
of the rendered video size (#3656, blog post) - Add cover manager from an original code by @vitoyucepi (#3651)
- Added non-interleaved API to
%ffmpeg
encoder, enabled by default when only
one stream is encoded. - Allow trailing commas in record definition (#3300).
- Add
metadata.getter.source.float
(#3356). - Added optional
main_playlist_writer
tooutput.file.hls
and
derivated operator (#3484) - Added
is_nan
,is_infinite
,ceil
,floor
,sign
andround
(#3407) - Added
%track.drop
to the%ffmpeg
encoder to allow partial encoding
of a source's available tracks (#3480) - Added
let { foo? } = ...
pattern matching (#3481) - Add
metadata.replaygain
method to extract unified replay gain value from metadata (#3438). - Add
compute
parameter tofile.replaygain
to control gain calculation (#3438). - Add
compute
parameter toenable_replaygain_metadata
to control replay gain calculation (#3438). - Add
copy:
protocol (#3506) - Add
file.touch
. - Add support for sqlite databases (#3575).
- Add
string.of_int
andstring.spaces
. - Add
list.assoc.nullable
. - Add
source.cue
(#3620). - Added atomic file write operations.
Changed:
- Mute SDL startup messages (#2913).
int
can optionally raises an error when passingnan
orinfinity
,int(infinity)
now returnsmax_int
andint(-infinity)
returnsmin_int
. (#3407)- Made default font a setting (#3507)
- Changed internal metadata format to be immutable (#3297).
- Allow a getter for the offset of
on_offset
and dropped the metadata
mechanism for updating it (#3355). - Disable output paging when
TERM
environment variable is not set. - Allow running as
root
user insidedocker
container by default (#3406). - Run
check_next
before playlist's requests resolutions (#3625) - Set
force
totrue
by default infile.copy
to make operator behave
as expected. - BREAKING: Float comparison now follows the expected specs, in particular:
nan == x
is alwaysfalse
and
nan != x
is alwaystrue
. Usefloat.is_nan
to test if a float isnan
. - BREAKING:
replaygain
no longer takesebu_r128
parameter (#3438). - BREAKING: assume
replaygain_track_gain
always stores volume in dB (#3438). - Added
parents
option offile.mkdir
(#3600, #3601). - Added
forced_major_collections
record field to the result ofruntime.gc.stat()
and
runtime.gc.quick_stat()
(#3783). - Changed the port for the built-in Prometheus exporter to
9599
(#3801). - Add support for caching LV2 and LADSPA plugins (#3959).
Fixed: