florent37 / Flutter-AssetsAudioPlayer

Play simultaneously music/audio from assets/network/file directly from Flutter, compatible with android / ios / web / macos, displays notifications
https://pub.dartlang.org/packages/assets_audio_player
Apache License 2.0
748 stars 341 forks source link

android app crashes when open current playing song page. #659

Closed Ansh-Rathod closed 2 years ago

Ansh-Rathod commented 2 years ago

Flutter Version

My version: 2.8.1

Lib Version

My version: latest

Platform (Android / iOS / web) + version

Platform: android

Describe the bug Hi, there I'm creating a Spotify clone app with this package and I have completed the whole app but in the last, I started testing on my other phone spec. (android 11 Xiaomi note 10t miui 12.5.1 minSdkVersion 30) but it crashes(exits without crash dialog) the app when I open the current playing song. but it works fine on my other phone( android 8 Xiaomi note 5 miui 11.0.2 )

logs

    66.7s
√  Built build\app\outputs\flutter-apk\app-debug.apk.
Installing build\app\outputs\flutter-apk\app.apk...                23.6s
W/.example.musiv(32456): Accessing hidden method Landroid/media/AudioTrack;->getLatency()I (greylist, reflection, allowed)
I/ExoPlayerImpl(32456): Init 556b316 [ExoPlayerLib/2.14.1] [camellia, M2103K19I, Xiaomi, 30]
E/libc    (32456): Access denied finding property "ro.vendor.df.effect.conflict"
E/libc    (32456): Access denied finding property "ro.vendor.knock.type"
I/TetheringManager(32456): registerTetheringEventCallback:com.example.musive
D/CompatibilityChangeReporter(32456): Compat change id reported: 147600208; UID 10277; state: ENABLED
I/System.out(32456): [okhttp]:check permission begin!
I/System.out(32456): [okhttp]:not MMS!
I/System.out(32456): [okhttp]:not Email!
I/System.out(32456): [socket]:check permission begin!
I/System.out(32456): [OkHttp] sendRequest>>
I/System.out(32456): [OkHttp] sendRequest<<
W/AudioCapabilities(32456): Unsupported mime audio/x-adpcm-ms
W/AudioCapabilities(32456): Unsupported mime audio/x-adpcm-dvi-ima
W/AudioCapabilities(32456): Unsupported mime audio/alac
W/AudioCapabilities(32456): Unsupported mime audio/ape
W/VideoCapabilities(32456): Unsupported mime image/vnd.android.heic
W/VideoCapabilities(32456): Unrecognized profile/level 1/32 for video/mp4v-es
W/VideoCapabilities(32456): Unrecognized profile/level 32768/2 for video/mp4v-es
W/VideoCapabilities(32456): Unrecognized profile/level 32768/64 for video/mp4v-es
W/VideoCapabilities(32456): Unsupported mime video/x-ms-wmv
W/VideoCapabilities(32456): Unsupported mime video/xvid
W/VideoCapabilities(32456): Unrecognized profile/level 1/32 for video/mp4v-es
I/OMXClient(32456): IOmx service obtained
W/MtkACodecExt(32456): Not expected one.
I/ACodec  (32456): codec does not support config priority (err -2147483648)
D/AudioTrack(32456): INSP: type=audio,case=1,set=0xb4000076b6ae6f00,stream_type=-1,sample_rate=44100,format=0x1,channel_mask=0x3,frame_count=11025,flags=0x0,notification_frames=0,session_id=6697,transfer_type=3,uid=-1,pid=-1
D/AudioTrack(32456): INSP: type=audio,case=1,attributes=1,content_type=0,usage=1,source=-1,flags=0xa00
D/AudioTrack(32456): set(sessionID=6697)
D/AudioTrack(32456): set(): Building AudioTrack with attributes: usage = 1, content = 0, flags = 0xa00, tags = []
D/AudioTrack(32456): set(): 0xb4000076b6ae6f00, Create AudioTrackThread, tid = 525
D/AudioTrack(32456): createTrack_l(607): 0xb4000076b6ae6f00, mCblk = 0x76a5dcc000, mLatency = 335, mAfLatency = 85, frameCount = 11025, mSampleRate = 44100, mFlags = 0x8, mReqFrameCount = 11025, mNotificationFramesAct = 5512
D/AudioTrack(32456): setVolume(607): 0xb4000076b6ae6f00, left = 1.000000, right = 1.000000
W/Glide   (32456): Failed to find GeneratedAppGlideModule. You should include an annotationProcessor compile dependency on com.github.bumptech.glide:compiler in your application and a @GlideModule annotated AppGlideModule implementation or LibraryGlideModules will be silently ignored
I/System.out(32456): [okhttp]:check permission begin!
I/System.out(32456): [okhttp]:not MMS!
I/System.out(32456): [okhttp]:not Email!
I/System.out(32456): [socket]:check permission begin!
E/ion     (32456): ioctl c0044901 failed with code -1: Invalid argument
I/.example.musiv(32456): ProcessProfilingInfo new_methods=4444 is saved saved_to_disk=1 resolve_classes_delay=8000
I/System.out(32456): [OkHttp] sendRequest>>
I/System.out(32456): [OkHttp] sendRequest<<
E/ion     (32456): ioctl c0044901 failed with code -1: Invalid argument
E/libc    (32456): Access denied finding property "vendor.debug.drm.logv"
E/libc    (32456): Access denied finding property "vendor.debug.drm.logv"
E/libc    (32456): Access denied finding property "vendor.debug.drm.logd"
E/libc    (32456): Access denied finding property "vendor.debug.drm.logv"
D/skia    (32456): SkJpegCodec::onGetPixels +
D/skia    (32456): SkJpegCodec::onGetPixels -
Syncing files to device M2103K19I...                                4.2s

