just_audio_media_kit 2.0.4 copy "just_audio_media_kit: ^2.0.4" to clipboard
just_audio_media_kit: ^2.0.4 copied to clipboard

package:media_kit bindings for just_audio to support Linux and Windows.

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 new ConcatenatingAudioSource and use setAudioSource 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.

3
likes
130
pub points
80%
popularity

Publisher

unverified uploader

package:media_kit bindings for just_audio to support Linux and Windows.

Repository (GitHub)
View/report issues

Documentation

API reference

License

Unlicense (LICENSE)

Dependencies

flutter, just_audio_platform_interface, logging, media_kit, universal_platform

More

Packages that depend on just_audio_media_kit