audioplayers
audioplayers copied to clipboard
Crash found in Developer Console, xyz.luan.audioplayers.player.MediaPlayerPlayer.setRate
Checklist
- [X] I read the troubleshooting guide before raising this issue
- [X] I made sure that the issue I am raising doesn't already exist
Current bug behaviour
Exception java.lang.IllegalStateException: at android.media.MediaPlayer.getPlaybackParams at xyz.luan.audioplayers.player.MediaPlayerPlayer.setRate (MediaPlayerPlayer.java) at xyz.luan.audioplayers.player.MediaPlayerPlayer.start (MediaPlayerPlayer.java) at xyz.luan.audioplayers.player.WrappedPlayer.onPrepared (WrappedPlayer.java) at xyz.luan.audioplayers.player.MediaPlayerPlayer.createMediaPlayer$lambda-5$lambda-0 (MediaPlayerPlayer.java) at android.media.MediaPlayer$EventHandler.handleMessage (MediaPlayer.java:3455) at android.os.Handler.dispatchMessage (Handler.java:106) at android.os.Looper.loopOnce (Looper.java:211) at android.os.Looper.loop (Looper.java:300) at android.app.ActivityThread.main (ActivityThread.java:8410) at java.lang.reflect.Method.invoke at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:559) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:954)
Expected behaviour
No crash occurred
Steps to reproduce
- Execute
flutter run --release
on the code sample - ...
- ...
Code sample
Code sample
var playerBg = AudioPlayer(playerId: 'playerBg'); var playerBtn = AudioPlayer(playerId: 'playerBtn');
await playerBg.setPlayerMode(PlayerMode.mediaPlayer); await playerBtn.setPlayerMode(PlayerMode.mediaPlayer);
await playerBg.setReleaseMode(ReleaseMode.loop);
playerBg.play(AssetSource('/audio/bg.m4a');
await playerBtn.play(AssetSource('/audio/btn.m4a');
Affected platforms
Android
Platform details
Android 13 (API 33) Redmi wind (Redmi 10C)
AudioPlayers Version
main, 5.2.1
Build mode
release
Audio Files/URLs/Sources
No response
Screenshots
No response
Logs
No response
Related issues / more information
No response
Working on PR
no way
I have seen this on my player base on a Samsung S22 Ultra running Android 14.
Here is the source code here where the bug occurs: https://github.com/bluefireteam/audioplayers/blob/main/packages/audioplayers_android/android/src/main/kotlin/xyz/luan/audioplayers/player/MediaPlayerPlayer.kt#L41
mediaPlayer.playbackParams = mediaPlayer.playbackParams.setSpeed(rate)
Here is the Android source code for getPlaybackParams():
/**
--
| * Gets the playback params, containing the current playback rate.
| *
| * @return the playback params.
| * @throws IllegalStateException if the internal player engine has not been
| * initialized.
| */
| @NonNull
| public native PlaybackParams getPlaybackParams();
You can see how it says that it throws a IllegalStateException
if the Internal player engine is not initialized.
Also seeing this, in our case after the app resumed.
java.lang.IllegalStateException: null
at android.media.MediaPlayer.getPlaybackParams(MediaPlayer.java)
at nc.i.l(MediaPlayerPlayer.kt:2)
at nc.i.start
at nc.o.z(WrappedPlayer.kt:4)
at nc.i.t
at nc.i.q
at nc.g.onPrepared
at android.media.MediaPlayer$EventHandler.handleMessage(MediaPlayer.java:3357)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7720)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:612)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:997)
Seeing the same in the case of resuming / backgrounding Apps
same here
same here