Flutter run key commands.
r Hot reload.
R Hot restart.
h List all available interactive commands.
d Detach (terminate "flutter run" but leave application running).
c Clear the screen
q Quit (terminate the application on the device).

 Running with sound null safety

An Observatory debugger and profiler on M2103K19I is available at:
http://127.0.0.1:12561/B48aJOZV5GA=/
The Flutter DevTools debugger and profiler on M2103K19I is available at:
http://127.0.0.1:9102?uri=http://127.0.0.1:12561/B48aJOZV5GA=/
V/PhoneWindow(32456): DecorView setVisiblity: visibility = 4, Parent = android.view.ViewRootImpl@74fa58d, this = DecorView@968a342[MainActivity]
V/PhoneWindow(32456): DecorView setVisiblity: visibility = 0, Parent = android.view.ViewRootImpl@74fa58d, this = DecorView@968a342[MainActivity]
V/PhoneWindow(32456): DecorView setVisiblity: visibility = 0, Parent = android.view.ViewRootImpl@74fa58d, this = DecorView@968a342[MainActivity]
D/SurfaceView(32456): UPDATE Surface(name=SurfaceView - com.example.musive/com.example.musive.MainActivity)/@0xff92a7e, mIsProjectionMode = false
D/MIUIInput(32456): [KeyEvent] ViewRootImpl KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_BACK, scanCode=0, metaState=0, flags=0x8, repeatCount=0, eventTime=58032097, downTime=58032097, deviceId=-1, source=0x101, displayId=0 }
D/MIUIInput(32456): [KeyEvent] ViewRootImpl KeyEvent { action=ACTION_UP, keyCode=KEYCODE_BACK, scanCode=0, metaState=0, flags=0x8, repeatCount=0, eventTime=58032097, downTime=58032097, deviceId=-1, source=0x101, displayId=0 }
W/InputEventReceiver(32456): App Input: Dispatching InputEvent took 315ms in main thread! (MotionEvent: event_seq=99, seq=1285908, action=ACTION_DOWN)
Lost connection to device.

my current playing page file.


class CurrentPlayer extends StatefulWidget {
  final MainController con;
  const CurrentPlayer({
    Key? key,
    required this.con,
  }) : super(key: key);

  @override
  State<CurrentPlayer> createState() => _CurrentPlayerState();
}

