Not every feature is available on every platform yet. Use this table to keep track of our work and progress, and please help out if you want to. :)
If you would like to assist us implement a missing feature, please browse the issue tracker and reach out to us on our Discord server so we can coordinate efforts.
Giving support to old Android devices is very hard, on this plugin we set the minSdk as 16, but we only ensure support >= 23 as that is the minimum version that the team has devices available to test changes and new features.
This mean that, audioplayers should work on older devices, but we can't give any guarantees, we will not be able to look after issues regarding API < 23. But we would gladly take any pull requests from the community that fixes or improve support on those old versions.
Note: LLM means Low Latency Mode.
Feature/Platform | Android | iOS | macOS | web | Windows | Linux |
---|---|---|---|---|---|---|
Audio Source | ||||||
local file on device | yes | yes | yes | no | yes | yes |
local asset | yes | yes | yes | yes | yes | yes |
external URL file | yes | yes | yes | yes | yes | yes |
external URL stream | yes | yes | yes | yes | yes | yes |
byte array | SDK >=23 | via conversion | via conversion | via conversion | yes | via conversion |
Audio Config | ||||||
set url | yes | yes | yes | yes | yes | yes |
audio cache (pre-load) | yes | yes | yes | yes | yes | yes |
low latency mode | SDK >=21 | no | no | no | no | no |
Audio Control Commands | ||||||
resume / pause / stop | yes | yes | yes | yes | yes | yes |
release | yes | yes (no mode) | yes (no mode) | yes (no mode) | yes (no mode) | yes (no mode) |
loop | yes | yes | yes | yes | yes | yes |
volume | yes | yes | yes | yes | yes | yes |
seek | yes | yes | yes | yes | yes | yes |
Advanced Audio Control Commands | ||||||
playback rate | SDK >= 23 | yes | yes | yes | yes | yes |
duck audio | yes (except LLM) | no | no | no | no | no |
respect silence | yes (except LLM) | yes | no | no | no | no |
stay awake | yes (except LLM) | yes | no | no | no | no |
recording active | not yet | yes | no | no | no | no |
playing route | yes (except LLM) | yes | no | no | no | no |
balance | yes | not yet | not yet | yes | yes | yes |
Streams | ||||||
duration event | yes | yes | yes | yes | yes | yes |
position event | yes | yes | yes | yes | yes | yes |
state event | yes | yes | yes | yes | yes | yes |
completion event | yes | yes | yes | yes | yes | yes |
log event | yes | yes | yes | yes | yes | yes |
To control playback from lock screen on iOS and Android, you can use @ryanheise's excellent audio_service package. This article showcases how to integrate audioplayers features with and audio_service.
Do not send any PRs or additions regarding notifications/lock screen support, unless it is a generic change on our infrastructure/wiring to support better integrating with audio_service
.
Some features are also out of scope for the audioplayers
package. The goal of this library is to provide a unified place to play audio media, be it songs, background musics, sound effects, etc, from different sources, and providing an array of advanced controls and listeners to control it via code.
Non-goals: if the existing solutions proposed below are not good or do not work well with audioplayers, I am happy to collaborate to create an audioplayers_x
separated package (eg audioplayers_recorder
).
- interfaces: nothing related to interface building concerns audioplayers; you can use Flutter to build your interfaces;
- audio recording: recording audio from the microphone into audio files and streams; there is already a package for this called audio_recorder.
- playlist: you can implement playlists as you wish by playing multiple audios or songs in sequence. Doesn't make sense for this package to have any builtin playlist mechanism.
- music metadata: some file formats include music metadata, like MP3 files that have author, track. This is a library dedicated for playing audio. It is a non-goal to provide this functionality.