doublesymmetry / react-native-track-player

A fully fledged audio module created for music apps. Provides audio playback, external media controls, background mode and more!
https://rntp.dev/
Apache License 2.0
3.31k stars 1.02k forks source link

Notification disappears on Android for HLS tracks #2356

Open watadarkstar opened 3 months ago

watadarkstar commented 3 months ago

Describe the Bug When I play something the media notification will show up but then it quickly gets removed.

Steps To Reproduce Play audio/video with the following code And make sure to add an HLS track

Code To Reproduce

await TrackPlayer.setupPlayer({
        // Important:  CarPlay works with IOSCategory.Playback.
        iosCategory: IOSCategory.Playback,
        // We must set this to the empty array, otherwise the player will
        // only play audio in airplane mode. AND it breaks lock screen controls if its not
        // the empty array.
        // https://react-native-track-player.js.org/docs/api/constants/ios-category-options#allowairplay
        iosCategoryOptions: [],
        // We must set this to SpokenAudio for lock screen controls to work with
        // IOSCategory.Playback.
        iosCategoryMode: IOSCategoryMode.SpokenAudio,
      })
      // We mute the track player because the video player will be the one
      // playing the audio. This is to prevent the audio from playing twice.
      await TrackPlayer.setVolume(0)
...
await TrackPlayer.updateOptions({
        android: {
          appKilledPlaybackBehavior:
            AppKilledPlaybackBehavior.StopPlaybackAndRemoveNotification,
        },
        // stoppingAppPausesPlayback is deprecated but we still use it just in
        // case it's needed.
        stoppingAppPausesPlayback: true,
        capabilities: [
          Capability.Play,
          Capability.Stop,
          Capability.Pause,
          Capability.JumpBackward,
          Capability.JumpForward,
          Capability.SeekTo,
        ],
        compactCapabilities: [
          Capability.Play,
          Capability.Pause,
          Capability.JumpForward,
          Capability.JumpBackward,
          Capability.SeekTo,
          Capability.Stop,
        ],
        progressUpdateEventInterval: 1,
      })

Replicable on Example App? Can you replicate this bug in the React Native Track Player Example App?

Environment Info:

info Fetching system and libraries information...
System:
  OS: macOS 14.4
  CPU: (8) arm64 Apple M1
  Memory: 100.73 MB / 16.00 GB
  Shell:
    version: 3.2.2
    path: /usr/local/bin/fish
Binaries:
  Node:
    version: 18.16.0
    path: ~/.nvm/versions/node/v18.16.0/bin/node
  Yarn:
    version: 1.22.22
    path: ~/.nvm/versions/node/v18.16.0/bin/yarn
  npm:
    version: 9.5.1
    path: ~/.nvm/versions/node/v18.16.0/bin/npm
  Watchman:
    version: 2024.03.18.00
    path: /opt/homebrew/bin/watchman
Managers:
  CocoaPods:
    version: 1.12.1
    path: /usr/local/bin/pod
SDKs:
  iOS SDK:
    Platforms:
      - DriverKit 23.4
      - iOS 17.4
      - macOS 14.4
      - tvOS 17.4
      - visionOS 1.1
      - watchOS 10.4
  Android SDK:
    API Levels:
      - "29"
      - "30"
      - "33"
      - "34"
    Build Tools:
      - 29.0.2
      - 30.0.3
      - 33.0.0
      - 33.0.1
      - 34.0.0
    System Images:
      - android-29 | Intel x86 Atom
      - android-29 | Intel x86 Atom_64
      - android-30 | Google APIs Intel x86 Atom
      - android-34 | Google APIs ARM 64 v8a
      - android-34 | Google Play ARM 64 v8a
    Android NDK: Not Found
IDEs:
  Android Studio: 2023.1 AI-231.9392.1.2311.11076708
  Xcode:
    version: 15.3/15E204a
    path: /usr/bin/xcodebuild
Languages:
  Java:
    version: 17.0.10
    path: /usr/bin/javac
  Ruby:
    version: 2.6.10
    path: /usr/bin/ruby