class _CurrentPlayerState extends State<CurrentPlayer> {
  @override
  Widget build(BuildContext context) {
    return SizedBox(
      height: MediaQuery.of(context).size.height,
      width: MediaQuery.of(context).size.width,
      child: StreamBuilder(
        stream: widget.con.player.current,
        builder: (context, AsyncSnapshot<Playing?> snapshot) {
          if (snapshot.hasData) {
            final myAudio = widget.con
                .find(widget.con.audios, snapshot.data!.audio.assetAudioPath);

            return Stack(
              children: [
                CachedNetworkImage(
                  imageUrl: myAudio.metas.image!.path,
                  width: MediaQuery.of(context).size.width,
                  height: MediaQuery.of(context).size.height,
                  progressIndicatorBuilder: (context, url, l) =>
                      const LoadingImage(),
                  fit: BoxFit.cover,
                  alignment: Alignment.center,
                ),
                ClipRect(
                  child: BackdropFilter(
                    filter: ImageFilter.blur(sigmaX: 300, sigmaY: 300),
                    child: Container(
                      decoration: const BoxDecoration(
                        color: Colors.black87,
                        gradient: LinearGradient(
                          begin: Alignment.bottomCenter,
                          end: Alignment.topCenter,
                          colors: [Colors.black, Colors.black, Colors.black45],
                        ),
                      ),
                      child: Column(
                        mainAxisAlignment: MainAxisAlignment.spaceBetween,
                        crossAxisAlignment: CrossAxisAlignment.start,
                        children: [
                          Column(
                            children: [
                              const SizedBox(
                                height: 30,
                              ),
                              SafeArea(
                                child: Padding(
                                  padding: const EdgeInsets.symmetric(
                                      vertical: 8.0, horizontal: 12),
                                  child: Row(
                                    children: [
                                      IconButton(
                                        onPressed: () => Navigator.pop(context),
                                        icon: const Icon(
                                          Icons.arrow_back_ios,
                                          color: Colors.white,
                                        ),
                                      ),
                                      Expanded(
                                        child: Center(
                                          child: Column(
                                            children: [
                                              const Text(
                                                "NOW PLAYING",
                                                style: TextStyle(
                                                  color: Colors.white,
                                                  fontSize: 14,
                                                ),
                                              ),
                                              const SizedBox(
                                                height: 4,
                                              ),
                                              Text(
                                                myAudio.metas.artist!,
                                                style: const TextStyle(
                                                  color: Colors.grey,
                                                  fontSize: 14,
                                                ),
                                              ),
                                            ],
                                          ),
                                        ),
                                      ),
                                      IconButton(
                                        onPressed: () {
                                          showModalBottomSheet(
                                              useRootNavigator: true,
                                              isScrollControlled: true,
                                              elevation: 100,
                                              backgroundColor: Colors.black38,
                                              context: context,
                                              builder: (context) {
                                                return BottomSheetWidget(
                                                    con: widget.con,
                                                    isNext: true,
                                                    song: SongModel(
                                                      songid: myAudio.metas.id,
                                                      songname:
                                                          myAudio.metas.title,
                                                      userid:
                                                          myAudio.metas.album,
                                                      trackid: myAudio.path,
                                                      duration: '',
                                                      coverImageUrl: myAudio
                                                          .metas.image!.path,
                                                      name:
                                                          myAudio.metas.artist,
                                                    ));
                                              });
                                        },
                                        icon: const Icon(
                                          Icons.more_vert,
                                          color: Colors.white,
                                        ),
                                      ),
                                    ],
                                  ),
                                ),
                              ),
                            ],
                          ),
                          Padding(
                            padding:
                                const EdgeInsets.symmetric(horizontal: 26.0),
                            child: AspectRatio(
                              aspectRatio: 1,
                              child: ClipRRect(
                                borderRadius: BorderRadius.circular(3),
                                child: CachedNetworkImage(
                                  imageUrl: myAudio.metas.image!.path,
                                  progressIndicatorBuilder: (context, url, l) =>
                                      const LoadingImage(
                                    icon: Icon(
                                      LineIcons.compactDisc,
                                      size: 120,
                                    ),
                                  ),
                                  fit: BoxFit.cover,
                                ),
                              ),
                            ),
                          ),
                          Column(
                            crossAxisAlignment: CrossAxisAlignment.start,
                            children: [
                              const SizedBox(height: 20),
                              Row(
                                children: [
                                  Expanded(
                                    child: Column(
                                      crossAxisAlignment:
                                          CrossAxisAlignment.start,
                                      children: [
                                        Padding(
                                          padding: const EdgeInsets.symmetric(
                                              horizontal: 24.0),
                                          child: Text(
                                            myAudio.metas.title!,
                                            maxLines: 1,
                                            style: Theme.of(context)
                                                .textTheme
                                                .headline4,
                                          ),
                                        ),
                                        const SizedBox(height: 5),
                                        Padding(
                                          padding: const EdgeInsets.symmetric(
                                              horizontal: 24.0),
                                          child: Text(
                                            myAudio.metas.artist!,
                                            style: Theme.of(context)
                                                .textTheme
                                                .bodyText1!
                                                .copyWith(color: Colors.grey),
                                          ),
                                        ),
                                      ],
                                    ),
                                  ),
                                  LikeButton(
                                    name: myAudio.metas.title!,
                                    fullname: myAudio.metas.artist!,
                                    username: myAudio.metas.album!,
                                    id: myAudio.metas.id!,
                                    track: myAudio.path,
                                    isIcon: false,
                                    cover: myAudio.metas.image!.path,
                                  ),
                                  const SizedBox(width: 24)
                                ],
                              ),
                              Column(children: <Widget>[
                                widget.con.player.builderRealtimePlayingInfos(
                                    builder:
                                        (context, RealtimePlayingInfos? infos) {
                                  if (infos == null) {
                                    return PositionSeekWidget(
                                      currentPosition:
                                          const Duration(seconds: 0),
                                      duration: const Duration(
                                          minutes: 3, seconds: 23),
                                      seekTo: (to) {},
                                    );
                                  }
                                  return PositionSeekWidget(
                                    currentPosition: infos.currentPosition,
                                    duration: infos.duration,
                                    seekTo: (to) {
                                      widget.con.player.seek(to);
                                    },
                                  );
                                }),
                                widget.con.player.builderLoopMode(
                                  builder: (context, loopMode) {
                                    return PlayerBuilder.isPlaying(
                                        player: widget.con.player,
                                        builder: (context, isPlaying) {
                                          return PlayingControls(
                                            loopMode: loopMode,
                                            isPlaying: isPlaying,
                                            con: widget.con,
                                            isPlaylist: true,
                                            onStop: () {
                                              widget.con.player.stop();
                                            },
                                            toggleLoop: () {
                                              widget.con.player.toggleLoop();
                                            },
                                            onPlay: () {
                                              widget.con.player.playOrPause();
                                            },
                                            onNext: () {
                                              widget.con.player.next();
                                            },
                                            onPrevious: () {
                                              widget.con.player.previous();
                                            },
                                          );
                                        });
                                  },
                                ),
                                const SizedBox(height: 20),
                                Padding(
                                  padding: const EdgeInsets.symmetric(
                                      horizontal: 26.0),
                                  child: Row(
                                    mainAxisAlignment:
                                        MainAxisAlignment.spaceBetween,
                                    children: [
                                      InkWell(
                                        onTap: () {
                                          launch(myAudio.path);
                                        },
                                        child: const Icon(
                                          Icons.download_sharp,
                                          color: Colors.grey,
                                          size: 18,
                                        ),
                                      ),
                                      InkWell(
                                        onTap: () {
                                          Navigator.push(
                                            context,
                                            CupertinoPageRoute(
                                              builder: (context) =>
                                                  PlayListWidget(
                                                audios: widget.con.player
                                                    .playlist!.audios,
                                                con: widget.con,
                                              ),
                                            ),
                                          );
                                        },
                                        child: const Icon(
                                          CupertinoIcons.music_note_list,
                                          color: Colors.grey,
                                          size: 18,
                                        ),
                                      ),
                                    ],
                                  ),
                                ),
                                const SizedBox(height: 30),
                              ]),
                            ],
                          ),
                          const SizedBox(height: 5),
                        ],
                      ),
                    ),
                  ),
                ),
              ],
            );
          } else if (snapshot.hasError) {
            return const Text("");
          } else if (!snapshot.hasData) {
            return const Center(child: CircularProgressIndicator());
          }
          return Container();
        },
      ),
    );
  }
}

