- Fixed detection of explicit sample rate values in FLAC files.
- Fixed incorrect reading of UTF-8 characters in title and artist for Matroska files.
- Fixed some issues with AAC decoder initialisation caused by track configuration mangling.
- Fixed AAC decoder configuration not accounting for extended configurations with SBR and PS profiles.
- Fixed handling of passing
null
toDefaultAudioPlayer#scheduleTrack
- Fixed handling of some MP3 files with multiple IDv3 blocks.
- Fixed metadata extraction for some Ogg files.
- Fixed duration extraction for some Ogg opus files.
- Fixed an issue where the
PcmChunkEncoder
wouldn't forceBIG_ENDIAN
byte order. - Fixed an issue where sometimes an error would be thrown when initialising the Twitch source manager.
- Fixed an issue where seeking before an Ogg Vorbis track has been initialised could cause a NullPointerException.
- Fixed a rare thread leak with track executors caused by a race condition.
- Added basic metadata extraction for Matroska files.
- Added support for configuring the Opus encoder.
- Added support for applying per-player audio configurations.
- Deprecated the built-in Youtube source manager. Use youtube-source instead.
- Fixed an issue with the
SoundCloudAudioSourceManager
where it could try to decode a track with extra, custom data encoded into the base64 string. - Tentative fix for "Invalid status code for video page response: 400"
- Seems like this error is triggered by the use of a client version that's no longer within YouTube's "last 2 major versions" support.
- Added
AudioPlayer#scheduleTrack(AudioTrack, boolean)
.
- Expose
DefaultAudioPlayer#dispatchEvent()
in subclasses. - Expose
DefaultPlayer
'sscheduledTrack
,activeTrack
,shadowTrack
,manager
andtrackSwitchLock
fields in subclasses. - Remove redundant initialization of
CompletableFuture
withinYoutubeMpegStreamAudioTrack#updateGlobalSequence()
.
- Fixed a race condition that could cause
TrackStartEvent
to fire multiple times.
- Added
monetizationModel
andsnipped
fields toSoundcloudAudioTrack
.- This can be used for identifying SoundCloud Go+ tracks.
- Fixed Bandcamp tracks throwing an exception due to invalid URLs caused by a null
title_link
property. - Fixed scheduled tracks in
DefaultAudioPlayer
not being unset upon throwing an exception.
- Changed Soundcloud tracks to log all returned formats when a compatible one could not be found.
- Added audio frame flags, accessible via
AudioFrame#getFlags()
- Added a method for decoding an audio chunk with an existing ByteBuffer via
AudioChunkDecoder#decode(ByteBuffer, ShortBuffer)
- Added a method for decoding an opus audio chunk which returns the number of bytes decoded via
OpusChunkDecoder#decodeWithCount
- Added support for multiple track markers.
- Added support for gapless playback.
- Added support for Vimeo's HLS format.
- Fixed an issue where
MutableAudioFrame
s would not have a format applied in some cases. - Fixed an issue in
PcmVolumeProcessor
where some values were clamped with an incorrect minimum value. - Fixed loading of YouTube urls formatted as
/live/videoId
. - Fixed a possible
NullPointerException
when trying to invokegetPosition()
on a Youtube mpeg stream where a sequence has not yet been received. - Fixed
TwitchStreamAudioSourceManager
not finding channels if uppercase characters were present. - Fixed
NicoAudioSourceManager
'sTRACK_URL_REGEX
not capturing some URL patterns.
- Changed
WavTrackProvider
to not needlessly recalculatebytesPerSample
- Optimised
WavTrackProvider
transformation of PCM samples with >16 bits. - Changed
WavFileLoader
to validate subformats when the format isWAVE_FORMAT_EXTENSIBLE
. - Changed
YoutubeAudioSourceManager
to throw an exception when trying to load a user's automatically generated playlists.- These are playlists like
LL
(liked videos),WL
(watch later),LM
andRDMM
. These cannot be accessed without some form of oauth integration.
- These are playlists like
- Added support for PCM audio with 32 bits per sample (
S32LE
).
- Improved robustness of
wav
audio tracks with more than 16 bits per sample.
- Optimised reading of PCM audio to reduce allocations.
NicoNicoAudioSourceManager
.- Fixed m3u playlists not loading if Lavaplayer is directly given an inner playlist.
- Fixed m3u playlists containing relative URLs not playing.
- YouTube playlist tracks sometimes having a missing author fields.
- Lavaplayer will provide a default as YouTube doesn't send the author in this situation.
IDENTITY_REGEX
inYoutubeAccessTokenTracker
.
- Bumped a couple of dependency versions.
- Added support for retrieving lyrics from YouTube music.
- Added support for MPEG 2.5.
- Added support for SoundCloud short URLs.
- Ogg streaming.
- YouTube access token updating.
- Status code 403 for YouTube tracks.
LocalFormatIntegrationTest
failing.
- Added
PCM_S24LE
support. - Added support for rewinding YouTube streams.
- Added support for rewinding Ogg files.
- Added a method for retrieving registered source managers via
AudioPlayerManager#getSourceManagers()
. - Added support for YouTube format audio tracks.
- Ability to set custom socket factory.
- Twitch source.
- Possible infinite read loop in mpeg parsing.
- Rewinding to beginning of Ogg files.
- Bumped dependency versions to try and resolve some CVE messages.
- Send additional parameters with the
ANDROID
client in requests to YouTube.
- Send Visitor ID header with YouTube requests.
- YouTube client config retrying.
- Fixed loading YouTube tracks with age verification.
- Fixed SoundCloud Client ID detection which broke loading SoundCloud tracks.
- Fixed playing YouTube tracks which require a separate verification request (PR #615 by Walkyst).
- Fixed quotes in YouTube Music search breaking the request (PR #618 by Walkyst).
- Fixed playing age restricted YouTube tracks (PR #627 by Walkyst).
- Fixed SoundCloud URLs not working if they end with a slash (PR #626 by NavyCake).
- Added a method to load tracks from the player manager by AudioReference (PR #620 by duncte123).
- Fixed using natives dependency which may have had outdated files in the new repository.
- Fix loading YouTube playlists not working due to non-error alerts.
- Fix playing YouTube tracks by using a hardcoded consent cookie.
- Fix for YouTube playlists with pagination not loading (PR #592 by Walkyst)
- Fixed a specific MP3 frame type (version 2, layer 1, 144kbps) being decoded incorrectly.
- Fixed YouTube music search failing if some results did not include duration.
- Fixed a bug with MP4 AAC decoding introduced in 1.3.68.
- Fixed YouTube age restricted videos which broke due to embed page content change.
- Added support for AAC profiles other than AAC-LC in MP4 files.
- Added support for
music.youtube.com
URLs (PR 562 by Walkyst).
- Internal changes to allow custom
AudioPlayerManager
implementations (PR 572 by ToxicMushroom).
- All YouTube requests are now retried once if they get a connection reset during connection establishment.
- Attached LP, OS and JDK version information to all FriendlyExceptions as a suppressed exception.
- Fixed SoundCloud not working due to a change in the site (PR 570 by reptar25).
- Added option to override logging handler for errors with large payloads.
- Removed Mixer implementation, source manager class kept for now to not cause a breaking change.
- YouTube playlist loader logs response content if content type is not JSON.
- Status code 429 from YouTube now causes an exception which explains YouTube block.
- GC logging no longer warns about pauses shorter than 200ms.
- Fixed age restricted YouTube videos (PR 559 by Walkyst).
- Fixed YouTube search results using current locale language (PR 557 by madeyoga).
- Fixed removing/adding player listeners failing when done from within listener callback.
- Fixed YouTube playlist pagination being broken (PR 552 by Xavinlol).
- Fixed AAC streams possibly detected as MP3 even if their mime type is set to audio/aac.
- Added support for SoundCloud tracks which only have MP3 HLS format available.
- Fixed some YouTube live streams caused by MP4 audio data being skipped in MP4 with no sidx.
- Fixed no exception thrown when native lib loading fails.
- Fixed seeking on MKV files with cues in the end of the file.
- Fixed YouTube VOD duration set to unknown.
- Fixed Bandcamp track and album loading which broke due to url changes (PR 527 by Walkyst).
- Fixed Twitch stream loading failure which broke due to access token changes (PR 410 by kimcore).
- Fixed Twitch stream including ads which also broke stream start sometimes.
- Fixed a redundant request made for YouTube age-restricted tracks.
- Fixed various issues with YouTube track loading and searches.
- Fixed YouTube playlist track titles being null (PR 534 by gmfonseca).
- Fixed YT search sometimes not finding anything because of YT providing different format (PR 492 by Frederikam).
- Fixed Twitch streaming breaking due to API change (PR 480 by Devoxin).
- Fixed YT private videos providing invalid result instead of failing (PR 479 by Devoxin).
- Fixed some YouTube tracks not working because of cipher detection issues (PR 475 by Devoxin).
- Fixed loading YouTube live streams within playlists (PR 294 by Devoxin).
- Fixed YouTube mix loading, mixes loaded with just one request now (PR 293 by Devoxin).
- Fixed some YouTube live streams not being loaded and randomly stopping (PR 291 by Devoxin).
- Fixed failing to load SoundCloud playlists with more than 50 tracks (PR 290 by Devoxin).
- Fixed SoundCloud connection leaks which eventually caused pool limit to be reached and new connections getting stuck.
- Added
AbstractHttpContextFilter
to easily create additional HTTP context filters with delegates.
- Added support for GetYarn.io as a source (PR 277 by duncte123).
- Fixed audio event adapter method with stuck stacktrace included not getting called.
- Added
SimpleHttpClientConnectionManager
to sources which can be used to disable pooling for HTTP of some source.
- Added method to set Apache HTTP connection manager factory to customize connection handling.
- Track stuck events now provide stacktrace of the struck thread.
- Fixed unable to fetch YouTube player script for ciphered URLs.
- Unexpected response code from YouTube player script request now logs more details.
- Added method to provide a set of IPs to be used for making an HTTP connection without choosing a specific one.
- HTTP connection failure exceptions now contain all details about the connection that was being established.
- Fixed NPE for unavailable SoundCloud tracks (PR 276 by duncte123).
- Fixed YouTube missing fallback to embed page for "objectionable content" videos (PR 270 by Xavinlol).
- Fixed NPE instead of common exception for missing YouTube video (PR 264 by duncte123).
- Fixed blocked tracks included in SoundCloud liked tracks result (PR 261 by nikammerlaan).
- Added builder for SoundCloud source manager.
- Added a more concise way to create an extended media container registry.
- Fixed SoundCloud tracks longer than 30 minutes breaking during playback due to URLs expiring.
- Fixed redundant retry attempts for SoundCloud liked tracks and search result pages.
- SoundCloud source manager is now modular and more easily extendable.
- Fixed non-opus tracks no longer working due to old stream API not being available anymore.
- Fixed SoundCloud opus seeking not working when applied before track starts.
- Fixed SoundCloud opus seeking not working.
- Fixed response code 203 treated as an error everywhere.
- Fixed SoundCloud track loading failing if no opus track is available.
- Support for SoundCloud opus streams by default, old MP3 streams only used if opus is not available.
- Manipulation of HTTP requests and triggering retries with HTTP context filter instead of a simple request modifier.
- HTTP request modifier interface which allows modifying outgoing requests.
- Use YouTube pbj=1 requests for tracks and playlists.
- Fixed new track formats breaking YouTube track loading (PR 210 by Ferderikam)
- Fixed playing direct SoundCloud tracks which broke due to site change (PR 208 by Devoxin).
- Fixed some cases where YouTube tracks broke because of duplicate parameters (PR 180 by Joakim).
- Fixed new format YouTube pages where no cipher was used (PR 205 by Devoxin).
- Fixed playback for YouTube when format list is only provided through player_response.
- Fixed broken YouTube track loading due to changes the site (PR 199 by Frederikam).
- YouTube track info JSON now gets logged if it does not contain any expected fields.
- Fixed closing MKV Opus track throwing an exception if playback initialization had thrown an exception earlier.
- Fixed exception from track close reported instead of playback exception on MKV close.
- Fixed passing an invalid parameter to YouTube embed page URL.
- Fixed age-restricted videos not being playable (PR 172 by Devoxin).
- Fixed probe hint matching logic for aac/ts causing HTTP source to not resolve tracks when mime type was present.
- Fixed no automatic reconnect on connection reset for some JDK versions.
- Fixed MKV frame size parsing which caused some MKV/WEBM files to fail in the middle of playback.
- Fixed an old x86 Linux native being bundled with main LP artifact, causing previous libc conflict to still manifest.
- Fixed natives crashing due to libc conflict.
- Fixed exception when calling provide on an ending track.
- Support for playing MPEG-TS files directly, including metadata support.
- Metadata for OGG vorbis files.
- AAC and MP3 decoders updated to newer versions.
- Linux native libraries have better compatibility with alternate libc implementations (musl on Alpine for example)
- More flexibility for specifying which native libraries and from where to load.
- Fixed file format detected incorrectly due to check order when file extension is known.
- Fixed exception when processing the last frame of some FLAC files.
- Fixed YouTube video signature using wrong parameter name in some cases.
- Fixed ImmutableAudioFrame#getData doing the wrong thing.
- Fixed MP3 track length detected incorrectly if they contain certain type of metadata.
- Fixed a race condition which could sometimes drop the last frame of a track.
- Generic HLS stream support.
- Ability to add custom file format support (as custom MediaContainerRegistry).
- Fixed YouTube streams not reconnecting due to SSL exception wrapper changes in JDK10+.
- Fixed playing age-restricted videos using the embed page (PR 136 by duncte123).
- Added support for YouTube watch_videos urls (PR 123 by matsprehn).
- Added support for YouTube music.youtube.com domain links (PR 134 by GigaFyde).
- Fixed Mixer streams.
- Fixed Twitch streams by using the Helix API (PR 132 by tdeeb).
- Fixed OGG metadata memory usage exploit (PR 131 by napstr).
- Fixed YouTube search not working in some regions due to different time format.
- Made it easier to use custom AudioPlayer implementations.
- Fixed volume formula not scaling well beyond 150 - now switches to linear mode after 150.
- Maximum volume setting set to 1000.
- Fixed AAC+SBR+PS not working properly for MP4/MKV containers.
- Ability to write more custom audio players as the player is now an interface.
- HTTP stream reconnect when using Conscrypt as SSL provider.
- Fixed mutable audio frames and non-allocating buffer exploding in some use cases.
- Fixed PCM output format regression.
- Option for allocation-free frame provision pipeline by allowing to set NonAllocatingAudioFrameBuffer as the default frame buffer implementation and then using the new provide methods that take mutable audio frame instances.
- Ability to set SSL context for internally used HTTP clients. This allows for custom SSL providers such as Conscrypt.
- Support for custom output formats using custom implementations of AudioDataFormat.
- Audio frame is now an interface, which is a breaking change for all use cases.
- Removed the concept of audio hooks.
- Some audio sources not freeing their HTTP clients when they were discarded.
- Potential NPE when the only node went down when a track was playing on it.
- Not closing OGG decoders created during track probing (still got closed on finalize).
- Missing Javadocs.
- Fixed WAV files with format header longer than 16 bytes not working.
- Fixed Twitch or Mixer tracks ending when next chunk of the stream is not available yet.
- Fixed non-mono inputs being distorted or passing the wrong number of channels to custom filters.
- Fixed loading a mix on a non-existing track throwing an exception instead of triggering no matches.
- Ogg FLAC and Ogg Opus metadata (title and artist).
- Track length detection for Ogg Opus and Ogg FLAC on a seekable stream.
- Metadata detection from ShoutCast stream headers.
- Method to set track frame buffer duration per player.
- Fixed HTTP 403 for some YouTube tracks due to adding one parameter to the playback URL twice.
- Equalizer filter and its filter factory to LavaPlayer classes (still need to be applied manually).
- Ability to add a custom audio filter factory to an instance of an audio player.
- Fixed Twitch stream loading regression.
- Fixed YouTube mix loading regression.
- Added method to get Twitch track channel name.
- Fixed NPE when YouTube URL has parameters without values.
- Fixed Windows native libraries being mixed up.
- Attempt to retry connection in case of socket read timeout.
- Fixed mobile SoundCloud links not working.
- Fixed 32-bit Windows natives being incompatible.
- YouTube search result loader performs HTTP requests with cookies disabled by default now.
- Fixed YouTube URLs with extra characters after video ID not working even though YouTube accepts them.
- Fixed NPE when video ID is not in valid format, now triggers
noMatches
instead. - Fixed missing YouTube video triggering
loadFailed
instead ofnoMatches
.
- Fixed attempting to load a native library that does not exist since last version on Windows x86.
- Fixed all consecutive HTTP connections failing after the HTTP of a source manager is reconfigured.
- Fixed ADTS/AAC streams with SBR and/or PS enabled (also known as AAC+ streams).
- Fixed ADTS/AAC streams with MPEG version 2 refused.
- Fixed MPEG2 MP3 file frames read incorrectly, causing artifacts and spam in standard error stream.
- Methods to allow reconfiguring HTTP builders used by source managers.
- Method to change YouTube mix loader thread pool size.
- Fixed YouTube ciphers being broken due to slight change to YouTube player script.
- All dependencies updated to latest versions (solves some issues with mismatching versions of Jackson).
- Support for twitch streams with domain
go.twitch.tv
. - Support for
m.soundcloud.com
domain for Soundcloud URLs.
- Fixed Twitch stream segment URL resolution occasionally producing incorrect URLs.
- Fixed YouTube links not working when they contain extra parameters.
- Local tracks can now be encoded.
- Fixed Bandcamp source being broken due to URL format change.
- Support for
mixer.com
(newbeam.pro
domain name).
- Fixed YouTube search being broken due to page style change.
- Improved efficiency of
.mkv
/.webm
processing by making it practically garbage-free.
- Fixed NPE thrown when an MPEG stream ends gracefully.
- Fixed dual channel mono MP3 files not working.
- Properly fixed the YouTube cipher detection (previous one missed some operations).
- Partially fixed YouTube cipher detection where reserved keywords are function names.
- Ability to store one user data object in audio track instances.
- Dumping YouTube scripts where cipher detection does not work.
- Fixed YouTube tracks with only mixed audio-video MP4.
- Twitch stream title is now stream status rather than channel name.
- Fixed MP3 not working with local files.
- Fixed only MP3 working with local files.
- Fixed deadlock when starting tracks from exception event
- Fixed seeking while track is initialising possibly interrupting load.
- Fixed stopped track threads sometimes not exiting.
- Added track URL field to track info object.
- Fixed SoundCloud client ID not updated if expiration was discovered on a request for search or playlist.
- Fixed SoundCloud not working due to client ID change.
- SoundCloud client ID now fetched from their page now, not hardcoded.
- Support for mono MP3 format.
- PlayerLibrary which exposes the library version.
- Fixed using nodes not working after node list is cleared once.
- Fixed read timeout exception thrown when playing some YouTube live streams.
- Fixed excessive amount of requests made for YouTube live streams.
- Added a way to configure HTTP request settings for source managers.
- Changing volume with PCM output rebuilds frame buffer into silence.
- Added NicoNico source manager.
- Fixed exploding on seekable YouTube live streams.
- Fixed using an unnecessary high track start message version when communicating with node.
- Fixed a potential issue with YouTube ciphers not being detected correctly (403 error) and added more cipher logging.
- Fixed some reconnect cases for HTTP connections not actually working.
- Fixed inaccurate seek on resampled streams.
- Retry connection also on premature HTTP response end exception.
- Abandoned tracks are taken over by other nodes more quickly.
- When remote nodes go offline, their tracks are slowly taken over by other nodes.
- Fixed Beam.pro tracks not playable in nodes.
- Fixed seeking on tracks which had not been started yet.
- Fixed a possible crash when a Vorbis track was shut down before being successfully initialised.
- Retry stream connection on NoHttpResponseException, which may be caused by connection reuse.
- Retry stream connection on SSL errors, which may be caused by severed connection.
- Retry stream connection once on 500 series errors, due to possibly flaky server side issues.
- Fixed loadFailed being called for exceptions in other callbacks.
- Improved logging to know causes of all failed requests and changes some inappropriate logging levels.
- Fixed a regression with YouTube dashmpd-only tracks not working.
- Support for alternative YouTube JSON format (adaptive_fmts -> url_encoded_fmt_stream_map).
- Fixed interrupts from previous tracks may be carried over to executors of new tracks.
- Beam.pro source manager.
- Fixed reused clients restricting the number of concurrent connections to a very low value.
- Fixed track stop or seek throwing an exception in some conditions due to InterruptedException getting wrapped.
- Track info loader queue full exception is passed to loadFailed instead of being thrown directly.
- Fixed using wrong version of lavaplayer-common dependency (again).
- Fixed track loading queue throwing "queue full" exception when the queue is not empty.
- Fixed using wrong version of lavaplayer-common dependency.
- Added the option to increase the number of threads used to load tracks.
- Reusing HTTP client objects as much as possible.
- Limited the size of the track info loader queue.
- Fixed YouTube live streams opening a new connection for each request.
- Fixed no read timeout applied to requests to nodes.
- Fixed track getting locked when seek gets stuck.
- Fixed attempting to read the entire response on closing a stream mid-way.
- Increased timeout for terminating the tracks of a node if its processing is stuck.
- Fixed Vorbis MKV tracks not working if the channel count was not specified in MKV audio section.
- Partial support for YouTube live streams (only MP4).
- Method to poll frames from AudioPlayer in a blocking way.
- Support for different audio output formats.
- Utility class for getting an AudioInputStream from AudioPlayer.
- Fixed another smaller leak with Vorbis.
- Fixed a native memory leak with Vorbis tracks.
- ARM binaries are now loaded from natives/linux-arm and natives/linux-aarch64 directories instead of x86 ones.
- WAV file support (16-bit PCM).
- Loading unlisted SoundCloud tracks.
- Searching on SoundCloud with scsearch: prefix.
- Option to specify maximum number of YouTube playlist pages to load (was hardcoded to 6).
- Fixed SoundCloud playlist tracks in wrong order.
- Fixed paid movies appearing in YouTube search results.
- Fixed YouTube playlists with UU prefix not working.
- Support for OS X (native library).
- Fixed YouTube tracks broken when player.js URL was given without hostname.
- Fixed constant delay on processing node messages.
- Fixed making a new HTTP connection for each node request.
- Reduced playing track count effect on node balancing.
- Node balancing takes CPU and latency more seriously.
- Node messaging changed, requires node update to 1.1.38.
- MKV file handling refactored to be more lightweight.
- Fixed track marker and position reset when starting the track.
- Fixed loading HTTP urls with local redirects.
- YouTube search results no longer include ads.
- Fixed a regression with loading native libraries on Windows.
- Fixed an issue when JDA-NAS and LavaPlayer were used together with different classloaders.
- Made node balancing weight data available.
- Request time to nodes also used for balancing between nodes.
- Fixed an issue with MP3 files sometimes being detected as ADTS streams.
- Made various statistics about remote nodes available.
- Made requests to nodes tolerate higher latency without stuttering.
- Changing remote node list does not stop tracks on unaffected nodes.
- Dependency restructuring for compatibility with JDA-NAS.
- Support for legacy MP3 ID3v2.2 tags.
- Fixed nonexistent YouTube tracks being tried as raw HTTP urls.
- Title and artist information for MP4/M4A files.
- Can check if playlist is a search result.
- Fixed SoundCloud not working because of SoundCloud client ID expiring.
- Option to disable YouTube searches.
- Support YouTube searches by using "ytsearch: query" as identifier.
- Made it simple to register all bundled sources through the methods of AudioSourceManagers.
- Allow redirects from raw HTTP urls to other source providers.
- Fixed an exception on the end of some MP4 tracks.
- Added mayEndTrack field to end reasons.
- Special end reason for failed track initialization.
- Fixed an issue with resolving correct YouTube stream URL due to a bug in cipher detection.
- Lowered default resampling quality.
- Fixed some tracks mistakenly detected as MP3 streams.
- Allow icy:// urls, which are used in some radio stream playlists.
- Fixed exception on OGG streams when they end.
- SoundCloud fix + provider more resilient to site updates.
- Track markers.
- Loop feature. It can be done with markers.
- SoundCloud liked tracks page loadable as a playlist.
- Common exception in case a playlist is private.
- Fixed YouTube track not loaded if it is part of a private playlist.
- Twitch stream support.
- Vimeo support.
- Support for the more common non-fragmented format of MP4/M4A.
- IDv2.3 tag support.
- Fixed exception on long ID3 tags on streams.
- Plain text files with a URL loaded as radio stream playlist.
- Fixed SoundCloud not working due to site update.
- Support for PLS playlists for radio streams.
- Support for ICY protocol to fix some SHOUTcast streams.
- Support for ADTS+AAC radio streams.
- Bundled some LetsEncrypt SSL root certificate missing on some JDK installations.
- Support for adding custom SSL certificates.
- Fixed SoundCloud URLs not working with a slash in the end.
- BandCamp support.
- M3U support for radio streams.
- MPEG2+layerIII MP3 format support.
- Fixed an exception on OGG stream playback.
- OGG stream support.
- Fixed exception on loading age-restricted YouTube videos.
- Fixed an exception on decoding some FLAC files.
- Fixed huge CPU load on tracks from local files.
- FLAC support.
- MP3 stream support.
- Fixed NPE on missing Content-Length in HTTP responses.
- HTTP source for loading any URL as a track.
- Loading artist and title from MP3 tags.
- Custom executor support.
- Fixed track end not triggering on exception.
- Accurate seeking and duration for VBR MP3 files.
- Track serialization.
- Fixed only one thread used for loading track info.
- Shutting down player managers and source managers.
- Cleaning up abandoned players.
- File type detection based on content.
- Track end reasons.
- Fixed TrackStartEvent event not called.
- Audio output hook for experimental native UDP packet scheduling.
- Fixed huge CPU load from GC monitor.
- Fixed track duration reported in microsecons.
- GC pause monitor for logging the number of GC pauses in different duration ranges.
- Made null a valid argument for playTrack with identical behavior to stopTrack.
- SoundCloud playlist support.
- Fixed YouTube tracks which use dash XML and are protected with cipher.
- Offloading audio processing to remote nodes with load balancing.
- Refactoring of track execution.
- Method for loading items in order.
- Opus encoding quality setting.
- Fixed SoundCloud tracks with underscores not working.
- Resampling quality setting.
- Track length info provided in milliseconds instead of seconds.
- Fixed getPosition always returning 0 when setPosition was called before start.
- Tracks can be cloned (for replay).
- SoundCloud support (single tracks)
- Support for special playlist types on YouTube (liked videos, favorites, mixes).
- MP3 support.
- YouTube track is loaded as a playlist if playlist is referenced in the URL.
- Fixed broken special characters in track info when system default charset is not UTF8.
- Severity levels for FriendlyException.
- Report YouTube errors with the proper error message and COMMON severity.
- Fixed smooth transition not working from volume 0.
- Volume support with smooth transition.
- Support for nonstandard opus streams, such as mono.
- Fixed onTrackException not being called.
- Initial release.