This release is a snapshot of upcoming features. It also contains several important bugfixes. As a snapshot, it contains experimental or unpolished features, and also breaks compatibility with previous versions. You should in particular notice the two "New" items below:
- random(strict=true) is now called rotate();
- request sources (playlists, request.*) have a new queuing behavior,
check the doc (request-sources.html) or revert to conservative=true.
Bugs fixed:
- Ogg encoder now muxes pages according to their ending time.
- Support "ogg/audio" and "ogg/video" mime types for HTTP ogg streams.
- Changed external encoder's "restart_encoder" to the more relevant
"restart_on_new_track". Added optional "restart_after_delay"
to restart the encoder after some delay. Also completely rewrite
stop mechanism. Stop operation now waits for the encoding process
to finish, allowing proper restart_on_new_track like for ogg encoded
data. - Factorized buffered I/O code. Also added a blocking API, which avoids
"no available frame" and "reader not ready" messages and audio glitches.
It enforces that "root.sync" be deactivated for these sources, such that
synchronisation is done by the source. (#203) - Factorized file decoding code.
- Fixed reversed order when parsing playlists using playlist.parse().
- Avoid bad crashes when resources lack, e.g. no more memory.
- Tighten and enforce the inter-source protocol.
- All outputs: fix the autostart server command. With the former code,
a modification of the autostart parameter was only taken into account
one start/stop cycle later. - on_blank(): fix a bug that prevented the first call to on_noise.
- Fixed estimated remaining samples on ogg files, fixes issues with
operators relying on this value, in particular crossfade() and
request-based sources when operating in non-conservative mode. - Fixed socket descriptor leak in input.http. (#318)
- Fixed deadlock at init when an exception was raised at wake_up
phase. (#319) - Fix delay() which could sometimes incorrectly declare itself ready,
and thus try to get some data from its unavailable input source. - Bug in queue duration estimation led to infinite feeding of the queue,
until all request IDs are taken. - Several fixes enforcing clean (non-deadlocking) sleep/shutdown.
New:
- The operator rotate() replaces random(strict=true), and random()
does not have a strict parameter anymore. - Switch to new behaviour in request-based sources.
Use conservative=true to get to the old behaviour. - on_blank(): provide an on_noise handler.
- playlist*(): add server commands for reloading the playlist and changing
its URI. - Fallible outputs: all outputs now have a fallible mode, in which
they accept fallible sources, and automatically start/stop when the child
fails to stream. - EXPERIMENTAL ogg/dirac encoding support.
- output.*.aacplus(): native outputs encoding in AAC+ using ocaml-aacplus.
- Switched to a custom implementation of the various shout protocols.
It notably allows arbitrary content-type settings which enables
AAC+ streaming. Enabled wrappers for external encoders for AAC+ format
aacplusenc (#220 and #136). Also added custom IRC, AIM and ICQ headers
to shoutcast wrappers (#192). - Harbor now supports Shoutcast/ICY headers properly. This allows in
particular the use of any supported data format for the source client. - Harbor sources now also consider "song" field when updating metadata.
- Added built-in support for m4a audio files and metadata.
Made external support optional through enable_faad. - Added optional resampling for output.external operators (#273).
- Added optional host and port parameters for audioscrobbling
submissions. Allows to use alternate systems, such as libre.fm
of jamendo's compatibility API. Added nowplaying submission,
and various wrappers, including a full submission process
(now playing at beginning, submit some times before the end). - New variables in the script language: liquidsoap.version and
configure.{libdir,pidfile,logdir}. - Added built-in support for replay_gain, through the replay_gain protocol
(enabled by default) and the replay gain metadata resolver (to be enabled
using enable_replaygain_metadata()). (#103 & #317) - Reverse DNS operations can be disabled using settings keys
"server.telnet.reverse_dns" and "harbor.reverse_dns".
Experimental:
- MIDI: file decoding, synthesis, virtual keyboard.
Removed:
- RTP input and output.
- Removed decoders using ocaml-natty. Slow, unmaintained and superseded
by the mplayer decoder.