npmPackages:
  "@react-native-community/cli": Not Found
  react:
    installed: 18.2.0
    wanted: 18.2.0
  react-native:
    installed: 0.72.10
    wanted: 0.72.10
  react-native-macos: Not Found
npmGlobalPackages:
  "*react-native*": Not Found
Android:
  hermesEnabled: true
  newArchEnabled: false
iOS:
  hermesEnabled: true
  newArchEnabled: false

I tried both 4.1.1 and 4.0.1

    "react-native-track-player": "4.1.1",

Real device? Android Samsung Tab S6 Lite

What OS are you running? Android 14

How I can Help

Android adb logs:

08-19 14:09:10.012  5019  5019 I NotificationManager: com.subsplash.thechurchapp.ligonier: notify(1, null, Notification(channel=kotlin_audio_player shortcut=null contentView=null vibrate=null sound=null defaults=0x0 flags=0xa color=0x00000000 category=transport actions=1 vis=PUBLIC semFlags=0x0 semPriority=0 semMissedCount=0)) as user
08-19 14:09:10.036  4899  4899 I HoneySpace.NotificationListener: onNotificationPosted com.subsplash.thechurchapp.ligonier: 0|com.subsplash.thechurchapp.ligonier|1|null|10359: 0
08-19 14:09:10.036  4899  4899 I HoneySpace.NotificationListener: invalid notification: com.subsplash.thechurchapp.ligonier UserHandle{0}: canShowBadge is false
08-19 14:09:10.092  4647  4647 D FaceWidgetNotificationControllerWrapper: onMediaDataLoaded, 0|com.subsplash.thechurchapp.ligonier|1|null|10359, 0|com.subsplash.thechurchapp.ligonier|1|null|10359,  [ USERID : 0 ] [ INITIALIZED : true ] [ APP : Ligonier ] [ ARTIST : R.C. Sproul ] [ SONG : The Importance of Holiness ] [ ACTIONS : Connecting,  ] [ ACTIONSTOSHOWINCOMPACT : [0] ] [ PACKAGENAME : com.subsplash.thechurchapp.ligonier ] [ DEVICE : This tablet ] [ SECMEDIADEVICEDATA : 1 ] [ ACTIVE : true ] [ PLAYBACKLOCATION : 0 ] [ RESUMPTION : false ] [ NOTIFICATIONKEY : 0|com.subsplash.thechurchapp.ligonier|1|null|10359 ] [ HASCHECKFORRESUME : false ] [ ISPLAYING : false ] [ ISCLEARABLE : false ] [ LASTACTIVE : 1970-01-04 07:13:46.778 ] [ INSTANCEID : 441650 ] [ APPUID : 10359 ] [ CUSTOMMEDIADATA : -1 ]
08-19 14:09:10.094  4647  4647 I AODNotificationManager: updateNotification()
08-19 14:09:10.115  4899  4899 I HoneySpace.NotificationListener: onNotificationPosted com.subsplash.thechurchapp.ligonier: 0|com.subsplash.thechurchapp.ligonier|1|null|10359: 0
08-19 14:09:10.115  4899  4899 I HoneySpace.NotificationListener: invalid notification: com.subsplash.thechurchapp.ligonier UserHandle{0}: canShowBadge is false
08-19 14:09:10.183  4647  4647 I AODNotificationManager: updateNotification()
08-19 14:09:10.184  5019  5019 I NotificationManager: com.subsplash.thechurchapp.ligonier: notify(1, null, Notification(channel=kotlin_audio_player shortcut=null contentView=null vibrate=null sound=null defaults=0x0 flags=0x8 color=0x00000000 category=transport actions=1 vis=PUBLIC semFlags=0x0 semPriority=0 semMissedCount=0)) as user
08-19 14:09:10.245  5019  5019 I NotificationManager: com.subsplash.thechurchapp.ligonier: notify(1, null, Notification(channel=kotlin_audio_player shortcut=null contentView=null vibrate=null sound=null defaults=0x0 flags=0x8 color=0x00000000 category=transport actions=1 vis=PUBLIC semFlags=0x0 semPriority=0 semMissedCount=0)) as user
08-19 14:09:10.324  1792  1792 W Looper  : Slow dispatch took 128ms main h=com.android.server.notification.NotificationManagerService$WorkerHandler c=com.android.server.notification.NotificationManagerService$PostNotificationRunnable@d433d7c m=0
08-19 14:09:10.332  4899  4899 I HoneySpace.NotificationListener: onNotificationPosted com.subsplash.thechurchapp.ligonier: 0|com.subsplash.thechurchapp.ligonier|1|null|10359: 0
08-19 14:09:10.332  4899  4899 I HoneySpace.NotificationListener: invalid notification: com.subsplash.thechurchapp.ligonier UserHandle{0}: canShowBadge is false
08-19 14:09:10.368  4899  4899 I HoneySpace.NotificationListener: onNotificationPosted com.subsplash.thechurchapp.ligonier: 0|com.subsplash.thechurchapp.ligonier|1|null|10359: 0
08-19 14:09:10.368  4899  4899 I HoneySpace.NotificationListener: invalid notification: com.subsplash.thechurchapp.ligonier UserHandle{0}: canShowBadge is false
08-19 14:09:10.376  4647  4647 D FaceWidgetNotificationControllerWrapper: onMediaDataLoaded, 0|com.subsplash.thechurchapp.ligonier|1|null|10359, 0|com.subsplash.thechurchapp.ligonier|1|null|10359,  [ USERID : 0 ] [ INITIALIZED : true ] [ APP : Ligonier ] [ ARTIST : R.C. Sproul ] [ SONG : The Importance of Holiness ] [ ACTIONS : Play,  ] [ ACTIONSTOSHOWINCOMPACT : [0] ] [ PACKAGENAME : com.subsplash.thechurchapp.ligonier ] [ DEVICE : This tablet ] [ SECMEDIADEVICEDATA : 1 ] [ ACTIVE : true ] [ PLAYBACKLOCATION : 0 ] [ RESUMPTION : false ] [ NOTIFICATIONKEY : 0|com.subsplash.thechurchapp.ligonier|1|null|10359 ] [ HASCHECKFORRESUME : false ] [ ISPLAYING : false ] [ ISCLEARABLE : false ] [ LASTACTIVE : 1970-01-04 07:13:47.058 ] [ INSTANCEID : 441650 ] [ APPUID : 10359 ] [ CUSTOMMEDIADATA : -1 ]
08-19 14:09:10.430  4647  4647 I AODNotificationManager: updateNotification()
08-19 14:09:10.450  4647  4647 D FaceWidgetNotificationControllerWrapper: onMediaDataLoaded, 0|com.subsplash.thechurchapp.ligonier|1|null|10359, 0|com.subsplash.thechurchapp.ligonier|1|null|10359,  [ USERID : 0 ] [ INITIALIZED : true ] [ APP : Ligonier ] [ ARTIST : R.C. Sproul ] [ SONG : The Importance of Holiness ] [ ACTIONS : Play,  ] [ ACTIONSTOSHOWINCOMPACT : [0] ] [ PACKAGENAME : com.subsplash.thechurchapp.ligonier ] [ DEVICE : This tablet ] [ SECMEDIADEVICEDATA : 1 ] [ ACTIVE : true ] [ PLAYBACKLOCATION : 0 ] [ RESUMPTION : false ] [ NOTIFICATIONKEY : 0|com.subsplash.thechurchapp.ligonier|1|null|10359 ] [ HASCHECKFORRESUME : false ] [ ISPLAYING : false ] [ ISCLEARABLE : true ] [ LASTACTIVE : 1970-01-04 07:13:47.166 ] [ INSTANCEID : 441650 ] [ APPUID : 10359 ] [ CUSTOMMEDIADATA : -1 ]
08-19 14:09:10.465  4647  4647 D FaceWidgetNotificationControllerWrapper: onMediaDataLoaded, 0|com.subsplash.thechurchapp.ligonier|1|null|10359, 0|com.subsplash.thechurchapp.ligonier|1|null|10359,  [ USERID : 0 ] [ INITIALIZED : true ] [ APP : Ligonier ] [ ARTIST : R.C. Sproul ] [ SONG : The Importance of Holiness ] [ ACTIONS : Play,  ] [ ACTIONSTOSHOWINCOMPACT : [0] ] [ PACKAGENAME : com.subsplash.thechurchapp.ligonier ] [ DEVICE : This tablet ] [ SECMEDIADEVICEDATA : 1 ] [ ACTIVE : true ] [ PLAYBACKLOCATION : 0 ] [ RESUMPTION : false ] [ NOTIFICATIONKEY : 0|com.subsplash.thechurchapp.ligonier|1|null|10359 ] [ HASCHECKFORRESUME : false ] [ ISPLAYING : false ] [ ISCLEARABLE : true ] [ LASTACTIVE : 1970-01-04 07:13:47.169 ] [ INSTANCEID : 441650 ] [ APPUID : 10359 ] [ CUSTOMMEDIADATA : -1 ]
08-19 14:09:13.054  5019  5019 D MusicService$setupForegrounding: Notification has been stopped
08-19 14:09:13.055  1792  1792 D EdgeLightingManager: hideForNotification : packageName = com.subsplash.thechurchapp.ligonier
08-19 14:09:13.056  1792  1792 D EdgeLightingPolicyManager:NotificationGroup: remove : sbn : StatusBarNotification(pkg=com.subsplash.thechurchapp.ligonier user=UserHandle{0} id=1 tag=null key=0|com.subsplash.thechurchapp.ligonier|1|null|10359: Notification(channel=kotlin_audio_player shortcut=null contentView=null vibrate=null sound=null defaults=0x0 flags=0x68 color=0x00000000 category=transport actions=1 vis=PUBLIC semFlags=0x0 semPriority=0 semMissedCount=0))
08-19 14:09:13.056  1792  1792 D EdgeLightingPolicyManager.NotificationGroup: group notification count : 0
08-19 14:09:13.056  1792  1792 D EdgeLightingManager: hideForNotification : isOngoing is false
08-19 14:09:13.058  1792  1792 D NotificationService: CancelNotificationRunnable end r = 0|com.subsplash.thechurchapp.ligonier|1|null|10359, reason = 8
08-19 14:09:13.060  1792  1792 D NotificationReminder: removeFromNotificationList record com.subsplash.thechurchapp.ligonier
08-19 14:09:13.065  4899  4899 I HoneySpace.NotificationListener: onNotificationRemoved com.subsplash.thechurchapp.ligonier: 0|com.subsplash.thechurchapp.ligonier|1|null|10359: 0
08-19 14:09:13.075  4647  4647 D FaceWidgetNotificationControllerWrapper: onMediaDataRemoved, 0|com.subsplash.thechurchapp.ligonier|1|null|10359
08-19 14:09:13.100  4647  4647 D FaceWidgetNotificationManager: updateFaceWidgetMusicNotificationPkg() pkgName = null
08-19 14:09:13.100  4647  4647 D FaceWidgetNotificationManager: updateFaceWidgetMusicNotificationKey() return : mFaceWidgetMusicNotificationKey is empty
08-19 14:09:13.102  4647  4647 I AODNotificationManager: updateNotification()
08-19 14:09:13.261  5019  5019 D MusicService$setupForegrounding: Notification has been stopped
08-19 14:09:13.361  5019  5019 D MusicService$setupForegrounding: Notification has been stopped
yemreeke commented 1 month ago

same issue MusicService$setupForegrounding: Notification has been stopped

Jojocaster commented 2 weeks ago

Same issue here - the notification no longer shows on Android on v4.1.

EDIT: I did find a solution to my problem - for more context, I recently upgraded RNTP from v2.1 to v4.1.1. After upgrading it, I lost notifications / media controls on Android.

Here's why: I forgot to wait for the setupPlayer promise to resolve. It seems that it wasn't an issue with v2.1, but v4.1.1 just won't have it. So make sure to await TrackPlayer.setupPlayer() before you call any other function.

Hopefully this can help someone else in the future.