i think multiple streams causes app crash or maybe I find some logs that I have not found when tested on my redmi note 5 (android 8 )phone

/libc (32456): Access denied finding property "ro.vendor.df.effect.conflict" E/libc (32456): Access denied finding property "ro.vendor.knock.type" I/TetheringManager(32456): registerTetheringEventCallback:com.example.musive D/CompatibilityChangeReporter(32456): Compat change id reported: 147600208; UID 10277; state: ENABLED I/System.out(32456): [okhttp]:check permission begin! I/System.out(32456): [okhttp]:not MMS! I/System.out(32456): [okhttp]:not Email! I/System.out(32456): [socket]:check permission begin! I/System.out(32456): [OkHttp] sendRequest>> I/System.out(32456): [OkHttp] sendRequest<<```

I/System.out(32456): [OkHttp] sendRequest>>
I/System.out(32456): [OkHttp] sendRequest<<
E/ion     (32456): ioctl c0044901 failed with code -1: Invalid argument
E/libc    (32456): Access denied finding property "vendor.debug.drm.logv"
E/libc    (32456): Access denied finding property "vendor.debug.drm.logv"
E/libc    (32456): Access denied finding property "vendor.debug.drm.logd"
E/libc    (32456): Access denied finding property "vendor.debug.drm.logv"
D/skia    (32456): SkJpegCodec::onGetPixels +
D/skia    (32456): SkJpegCodec::onGetPixels -

please help me with this issue.

https://user-images.githubusercontent.com/67627096/151692393-707b2b60-2a6a-4b36-a1ee-cd8b2bdd9f10.mp4

kalismeras61 commented 2 years ago

Please use latest version it is available. Version number : 3.0.4+1