just_audio_media_kit
media_kit
bindings for just_audio
Breaking changes in 2.x
The installation process has changed, please re-read the install instructions.
Installation
In your pubspec.yaml
:
dependencies:
just_audio_media_kit: ^2.0.0
# Select the native media_kit libs based on your usage:
# NOTE: if including video libs already, these audio libs aren't necessary.
media_kit_libs_linux: any
media_kit_libs_windows_audio: any
Note: you can also use just_audio_media_kit
for Android, iOS and macOS by including the required libs (see below) and enable them in ensureInitialized()
. However, this is not required as they're natively supported by just_audio
.
Use mimalloc (from media-kit's README)
You should consider replacing the default memory allocator with mimalloc for avoiding memory leaks.
This is as simple as adding one line to linux/CMakeLists.txt
:
target_link_libraries(${BINARY_NAME} PRIVATE ${MIMALLOC_LIB})
Before using the AudioPlayer
, call
// by default, windows and linux are enabled
JustAudioMediaKit.ensureInitialized();
// or, if you want to manually configure enabled platforms instead:
// make sure to include the required dependency in pubspec.yaml for
// each enabled platform!
JustAudioMediaKit.ensureInitialized(
linux: true, // default: true - dependency: media_kit_libs_linux
windows: true, // default: true - dependency: media_kit_libs_windows_audio
android: true, // default: false - dependency: media_kit_libs_android_audio
iOS: true, // default: false - dependency: media_kit_libs_ios_audio
macOS: true, // default: false - dependency: media_kit_libs_macos_audio
);
Now you can use just_audio's AudioPlayer
as normal!
Plugin-specific configuration (settings for media_kit
's Player()
instance)
NOTE: these must be set the player initializes or they won't work (you can set these right after or before calling ensureInitialized
)!
Set MPV's log level. Default: MPVLogLevel.error
JustAudioMediaKit.mpvLogLevel = MPVLogLevel.debug;
Sets the demuxer's cache size (in bytes). Default: 32 * 1024 * 1204
(32 MB)
JustAudioMediaKit.bufferSize = 8 * 1024 * 1024; // 8 MB
Sets the name of the underlying window and process for native backend. This is visible, for example, inside the Windows' volume mixer or also in pavucontrol
on Linux. Default: 'JustAudioMediaKit'
JustAudioMediaKit.title = 'My Audio Player App';
Sets the list of allowed protocols for native backend. Default: ['udp', 'rtp', 'tcp', 'tls', 'data', 'file', 'http', 'https', 'crypto']
IF YOU EDIT THIS OPTION: Remember that file
is needed for playing local files, https
and http
are needed to play from URLs and http
to play from a StreamAudioSource
(and sources that implement it, like LockCachingAudioSource
).
JustAudioMediaKit.protocolWhitelist = const ['http', 'https'];
Enables or disables pitch shift control for native backend (with this set to false, setPitch
won't work). Default: true
JustAudioMediaKit.pitch = true;
Enables gapless playback via the --prefetch-playlist
in libmpv. Default: false
This is highly experimental. Use at your own risk.
Check mpv's docs and the related issue for more information
JustAudioMediaKit.prefetchPlaylist = true;
Manually specify libmpv
path (ADVANCED)
To manually specify the libmpv
path, you can use the libmpv
parameter in the ensureInitialized
method:
JustAudioMediaKit.ensureInitialized(
libmpv: '/usr/lib/libmpv.so.2',
);
This is NOT NEEDED in most cases, as package:media_kit
will choose the right library for you (and can even bundle libmpv
via the media_kit_libs_*_*
packages). If you choose to use this option, you will have to perform checks about what platform you're on and where libmpv
is located in that specific platform.
Features
Feature | Linux, Windows |
---|---|
read from URL | ✅ |
read from file | ✅ |
read from asset | ✅ |
read from byte stream | ✅* |
request headers | ✅ (untested) |
DASH | ✅ (untested) |
HLS | ✅ (untested) |
ICY metadata | |
buffer status/position | ✅ |
play/pause/seek | ✅ |
set volume/speed | ✅ |
clip audio | ✅ |
playlists | ✅ |
looping/shuffling | ✅ |
compose audio | |
gapless playback | ✅** |
report player errors | ✅ |
handle phonecall interruptions | |
buffering/loading options | |
set pitch | ✅ |
skip silence | |
equalizer | |
volume boost |
* reads from byte stream via a local HTTP server provided by just_audio
** needs to be enabled
Caveats
just_audio
's shuffleOrder is currently ignored, because there doesn't seem to be a straightforward way to implement it: because of this, I recommend implementing shuffle by manually shuffling the queue, create a newConcatenatingAudioSource
and usesetAudioSource
on your player object.ClippingAudioSource
is currently not supported (waiting for media-kit/media-kit#581 to be released)- The plugin hasn't been tested with multiple player instances, though it should work without any issues.
Licensing
This package is licensed under the Unlicense
license, though
please note that package:media_kit
(which is a direct dependency of this package) is licensed under the MIT
license.
So please refer to package:media_kit
for potential licensing issues.
Libraries
- just_audio_media_kit
- package:media_kit bindings for just_audio to support Linux and Windows.
- mediakit_player