Git Product home page Git Product logo

capacitor-plugin-playlist's People

Contributors

asika32764 avatar dasantonym avatar emilsaj avatar ghenry22 avatar kashz avatar markusfassbender avatar phiamo avatar robbiethewagner avatar ronildo avatar thoasty-dev avatar timstoute avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

capacitor-plugin-playlist's Issues

Example AudioProvider class has build issues

  • L8: AudioTrackOptions no exported member
  • L12: Cannot find module environment (not a biggie, I just commented out and set L40 to true).
  • L53, 55, 65 - viewedUntil does not exist on AudioTrack

To get round this, I have set the relevant method signatures to take either audioTrack: any or currentItem?: any

isAtEnd, isAtBeginning, hasPrevious, hasNext are incorrectly reported in rmxstatus_TRACK_CHANGED for first track

in iOS, for first track of playlist, isAtEnd, isAtBeginning, hasPrevious, and hasNext are incorrectly reported in rmxstatus_TRACK_CHANGED

When player is starting a new playlist, having just "setPlaylistItems", I'm seeing each of these have the opposite of what I expected.

What I expected:

  • isAtEnd: false,
  • isAtBeginning: true,
  • hasPrevious: false,
  • hasNext: true

What I'm observing:

  • isAtEnd: true,
  • isAtBeginning: false,
  • hasPrevious: true,
  • hasNext: false

These values need to be initialised appropriately, but so far I'm unsure of where this would be done, perhaps in func setPlaylistItems

Only plays a limited count of items

Hey there, I got the issue on iOS (emulator and real device) that only a limited count of items is played and then the player jumps back to start (first item). For example if I add 18 items, only 10 are played. This isnt consistent however, sometimes I add 5 items and only 3 are played. I couldnt find any pattern yet. Did anybody have a similar issue?

Best regards

Edit: This only happens when I call skipForward. If I "let it play through", it works as expected.

audio ads

Can anyone offer any insight into how I can incorporate support for audio ads into this plugin? I'd like the ability to inject an audio advert into the player queue every x tracks.

Perhaps something like Google's Interactive Media Ads SDK would work, but the Swift side of things is out of my comfort zone.

ios playback issue msgType == 35

You have mentioned that there is a workaround if the msgType 35 is triggered on iOS while playing the audio file.

Could you elaborate on the type of work around we need to do to resolve this issue?

Capacitor 4.0.0 crashing issue

@phiamo hi!
I know it's a little bit early, but current version crashing with new Capacitor 4.0.0 (currently in beta version) on Android 12 (minSdk 31).

Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent.

The source of crash is PendingIntent inside com.devbrackets.android:playlistcore:2.0.1

To fix crashing you need to upgrage at least two properies inside build.gradle:

  1. Kotlin version
    ext.kotlin_version = '1.6.0'

  2. PlaylistCore version
    implementation 'com.devbrackets.android:playlistcore:2.1.0'

I've already tested at my project - works fine

iOS: Playback of audio on other apps stop when I enter my app that has this plugin installed

Hi,

I tried this plugin in my Ionic app on iOS, and I noticed that when I have something else playing in another app (for example YouTube Music) and I enter my app with the playlist plugin installed (before even using the plugin in any way or playing any audio), playback of the audio in the other app stops automatically...

Has anyone else noticed something like this or am I perhaps missing something?

Thanks!

[feature] getPlaylist Option

Is there a way to get the current playlist? We can get the current item and current position but there doesn't seem to be a way to get the full playlist.

Bug in IOS playing last song

If you create a playlists and try play the last track, either via ID or index, the first track plays. Problem code is in the AVBidirectionalQueuePlayer.swift file, line 187, just comment it out.

// OVERRIDDEN AVQUEUEPLAYER METHODS
override func play() {
    if isAtEnd {
        // we could add a flag here to indicate looping
        setCurrentIndex(0)
    }

    super.play()
}

[feature] Add Item at Index

Is there any way currently to add an item to the playlist at a specific index?

For example I have a play next function in my app where the user can add an item as the next item after the current item in the playlist without disrupting playback.

Pull requests question

Hi!
I made a few pull requests that have not been accepted; please let me know if there is anything I've done wrong, and I'll gladly correct it! :-)

java.lang.RuntimeException: Unable to start service org.dwbn.plugins.playlist.service.MediaService

Hello. First of all; very excited to find this plugin, as it is essential for us, and we hope to get it working! Thanks a lot for your work!

I've tried to follow the documentation and so far tried to make it work on Android.
Unfortunately, I've bumped into the following error, which causes the app to crash as soon as I try to play Audio. Is it something you have seen before? I'm a bit new to these 'kind' of plugins, so I might have missed something obvious.

image

iOS, playing local files how can we set content type

I'm trying to play a local file resource, with a uri like:

file:///var/mobile/Containers/Data/Application/C52537C1-6DDE-438B-AFC4-243C526143D0/Documents/a65c53f77de85cce59b536502b5c3b99

I'm getting error:

RmxAudioPlayer.onStatus: Error(5) [a65c53f77de85cce59b536502b5c3b99]: {"code":3,"message":"Error playing audio track: This media format is not supported."}

I suspect that this is because the Content Type is incorrect or not specified. My local file is an audio/mpeg content type.

How can I set this in the plugin or successfully play this local file?

Is there any way to hide the skip forward/back buttons from the audio control notification?

Right now, even when there are no more items in the queue, the buttons are disabled, but when pressed they still stop the audio and send an RMXSTATUS_COMPLETED event. I also have some situations where I want the buttons disabled, even though I have something in the queue. Is that possible? :-)

Side not: I expected the RMXSTATUS_COMPLETED event to only be emitted when the current track has been listened to the end (right now it's also when skip is used), as I want the app to behave differently in this case. But that might just be me misinterpreting 'The reported track has completed playback.'

Tested on Android - Huawei P30 Pro

info about current track and position

is there a way to get info about current playing track and position? i tried different things like audioPlayer.currentTrack, but it give me null even if a track is playing.

Request to upgrade to Capacitor 5 version.

Playstore required sdk 33 version, so build to that plug-in is no longer possible.

When adding npm capacitor-plugin-playlist@latest, the build is not possible due to peer dependency.

I beg you.

PlaylistPlugin.kt - Play() method - playListHandler is null, therefore play does nothing on Android

@rwwagner90 @dermaaarkus @phiamo

Is anyone maintaining this plugin? Can someone please respond? Thanks.

Q) How can I make it so that the playlistHandler is not null?

In PlaylistPlugin.kt, I've verified with the extra debugging below that playListHandler is null.

  • I call play() and I see "Here 1", but
  • I never see "Here 2" in the log at all.
  • I see "play" in the log, since it's not inside that if check.
    @PluginMethod
    fun play(call: PluginCall) {
      Log.i("DAVE:", "Here 1")

        if (audioPlayerImpl!!.playlistManager.playlistHandler != null) {

          Log.i("DAVE:", "Here 2")
          //....
        }
      Log.i(TAG,"play")
    }

[chore] Update Exomedia to 5.0.0 and playlistCore to latest

Exomedia 5.0.0 removes the requirement for legacy android support libraries and updates deps.

PlaylistCore latest removes the same and adds some features like Android Media Controls position scrubber. If there is no new release for PlaylistCore then publish a fork so it can be updated and included.

Can then update the plugin to remove jetifier for android builds.

Will need to test all functions for any breaking changes.

App crashes when seeking (Android)

I got the problem that on some tracks the app crashes or does not seek, when I seek late in the track.

03-23 09:00:16.354  5123  5213 E Capacitor: Serious error executing plugin
03-23 09:00:16.354  5123  5213 E Capacitor: java.lang.reflect.InvocationTargetException
03-23 09:00:16.354  5123  5213 E Capacitor: 	at java.lang.reflect.Method.invoke(Native Method)
03-23 09:00:16.354  5123  5213 E Capacitor: 	at com.getcapacitor.PluginHandle.invoke(PluginHandle.java:121)
03-23 09:00:16.354  5123  5213 E Capacitor: 	at com.getcapacitor.Bridge.lambda$callPluginMethod$0$Bridge(Bridge.java:592)
03-23 09:00:16.354  5123  5213 E Capacitor: 	at com.getcapacitor.-$$Lambda$Bridge$25SFHybyAQk7zS27hTVXh2p8tmw.run(Unknown Source:8)
03-23 09:00:16.354  5123  5213 E Capacitor: 	at android.os.Handler.handleCallback(Handler.java:938)
03-23 09:00:16.354  5123  5213 E Capacitor: 	at android.os.Handler.dispatchMessage(Handler.java:99)
03-23 09:00:16.354  5123  5213 E Capacitor: 	at android.os.Looper.loop(Looper.java:236)
03-23 09:00:16.354  5123  5213 E Capacitor: 	at android.os.HandlerThread.run(HandlerThread.java:67)
03-23 09:00:16.354  5123  5213 E Capacitor: Caused by: java.lang.IllegalArgumentException: Invalid notification (no valid small icon): Notification(channel=PlaylistCoreMediaNotificationChannel shortcut=null contentView=null vibrate=null sound=null defaults=0x0 flags=0x10 color=0x00000000 category=transport actions=3 vis=PUBLIC)
03-23 09:00:16.354  5123  5213 E Capacitor: 	at android.app.NotificationManager.fixNotification(NotificationManager.java:606)
03-23 09:00:16.354  5123  5213 E Capacitor: 	at android.app.NotificationManager.notifyAsUser(NotificationManager.java:585)
03-23 09:00:16.354  5123  5213 E Capacitor: 	at android.app.NotificationManager.notify(NotificationManager.java:534)
03-23 09:00:16.354  5123  5213 E Capacitor: 	at android.app.NotificationManager.notify(NotificationManager.java:510)
03-23 09:00:16.354  5123  5213 E Capacitor: 	at com.devbrackets.android.playlistcore.components.playlisthandler.DefaultPlaylistHandler.updateMediaControls(DefaultPlaylistHandler.kt:313)
03-23 09:00:16.354  5123  5213 E Capacitor: 	at com.devbrackets.android.playlistcore.components.playlisthandler.DefaultPlaylistHandler.setPlaybackState(DefaultPlaylistHandler.kt:522)
03-23 09:00:16.354  5123  5213 E Capacitor: 	at com.devbrackets.android.playlistcore.components.playlisthandler.DefaultPlaylistHandler.performSeek(DefaultPlaylistHandler.kt:273)
03-23 09:00:16.354  5123  5213 E Capacitor: 	at com.devbrackets.android.playlistcore.components.playlisthandler.DefaultPlaylistHandler.performSeek$default(DefaultPlaylistHandler.kt:268)
03-23 09:00:16.354  5123  5213 E Capacitor: 	at com.devbrackets.android.playlistcore.components.playlisthandler.DefaultPlaylistHandler.seek(DefaultPlaylistHandler.kt:196)
03-23 09:00:16.354  5123  5213 E Capacitor: 	at org.dwbn.plugins.playlist.PlaylistPlugin.seekTo(PlaylistPlugin.kt:280)
03-23 09:00:16.354  5123  5213 E Capacitor: 	... 8 more
03-23 09:00:16.358  5123  5213 E AndroidRuntime: FATAL EXCEPTION: CapacitorPlugins
03-23 09:00:16.358  5123  5213 E AndroidRuntime: Process: **.**.**, PID: 5123
03-23 09:00:16.358  5123  5213 E AndroidRuntime: java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
03-23 09:00:16.358  5123  5213 E AndroidRuntime: 	at com.getcapacitor.Bridge.lambda$callPluginMethod$0$Bridge(Bridge.java:601)
03-23 09:00:16.358  5123  5213 E AndroidRuntime: 	at com.getcapacitor.-$$Lambda$Bridge$25SFHybyAQk7zS27hTVXh2p8tmw.run(Unknown Source:8)
03-23 09:00:16.358  5123  5213 E AndroidRuntime: 	at android.os.Handler.handleCallback(Handler.java:938)
03-23 09:00:16.358  5123  5213 E AndroidRuntime: 	at android.os.Handler.dispatchMessage(Handler.java:99)
03-23 09:00:16.358  5123  5213 E AndroidRuntime: 	at android.os.Looper.loop(Looper.java:236)
03-23 09:00:16.358  5123  5213 E AndroidRuntime: 	at android.os.HandlerThread.run(HandlerThread.java:67)
03-23 09:00:16.358  5123  5213 E AndroidRuntime: Caused by: java.lang.reflect.InvocationTargetException
03-23 09:00:16.358  5123  5213 E AndroidRuntime: 	at java.lang.reflect.Method.invoke(Native Method)
03-23 09:00:16.358  5123  5213 E AndroidRuntime: 	at com.getcapacitor.PluginHandle.invoke(PluginHandle.java:121)
03-23 09:00:16.358  5123  5213 E AndroidRuntime: 	at com.getcapacitor.Bridge.lambda$callPluginMethod$0$Bridge(Bridge.java:592)
03-23 09:00:16.358  5123  5213 E AndroidRuntime: 	... 5 more
03-23 09:00:16.358  5123  5213 E AndroidRuntime: Caused by: java.lang.IllegalArgumentException: Invalid notification (no valid small icon): Notification(channel=PlaylistCoreMediaNotificationChannel shortcut=null contentView=null vibrate=null sound=null defaults=0x0 flags=0x10 color=0x00000000 category=transport actions=3 vis=PUBLIC)
03-23 09:00:16.358  5123  5213 E AndroidRuntime: 	at android.app.NotificationManager.fixNotification(NotificationManager.java:606)
03-23 09:00:16.358  5123  5213 E AndroidRuntime: 	at android.app.NotificationManager.notifyAsUser(NotificationManager.java:585)
03-23 09:00:16.358  5123  5213 E AndroidRuntime: 	at android.app.NotificationManager.notify(NotificationManager.java:534)
03-23 09:00:16.358  5123  5213 E AndroidRuntime: 	at android.app.NotificationManager.notify(NotificationManager.java:510)
03-23 09:00:16.358  5123  5213 E AndroidRuntime: 	at com.devbrackets.android.playlistcore.components.playlisthandler.DefaultPlaylistHandler.updateMediaControls(DefaultPlaylistHandler.kt:313)
03-23 09:00:16.358  5123  5213 E AndroidRuntime: 	at com.devbrackets.android.playlistcore.components.playlisthandler.DefaultPlaylistHandler.setPlaybackState(DefaultPlaylistHandler.kt:522)
03-23 09:00:16.358  5123  5213 E AndroidRuntime: 	at com.devbrackets.android.playlistcore.components.playlisthandler.DefaultPlaylistHandler.performSeek(DefaultPlaylistHandler.kt:273)
03-23 09:00:16.358  5123  5213 E AndroidRuntime: 	at com.devbrackets.android.playlistcore.components.playlisthandler.DefaultPlaylistHandler.performSeek$default(DefaultPlaylistHandler.kt:268)
03-23 09:00:16.358  5123  5213 E AndroidRuntime: 	at com.devbrackets.android.playlistcore.components.playlisthandler.DefaultPlaylistHandler.seek(DefaultPlaylistHandler.kt:196)
03-23 09:00:16.358  5123  5213 E AndroidRuntime: 	at org.dwbn.plugins.playlist.PlaylistPlugin.seekTo(PlaylistPlugin.kt:280)
03-23 09:00:16.358  5123  5213 E AndroidRuntime: 	... 8 more

Player skip buttons

This is just a question, not an issue.
Is there a way to add the skip buttons like in the print screen below?

AE40EEF9-40BF-4629-8273-777DFD3633D1

thanks for the awesome work, this plugin will fit like a glove for me.

Invalid notification (no valid small icon)

Hi there, I've got no Android experience but trying to get this up and running. The plugin is working great on ios and web. I got things building, then was facing issues with HLS, which I made progress on by adding implementation 'com.google.android.exoplayer:exoplayer-hls:2.9.6' to build.gradle. The issue I'm facing now is this (no valid small icon), maybe it's something stupid on my end. Happy to add you to my project, harder for me to make an MR. Will keep diving in but any guidence could be helpful. I tried using this as well.

await Playlist.setOptions({
  verbose: !environment.production,
  options: {
    icon: 'ic_notification'
  },
}); 

state [0.07, 0.00, window=0, false, BUFFERING]
2024-04-05 18:17:44.752 10432-10432 onPlaybackStateChanged my.app.package I PREPARING, {"trackId":"6d2fc018-91e4-43e9-bc72-368cb1237725","isStream":true,"currentIndex":0,"status":"loading","currentPosition":0,"duration":0,"playbackPercent":0,"bufferPercent":0,"bufferStart":0,"bufferEnd":0}, org.dwbn.plugins.playlist.data.AudioTrack@ff577c7
2024-04-05 18:17:44.753 10432-10432 PlaylistStatusCallback my.app.package V statusChanged:{"action":"status","status":{"msgType":10,"trackId":"6d2fc018-91e4-43e9-bc72-368cb1237725","value":{"trackId":"6d2fc018-91e4-43e9-bc72-368cb1237725","isStream":true,"currentIndex":0,"status":"loading","currentPosition":0,"duration":0,"playbackPercent":0,"bufferPercent":0,"bufferStart":0,"bufferEnd":0}}}
2024-04-05 18:17:44.753 10432-10432 Capacitor/...listPlugin my.app.package V Notifying listeners for event status
2024-04-05 18:17:44.754 10432-10432 my.app.package my.app.package E Invalid ID 0x00000000.
2024-04-05 18:17:44.758 10432-10432 AndroidRuntime my.app.package D Shutting down VM
2024-04-05 18:17:44.759 10432-10432 AndroidRuntime my.app.package E FATAL EXCEPTION: main
Process: my.app.package , PID: 10432
java.lang.RuntimeException: Unable to start service org.dwbn.plugins.playlist.service.MediaService@d813ede with Intent { act=com.devbrackets.android.playlistcore.start_service cmp=my.app.package/org.dwbn.plugins.playlist.service.MediaService (has extras) }: java.lang.IllegalArgumentException: Invalid notification (no valid small icon): Notification(channel=PlaylistCoreMediaNotificationChannel shortcut=null contentView=null vibrate=null sound=null defaults=0x0 flags=0x10 color=0x00000000 category=transport actions=3 vis=PUBLIC)
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:4724)
at android.app.ActivityThread.access$2000(ActivityThread.java:256)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2129)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7870)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
Caused by: java.lang.IllegalArgumentException: Invalid notification (no valid small icon): Notification(channel=PlaylistCoreMediaNotificationChannel shortcut=null contentView=null vibrate=null sound=null defaults=0x0 flags=0x10 color=0x00000000 category=transport actions=3 vis=PUBLIC)
at android.app.NotificationManager.fixNotification(NotificationManager.java:705)
at android.app.NotificationManager.notifyAsUser(NotificationManager.java:684)
at android.app.NotificationManager.notify(NotificationManager.java:633)
at android.app.NotificationManager.notify(NotificationManager.java:609)
at com.devbrackets.android.playlistcore.components.playlisthandler.DefaultPlaylistHandler.updateMediaControls(DefaultPlaylistHandler.kt:313)
at org.dwbn.plugins.playlist.playlist.AudioPlaylistHandler.updateMediaControls(AudioPlaylistHandler.java:145)
at com.devbrackets.android.playlistcore.components.playlisthandler.DefaultPlaylistHandler.setPlaybackState(DefaultPlaylistHandler.kt:522)
at com.devbrackets.android.playlistcore.components.playlisthandler.DefaultPlaylistHandler.play(DefaultPlaylistHandler.kt:440)
at com.devbrackets.android.playlistcore.components.playlisthandler.DefaultPlaylistHandler.startItemPlayback(DefaultPlaylistHandler.kt:391)
at com.devbrackets.android.playlistcore.service.BasePlaylistService.handleRemoteAction(BasePlaylistService.kt:154)
at com.devbrackets.android.playlistcore.service.BasePlaylistService.onStartCommand(BasePlaylistService.kt:133)
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:4706)
at android.app.ActivityThread.access$2000(ActivityThread.java:256) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2129) 
at android.os.Handler.dispatchMessage(Handler.java:106) 
at android.os.Looper.loopOnce(Looper.java:201) 
at android.os.Looper.loop(Looper.java:288) 
at android.app.ActivityThread.main(ActivityThread.java:7870) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003) 
2024-04-05 18:17:44.837 10432-10432 Process my.app.package I Sending signal. PID: 10432 SIG: 9

[iOS] Play after pause always resets to start of current track

Not sure if I am doing something fundamentally wrong here, but when I create a single-track playlist like this:

const player = new RmxAudioPlayer()
await player.initialize()
await player.setOptions({
  verbose: false,
  options: {
    icon: 'icon_bw'
  }
})
await player.addItem({
  title: 'asdf',
  assetUrl: uri,
  isStream: false,
  trackId: uuidv4()
})
await player.play()

This plays just fine, but pause seems to behave oddly.

When I call await player.pause() on the player, it pauses, but after calling await player.play() it always starts from the beginning of the track.

Seeking also has no effect and I am not getting any errors so I assume this is some fundamental problem here? The lock-screen controls cause the same reset after pause and then play. I tried it using the setPlaylistItems command and used the retainPosition: true option, but to no avail.

Edit: This is happening on iOS 13.1.2

iOS: hide lock screen player after calling `clearAllItems()`

I try to call clearAllItems method after my custom music player is closed, however the music player in lock screen still visible. Is there any way to get rid of the lock screen player after calling clearAllItems. In addition, I tried to remove the following code from Info.plist, the lock screen music player will be gone after the music is stopped by the system. But the background playing feature is needed from my own app. Is there any solution? Thanks

	<key>UIBackgroundModes</key>
	<array>
		<string>audio</string>
		<string>fetch</string>
	</array>

Fail to build from the removal of package-lock.json

Since this commit, our app fails to build :/

3580523

Any particular reason for removing the lock file?
We get a bunch of errors since it's trying to do npm install and running npm run build for this package.

❯ pnpm update
../../../Library/pnpm/store/v3/tmp/_tmp_76160_88e8c17ad0e1af45ab593c465ec944d8 [[email protected]]: Running npm-install script, failed in 5.6s
...6160_88e8c17ad0e1af45ab593c465ec944d8 npm-install$ npm install
│ > [email protected] prepare
│ > npm run build
│ > [email protected] build
│ > npm run clean && npm run docgen && tsc && rollup -c rollup.config.js
│ > [email protected] clean
│ > rimraf ./dist
│ > [email protected] docgen
│ > docgen --api PlaylistPlugin --output-readme README.md --output-json dist/docs.json
│ ✔️ DocGen Output: /Users/martin/Library/pnpm/store/v3/tmp/_tmp_76160_88e8c17ad0e1af45ab593c465ec944d8/dist/docs.json
│ ✔️ DocGen Output: /Users/martin/Library/pnpm/store/v3/tmp/_tmp_76160_88e8c17ad0e1af45ab593c465ec944d8/README.md
│ node_modules/@types/node/ts4.8/test.d.ts:914:34 - error TS1005: '?' expected.
│ 914             : F extends abstract new (...args: any) => infer T
│                                      ~~~
│ node_modules/@types/node/ts4.8/test.d.ts:915:17 - error TS1005: ':' expected.
│ 915                 ? T
│                     ~
│ node_modules/@types/node/ts4.8/test.d.ts:916:17 - error TS1005: ',' expected.
│ 916                 : unknown,
│                     ~
│ node_modules/@types/node/ts4.8/test.d.ts:919:34 - error TS1005: '?' expected.
│ 919             : F extends abstract new (...args: infer Y) => any
│                                      ~~~
│ node_modules/@types/node/ts4.8/test.d.ts:920:17 - error TS1005: ':' expected.
│ 920                 ? Y
│                     ~
│ node_modules/@types/node/ts4.8/test.d.ts:921:17 - error TS1005: ',' expected.
│ 921                 : unknown[],
│                     ~
│ node_modules/@types/node/ts4.8/test.d.ts:921:26 - error TS1005: ',' expected.
│ 921                 : unknown[],
│                              ~
│ node_modules/@types/node/ts4.8/test.d.ts:922:5 - error TS1109: Expression expected.
│ 922     > {
│         ~
│ node_modules/@types/node/ts4.8/test.d.ts:926:24 - error TS1005: ',' expected.
│ 926         arguments: Args;
│                            ~
│ node_modules/@types/node/ts4.8/test.d.ts:930:35 - error TS1005: ',' expected.
│ 930         error: unknown | undefined;
│                                       ~
│ node_modules/@types/node/ts4.8/test.d.ts:936:39 - error TS1005: ',' expected.
│ 936         result: ReturnType | undefined;
│                                           ~
│ node_modules/@types/node/ts4.8/test.d.ts:940:21 - error TS1005: ',' expected.
│ 940         stack: Error;
│                         ~
│ node_modules/@types/node/ts4.8/test.d.ts:945:19 - error TS1005: ',' expected.
│ 945         target: F extends abstract new (...args: any) => any ? F : undefined;
│                       ~~~~~~~
│ node_modules/@types/node/ts4.8/test.d.ts:945:27 - error TS1005: ':' expected.
│ 945         target: F extends abstract new (...args: any) => any ? F : undefined;
│                               ~~~~~~~~
│ node_modules/@types/node/ts4.8/test.d.ts:945:36 - error TS1005: ',' expected.
│ 945         target: F extends abstract new (...args: any) => any ? F : undefined;
│                                        ~~~
│ node_modules/@types/node/ts4.8/test.d.ts:945:55 - error TS1005: '{' expected.
│ 945         target: F extends abstract new (...args: any) => any ? F : undefined;
│                                                           ~~
│ node_modules/@types/node/ts4.8/test.d.ts:945:64 - error TS1005: ',' expected.
│ 945         target: F extends abstract new (...args: any) => any ? F : undefined;
│                                                                    ~
│ node_modules/@types/node/ts4.8/test.d.ts:945:77 - error TS1005: ',' expected.
│ 945         target: F extends abstract new (...args: any) => any ? F : undefined;
│                                                                                 ~
│ node_modules/@types/node/ts4.8/test.d.ts:949:22 - error TS1005: ',' expected.
│ 949         this: unknown;
│                          ~
│ Found 19 errors.
│ npm ERR! code 2
│ npm ERR! path /Users/martin/Library/pnpm/store/v3/tmp/_tmp_76160_88e8c17ad0e1af45ab593c465ec944d8
│ npm ERR! command failed
│ npm ERR! command sh -c npm run build
│ npm ERR! A complete log of this run can be found in:
│ npm ERR!     /Users/martin/.npm/_logs/2023-06-15T13_04_44_026Z-debug-0.log
└─ Failed in 5.6s at /Users/martin/Library/pnpm/store/v3/tmp/_tmp_76160_88e8c17ad0e1af45ab593c465ec944d8
apps/app                                 |  WARN  deprecated [email protected]
Packages: +1 -1
+-
 ERR_PNPM_PREPARE_PACKAGE  Failed to prepare git-hosted package fetched from "https://codeload.github.com/phiamo/capacitor-plugin-playlist/tar.gz/358052395ff3bb36600c9ab75d3c013aaf9aa5f0": [email protected] npm-install: `npm install`
Exit status 2
Progress: resolved 1134, reused 1099, downloaded 0, added 0

Nothing happens when .play() is called on Android

@phiamo Edit: Please when you have a moment, could you reply re: the below? It'd be much appreciated. Thank you.

  • I am attempting to play an mp3 from a remote URL.
  • Hardcoded into my page as below (Ionic 5 + Typescript)
  • I init the player, add the track, then on a button press, I call play() but nothing happens.
  • I can see the output in Android studio in the console:
V/Capacitor/Plugin: To native (Capacitor plugin): callbackId: 55614574, pluginId: PlaylistPlugin, methodName: play
V/Capacitor: callback: 55614574, pluginId: PlaylistPlugin, methodName: play, methodData: {}
I/RmxAudioPlayer: play

Is this the right way to do it?
If not, please specify + at some point add to the readme.

Here is my example player page:

import { Component, OnInit } from '@angular/core';
import { AudioProvider } from '../Services/AudioProvider';


@Component({
  selector: 'app-player',
  templateUrl: 'player.page.html',
  styleUrls: ['player.page.scss'],
})
export class PlayerPage implements OnInit {

  public isPlaying: boolean = false;
  public audioTrack: any;

  constructor(
    public _AudioProvider: AudioProvider
  ) {
  }

  ngOnInit() {
    this.audioTrack = {
      isStream: true,
      assetUrl: "https://ia802508.us.archive.org/5/items/testmp3testfile/mpthreetest.mp3",
      artist: 'Whatever Artist',
      album: 'No Album',
      title: "Some title"
    };

    this._AudioProvider.init().then(() => {
      this._AudioProvider.addItem(this.audioTrack);
    });
  }

  play() {
    this._AudioProvider.play();
    this.isPlaying = this._AudioProvider.isPlaying;
  }


}

Changing rate

I got (not always) the following issue: when my phone connected to Bluetooth system some tracks begin to change rate (playing faster or slower) themselves. Does anybody got the same and maybe know the reason?

iOS, RMXSTATUS_LOADED event fires many times for one track

in iOS, I'm seeing the RMXSTATUS_LOADED event fire many times for one track. 14 instances for example.

In each case the reported values are identical, for example all 14 events show:

{"currentPosition":0,"status":"paused","isStream":0,"playbackPercent":0,"bufferStart":0,"duration":310.4432373046875,"bufferEnd":310.4432373046875,"bufferPercent":100,"trackId":"b2589af6cb533f74f802234c4bec2508","currentIndex":0}

Is this expected?

Argument of type 'AudioTrackOptions' is not assignable to parameter of type 'PlaylistItemOptions'

Using this plugin with Ionic (see Ionic info below), and following along with the example code (examples/audio-provider.ts), I encountered a type error:

Error: error TS2345: Argument of type 'AudioTrackOptions' is not assignable to parameter of type 'PlaylistItemOptions'.
Types of property 'playFromId' are incompatible.
Type 'string' is not assignable to type 'number'.

I suspect the setPlaylistItems function in the example code should be this:

let options: PlaylistItemOptions = {};

instead of

let options: AudioTrackOptions = {};

Ionic:

   Ionic CLI                     : 6.19.0 (/usr/local/lib/node_modules/@ionic/cli)
   Ionic Framework               : @ionic/angular 6.1.2
   @angular-devkit/build-angular : 13.2.6
   @angular-devkit/schematics    : 13.3.1
   @angular/cli                  : 13.2.6
   @ionic/angular-toolkit        : 6.1.0

Capacitor:

   Capacitor CLI      : 3.5.1
   @capacitor/android : 3.4.3
   @capacitor/core    : 3.5.1
   @capacitor/ios     : 3.5.1

Utility:

   cordova-res : 0.15.4
   native-run  : 1.5.0

System:

   NodeJS : v17.8.0 (/usr/local/bin/node)
   npm    : 8.9.0
   OS     : macOS Monterey

Android firing pause event after calling playTrackByIndex

Hi there,

I've been trying to debug why Android is firing pause events after I call the method playTrackByIndex or playTrackById
Line 218 you can see the method being called I/PlaylistPlugin: playTrackByIndex

Then it goes through this list of events:
60 - event on stopped
100 - event track changed
10 - event on loading
11 - event on canplay
30 - event on playing

Then at the end you can see the last V/PlaylistStatusCallback: statusChanged: with msgType 35.
The player continues to play the audio normally and native controllers show the pause button now, but in the UI I can't know if the player is playing.

Any ideas?

Thanks for the help.


I/Capacitor/Console: File: webpack-internal:///./src/services/player/player.js - Line 394 - Msg: isEpisodeInCurrentPlayList 276
I/Capacitor/Console: File: webpack-internal:///./node_modules/@quasar/app/lib/webpack/loader.transform-quasar-imports.js!./node_modules/babel-loader/lib/index.js?!./node_modules/@quasar/app/lib/webpack/loader.auto-import-client.js?kebab!./node_modules/vue-loader/lib/index.js?!./src/components/episode/EpisodePlayButton.vue?vue&type=script&lang=js& - Line 101 - Msg: isListened false
I/Capacitor/Console: File: webpack-internal:///./node_modules/@quasar/app/lib/webpack/loader.transform-quasar-imports.js!./node_modules/babel-loader/lib/index.js?!./node_modules/@quasar/app/lib/webpack/loader.auto-import-client.js?kebab!./node_modules/vue-loader/lib/index.js?!./src/components/episode/EpisodePlayButton.vue?vue&type=script&lang=js& - Line 102 - Msg: isPaused false
I/Capacitor/Console: File: webpack-internal:///./node_modules/@quasar/app/lib/webpack/loader.transform-quasar-imports.js!./node_modules/babel-loader/lib/index.js?!./node_modules/@quasar/app/lib/webpack/loader.auto-import-client.js?kebab!./node_modules/vue-loader/lib/index.js?!./src/components/episode/EpisodePlayButton.vue?vue&type=script&lang=js& - Line 103 - Msg: isPlaying false
I/Capacitor/Console: File: webpack-internal:///./node_modules/@quasar/app/lib/webpack/loader.transform-quasar-imports.js!./node_modules/babel-loader/lib/index.js?!./node_modules/@quasar/app/lib/webpack/loader.auto-import-client.js?kebab!./node_modules/vue-loader/lib/index.js?!./src/components/episode/EpisodePlayButton.vue?vue&type=script&lang=js& - Line 104 - Msg: isSameEpisodePlaying false
I/Capacitor/Console: File: webpack-internal:///./node_modules/@quasar/app/lib/webpack/loader.transform-quasar-imports.js!./node_modules/babel-loader/lib/index.js?!./node_modules/@quasar/app/lib/webpack/loader.auto-import-client.js?kebab!./node_modules/vue-loader/lib/index.js?!./src/components/episode/EpisodePlayButton.vue?vue&type=script&lang=js& - Line 105 - Msg: isSamePlaylistPlaying false
I/Capacitor/Console: File: webpack-internal:///./node_modules/@quasar/app/lib/webpack/loader.transform-quasar-imports.js!./node_modules/babel-loader/lib/index.js?!./node_modules/@quasar/app/lib/webpack/loader.auto-import-client.js?kebab!./node_modules/vue-loader/lib/index.js?!./src/components/episode/EpisodePlayButton.vue?vue&type=script&lang=js& - Line 106 - Msg: isInCurrentPlaylist false
I/Capacitor/Console: File: webpack-internal:///./node_modules/@quasar/app/lib/webpack/loader.transform-quasar-imports.js!./node_modules/babel-loader/lib/index.js?!./node_modules/@quasar/app/lib/webpack/loader.auto-import-client.js?kebab!./node_modules/vue-loader/lib/index.js?!./src/components/episode/EpisodePlayButton.vue?vue&type=script&lang=js& - Line 107 - Msg: episodeId 276
I/Capacitor/Console: File: webpack-internal:///./src/store/player/mutations.js - Line 27 - Msg: setLoading true 555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555
I/Capacitor/Console: File: webpack-internal:///./src/store/episodes/mutations.js - Line 113 - Msg: episodePlaylist episodes:10
I/Capacitor/Console: File: webpack-internal:///./src/services/player/player.js - Line 241 - Msg: setPlaylist
I/Capacitor/Console: File: webpack-internal:///./node_modules/@quasar/app/lib/webpack/loader.transform-quasar-imports.js!./node_modules/babel-loader/lib/index.js?!./node_modules/@quasar/app/lib/webpack/loader.auto-import-client.js?kebab!./node_modules/vue-loader/lib/index.js?!./src/components/player/MiniPlayer.vue?vue&type=script&lang=js& - Line 43 - Msg: title CANIVETE
I/Capacitor/Console: File: webpack-internal:///./node_modules/@quasar/app/lib/webpack/loader.transform-quasar-imports.js!./node_modules/babel-loader/lib/index.js?!./node_modules/@quasar/app/lib/webpack/loader.auto-import-client.js?kebab!./node_modules/vue-loader/lib/index.js?!./src/components/episode/EpisodePlayButton.vue?vue&type=script&lang=js& - Line 45 - Msg: updated EpisodePlayButton episodeId 268
I/Capacitor/Console: File: webpack-internal:///./node_modules/@quasar/app/lib/webpack/loader.transform-quasar-imports.js!./node_modules/babel-loader/lib/index.js?!./node_modules/@quasar/app/lib/webpack/loader.auto-import-client.js?kebab!./node_modules/vue-loader/lib/index.js?!./src/components/episode/EpisodePlayButton.vue?vue&type=script&lang=js& - Line 45 - Msg: updated EpisodePlayButton episodeId 273
I/Capacitor/Console: File: webpack-internal:///./node_modules/@quasar/app/lib/webpack/loader.transform-quasar-imports.js!./node_modules/babel-loader/lib/index.js?!./node_modules/@quasar/app/lib/webpack/loader.auto-import-client.js?kebab!./node_modules/vue-loader/lib/index.js?!./src/components/episode/EpisodePlayButton.vue?vue&type=script&lang=js& - Line 45 - Msg: updated EpisodePlayButton episodeId 275
I/Capacitor/Console: File: webpack-internal:///./node_modules/@quasar/app/lib/webpack/loader.transform-quasar-imports.js!./node_modules/babel-loader/lib/index.js?!./node_modules/@quasar/app/lib/webpack/loader.auto-import-client.js?kebab!./node_modules/vue-loader/lib/index.js?!./src/components/episode/EpisodePlayButton.vue?vue&type=script&lang=js& - Line 45 - Msg: updated EpisodePlayButton episodeId 267
I/Capacitor/Console: File: webpack-internal:///./node_modules/@quasar/app/lib/webpack/loader.transform-quasar-imports.js!./node_modules/babel-loader/lib/index.js?!./node_modules/@quasar/app/lib/webpack/loader.auto-import-client.js?kebab!./node_modules/vue-loader/lib/index.js?!./src/components/episode/EpisodePlayButton.vue?vue&type=script&lang=js& - Line 45 - Msg: updated EpisodePlayButton episodeId 268
I/Capacitor/Console: File: webpack-internal:///./node_modules/@quasar/app/lib/webpack/loader.transform-quasar-imports.js!./node_modules/babel-loader/lib/index.js?!./node_modules/@quasar/app/lib/webpack/loader.auto-import-client.js?kebab!./node_modules/vue-loader/lib/index.js?!./src/components/episode/EpisodePlayButton.vue?vue&type=script&lang=js& - Line 45 - Msg: updated EpisodePlayButton episodeId 269
I/Capacitor/Console: File: webpack-internal:///./node_modules/@quasar/app/lib/webpack/loader.transform-quasar-imports.js!./node_modules/babel-loader/lib/index.js?!./node_modules/@quasar/app/lib/webpack/loader.auto-import-client.js?kebab!./node_modules/vue-loader/lib/index.js?!./src/components/episode/EpisodePlayButton.vue?vue&type=script&lang=js& - Line 45 - Msg: updated EpisodePlayButton episodeId 270
I/Capacitor/Console: File: webpack-internal:///./node_modules/@quasar/app/lib/webpack/loader.transform-quasar-imports.js!./node_modules/babel-loader/lib/index.js?!./node_modules/@quasar/app/lib/webpack/loader.auto-import-client.js?kebab!./node_modules/vue-loader/lib/index.js?!./src/components/episode/EpisodePlayButton.vue?vue&type=script&lang=js& - Line 45 - Msg: updated EpisodePlayButton episodeId 271
I/Capacitor/Console: File: webpack-internal:///./node_modules/@quasar/app/lib/webpack/loader.transform-quasar-imports.js!./node_modules/babel-loader/lib/index.js?!./node_modules/@quasar/app/lib/webpack/loader.auto-import-client.js?kebab!./node_modules/vue-loader/lib/index.js?!./src/components/episode/EpisodePlayButton.vue?vue&type=script&lang=js& - Line 45 - Msg: updated EpisodePlayButton episodeId 272
I/Capacitor/Console: File: webpack-internal:///./node_modules/@quasar/app/lib/webpack/loader.transform-quasar-imports.js!./node_modules/babel-loader/lib/index.js?!./node_modules/@quasar/app/lib/webpack/loader.auto-import-client.js?kebab!./node_modules/vue-loader/lib/index.js?!./src/components/episode/EpisodePlayButton.vue?vue&type=script&lang=js& - Line 45 - Msg: updated EpisodePlayButton episodeId 273
I/Capacitor/Console: File: webpack-internal:///./node_modules/@quasar/app/lib/webpack/loader.transform-quasar-imports.js!./node_modules/babel-loader/lib/index.js?!./node_modules/@quasar/app/lib/webpack/loader.auto-import-client.js?kebab!./node_modules/vue-loader/lib/index.js?!./src/components/episode/EpisodePlayButton.vue?vue&type=script&lang=js& - Line 45 - Msg: updated EpisodePlayButton episodeId 274
I/Capacitor/Console: File: webpack-internal:///./node_modules/@quasar/app/lib/webpack/loader.transform-quasar-imports.js!./node_modules/babel-loader/lib/index.js?!./node_modules/@quasar/app/lib/webpack/loader.auto-import-client.js?kebab!./node_modules/vue-loader/lib/index.js?!./src/components/episode/EpisodePlayButton.vue?vue&type=script&lang=js& - Line 45 - Msg: updated EpisodePlayButton episodeId 275
I/Capacitor/Console: File: webpack-internal:///./node_modules/@quasar/app/lib/webpack/loader.transform-quasar-imports.js!./node_modules/babel-loader/lib/index.js?!./node_modules/@quasar/app/lib/webpack/loader.auto-import-client.js?kebab!./node_modules/vue-loader/lib/index.js?!./src/components/episode/EpisodePlayButton.vue?vue&type=script&lang=js& - Line 45 - Msg: updated EpisodePlayButton episodeId 276

E/Capacitor: JavaScript Error: {"type":"js.error","error":{"message":"ResizeObserver loop limit exceeded","url":"http://192.168.0.157:8080/#/","line":0,"col":0,"errorObject":"null"}}
V/Capacitor/Plugin: To native (Capacitor plugin): callbackId: 7805877, pluginId: Playlist, methodName: setPlaylistItems
V/Capacitor: callback: 7805877, pluginId: Playlist, methodName: setPlaylistItems, methodData: {"items":[{"artist":"Déia Freitas","isStream":true,"trackId":"276","albumArt":"https:\/\/naoinviabilize-img.s3.filebase.com\/Logo_Nova_Temp_Luz_Acesa_d976efa734.jpeg","album":"Luz Acesa","title":"CANIVETE","assetUrl":"https:\/\/naoinviabilize.s3.filebase.com\/CANIVETE_921d47df70.mp3?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=A5B3762EE398004D7BBB%2F20221008%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20221008T210229Z&X-Amz-Expires=900&X-Amz-Signature=e8c90fa64dc6c5a90bb0f4998d7eb951378b05d4f1a1234689e3c3c550c07e43&X-Amz-SignedHeaders=host"},{"artist":"Déia Freitas","isStream":true,"trackId":"275","albumArt":"https:\/\/naoinviabilize-img.s3.filebase.com\/Logo_Nova_Temp_Picole_0711c607d6.jpeg","album":"Picolé de Limão","title":"DERRAME","assetUrl":"https:\/\/naoinviabilize.s3.filebase.com\/DERRAME_ac99275fb2.mp3?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=A5B3762EE398004D7BBB%2F20221008%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20221008T210229Z&X-Amz-Expires=900&X-Amz-Signature=7337c84f85da121207710166b2075efa8211cf25a167234f49951e5fde4333fe&X-Amz-SignedHeaders=host"},{"artist":"Déia Freitas","isStream":true,"trackId":"274","albumArt":"https:\/\/naoinviabilize-img.s3.filebase.com\/Logo_Nova_Temp_Luz_Acesa_d976efa734.jpeg","album":"Luz Acesa","title":"MALDADE","assetUrl":"https:\/\/naoinviabilize.s3.filebase.com\/MALDADE_10682535b0.mp3?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=A5B3762EE398004D7BBB%2F20221008%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20221008T210229Z&X-Amz-Expires=900&X-Amz-Signature=6acf0bcd0f9ac8b1d92d7d3018433a1d7966d85c161cf6ff496436ec23c87f56&X-Amz-SignedHeaders=host"},{"artist":"Déia Freitas","isStream":true,"trackId":"273","albumArt":"https:\/\/naoinviabilize-img.s3.filebase.com\/Logo_Nova_Temp_M_Inhas_Coisinhas_2a68a9c7a8.jpeg","album":"Minhas Coisinhas","title":"GRUPO E APOIASE","assetUrl":"https:\/\/naoinviabilize.s3.filebase.com\/31_MINHAS_COISINHAS_Grupo_e_Apoiase_db14ab45f7.mp3?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=A5B3762EE398004D7BBB%2F20221008%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20221008T210229Z&X-Amz-Expires=900&X-Amz-Signature=24237559fa44afd5ded177dc74505032e6fd3d1c1f0fe32c6bcd2b2b5a409c4d&X-Amz-SignedHeaders=host"},{"artist":"Déia Freitas","isStream":true,"trackId":"272","albumArt":"https:\/\/naoinviabilize-img.s3.filebase.com\/Logo_Nova_Temp_Picole_0711c607d6.jpeg","album":"Picolé de Limão","title":"TRAMPO","assetUrl":"https:\/\/naoinviabilize.s3.filebase.com\/TRAMPO_c84581db9c.mp3?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=A5B3762EE398004D7BBB%2F20221008%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20221008T210229Z&X-Amz-Expires=900&X-Amz-Signature=8bd7b717ec6e651dcff731a7ad7eb65dea509665099710cfcf36e1fc3ff678c7&X-Amz-SignedHeaders=host"},{"artist":"Déia Freitas","isStream":true,"trackId":"271","albumArt":"https:\/\/naoinviabilize-img.s3.filebase.com\/Logo_Proibidao_51c4b06144.jpeg","album":"Proibidão","title":"ÉDIPO","assetUrl":"https:\/\/naoinviabilize.s3.filebase.com\/EDIPO_novo_c442c5a3ce.mp3?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=A5B3762EE398004D7BBB%2F20221008%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20221008T210229Z&X-Amz-Expires=900&X-Amz-Signature=f3e815055ca765dcebcf892700500f10d59b0d37316f4b19a2184254b15ab98f&X-Amz-SignedHeaders=host"},{"artist":"Déia Freitas","isStream":true,"trackId":"270","albumArt":"https:\/\/naoinviabilize-img.s3.filebase.com\/Logo_Nova_Temp_Picole_0711c607d6.jpeg","album":"Picolé de Limão","title":"CASA DE VERANEIO","assetUrl":"https:\/\/naoinviabilize.s3.filebase.com\/CASA_DE_VERANEIO_63c33d6f2d.mp3?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=A5B3762EE398004D7BBB%2F20221008%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20221008T210229Z&X-Amz-Expires=900&X-Amz-Signature=3eeedbf91aa6e423935812b4a30056d9d8e3b32227969fa466c20e8116484edb&X-Amz-SignedHeaders=host"},{"artist":"Déia Freitas","isStream":true,"trackId":"269","albumArt":"https:\/\/naoinviabilize-img.s3
V/Capacitor/Plugin: To native (Capacitor plugin): callbackId: 7805878, pluginId: Playlist, methodName: play
V/Capacitor: callback: 7805878, pluginId: Playlist, methodName: play, methodData: {}
W/PlaylistManager: beginPlayback: Error setting volume or playback speed: null
V/PlaylistStatusCallback: statusChanged:{"action":"status","status":{"msgType":110,"trackId":"276","value":{"trackId":"276","isStream":true,"assetUrl":"https:\/\/naoinviabilize.s3.filebase.com\/CANIVETE_921d47df70.mp3?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=A5B3762EE398004D7BBB%2F20221008%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20221008T210229Z&X-Amz-Expires=900&X-Amz-Signature=e8c90fa64dc6c5a90bb0f4998d7eb951378b05d4f1a1234689e3c3c550c07e43&X-Amz-SignedHeaders=host","albumArt":"https:\/\/naoinviabilize-img.s3.filebase.com\/Logo_Nova_Temp_Luz_Acesa_d976efa734.jpeg","artist":"Déia Freitas","album":"Luz Acesa","title":"CANIVETE"}}}
V/Capacitor/PlaylistPlugin: Notifying listeners for event status
V/PlaylistStatusCallback: statusChanged:{"action":"status","status":{"msgType":110,"trackId":"275","value":{"trackId":"275","isStream":true,"assetUrl":"https:\/\/naoinviabilize.s3.filebase.com\/DERRAME_ac99275fb2.mp3?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=A5B3762EE398004D7BBB%2F20221008%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20221008T210229Z&X-Amz-Expires=900&X-Amz-Signature=7337c84f85da121207710166b2075efa8211cf25a167234f49951e5fde4333fe&X-Amz-SignedHeaders=host","albumArt":"https:\/\/naoinviabilize-img.s3.filebase.com\/Logo_Nova_Temp_Picole_0711c607d6.jpeg","artist":"Déia Freitas","album":"Picolé de Limão","title":"DERRAME"}}}
V/Capacitor/PlaylistPlugin: Notifying listeners for event status
V/PlaylistStatusCallback: statusChanged:{"action":"status","status":{"msgType":110,"trackId":"274","value":{"trackId":"274","isStream":true,"assetUrl":"https:\/\/naoinviabilize.s3.filebase.com\/MALDADE_10682535b0.mp3?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=A5B3762EE398004D7BBB%2F20221008%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20221008T210229Z&X-Amz-Expires=900&X-Amz-Signature=6acf0bcd0f9ac8b1d92d7d3018433a1d7966d85c161cf6ff496436ec23c87f56&X-Amz-SignedHeaders=host","albumArt":"https:\/\/naoinviabilize-img.s3.filebase.com\/Logo_Nova_Temp_Luz_Acesa_d976efa734.jpeg","artist":"Déia Freitas","album":"Luz Acesa","title":"MALDADE"}}}
V/Capacitor/PlaylistPlugin: Notifying listeners for event status
V/PlaylistStatusCallback: statusChanged:{"action":"status","status":{"msgType":110,"trackId":"273","value":{"trackId":"273","isStream":true,"assetUrl":"https:\/\/naoinviabilize.s3.filebase.com\/31_MINHAS_COISINHAS_Grupo_e_Apoiase_db14ab45f7.mp3?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=A5B3762EE398004D7BBB%2F20221008%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20221008T210229Z&X-Amz-Expires=900&X-Amz-Signature=24237559fa44afd5ded177dc74505032e6fd3d1c1f0fe32c6bcd2b2b5a409c4d&X-Amz-SignedHeaders=host","albumArt":"https:\/\/naoinviabilize-img.s3.filebase.com\/Logo_Nova_Temp_M_Inhas_Coisinhas_2a68a9c7a8.jpeg","artist":"Déia Freitas","album":"Minhas Coisinhas","title":"GRUPO E APOIASE"}}}
V/Capacitor/PlaylistPlugin: Notifying listeners for event status
V/PlaylistStatusCallback: statusChanged:{"action":"status","status":{"msgType":110,"trackId":"272","value":{"trackId":"272","isStream":true,"assetUrl":"https:\/\/naoinviabilize.s3.filebase.com\/TRAMPO_c84581db9c.mp3?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=A5B3762EE398004D7BBB%2F20221008%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20221008T210229Z&X-Amz-Expires=900&X-Amz-Signature=8bd7b717ec6e651dcff731a7ad7eb65dea509665099710cfcf36e1fc3ff678c7&X-Amz-SignedHeaders=host","albumArt":"https:\/\/naoinviabilize-img.s3.filebase.com\/Logo_Nova_Temp_Picole_0711c607d6.jpeg","artist":"Déia Freitas","album":"Picolé de Limão","title":"TRAMPO"}}}
V/Capacitor/PlaylistPlugin: Notifying listeners for event status
V/PlaylistStatusCallback: statusChanged:{"action":"status","status":{"msgType":110,"trackId":"271","value":{"trackId":"271","isStream":true,"assetUrl":"https:\/\/naoinviabilize.s3.filebase.com\/EDIPO_novo_c442c5a3ce.mp3?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=A5B3762EE398004D7BBB%2F20221008%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20221008T210229Z&X-Amz-Expires=900&X-Amz-Signature=f3e815055ca765dcebcf892700500f10d59b0d37316f4b19a2184254b15ab98f&X-Amz-SignedHeaders=host","albumArt":"https:\/\/naoinviabilize-img.s3.filebase.com\/Logo_Proibidao_51c4b06144.jpeg","artist":"Déia Freitas","album":"Proibidão","title":"ÉDIPO"}}}
V/Capacitor/PlaylistPlugin: Notifying listeners for event status
I/Capacitor/Console: File: webpack-internal:///./src/services/player/player.js - Line 62 - Msg: play
I/Capacitor/Console: File: webpack-internal:///./src/services/player/player.js - Line 66 - Msg: this.player [object Object]
V/PlaylistStatusCallback: statusChanged:{"action":"status","status":{"msgType":110,"trackId":"270","value":{"trackId":"270","isStream":true,"assetUrl":"https:\/\/naoinviabilize.s3.filebase.com\/CASA_DE_VERANEIO_63c33d6f2d.mp3?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=A5B3762EE398004D7BBB%2F20221008%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20221008T210229Z&X-Amz-Expires=900&X-Amz-Signature=3eeedbf91aa6e423935812b4a30056d9d8e3b32227969fa466c20e8116484edb&X-Amz-SignedHeaders=host","albumArt":"https:\/\/naoinviabilize-img.s3.filebase.com\/Logo_Nova_Temp_Picole_0711c607d6.jpeg","artist":"Déia Freitas","album":"Picolé de Limão","title":"CASA DE VERANEIO"}}}
V/Capacitor/PlaylistPlugin: Notifying listeners for event status
V/PlaylistStatusCallback: statusChanged:{"action":"status","status":{"msgType":110,"trackId":"269","value":{"trackId":"269","isStream":true,"assetUrl":"https:\/\/naoinviabilize.s3.filebase.com\/ACAMADA_1ab328a992.mp3?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=A5B3762EE398004D7BBB%2F20221008%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20221008T210229Z&X-Amz-Expires=900&X-Amz-Signature=feaf3cb3166e5d3c36e49676e5633caeb7987ff97e90e36314d06c43df065ca6&X-Amz-SignedHeaders=host","albumArt":"https:\/\/naoinviabilize-img.s3.filebase.com\/Logo_Nova_Temp_Picole_0711c607d6.jpeg","artist":"Déia Freitas","album":"Picolé de Limão","title":"ACAMADA"}}}
V/Capacitor/PlaylistPlugin: Notifying listeners for event status
V/PlaylistStatusCallback: statusChanged:{"action":"status","status":{"msgType":110,"trackId":"268","value":{"trackId":"268","isStream":true,"assetUrl":"https:\/\/naoinviabilize.s3.filebase.com\/FILHA_DO_MEIO_92ff25fdb3.mp3?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=A5B3762EE398004D7BBB%2F20221008%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20221008T210229Z&X-Amz-Expires=900&X-Amz-Signature=2c6a76b786ed2283d814f112ab662bd8e12abac20adbdda2b131d81f34422f37&X-Amz-SignedHeaders=host","albumArt":"https:\/\/naoinviabilize-img.s3.filebase.com\/Logo_Nova_Temp_Picole_0711c607d6.jpeg","artist":"Déia Freitas","album":"Picolé de Limão","title":"FILHA DO MEIO"}}}
V/Capacitor/PlaylistPlugin: Notifying listeners for event status
V/PlaylistStatusCallback: statusChanged:{"action":"status","status":{"msgType":110,"trackId":"267","value":{"trackId":"267","isStream":true,"assetUrl":"https:\/\/naoinviabilize.s3.filebase.com\/MARMANJO_FITNESS_32a71c3232.mp3?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=A5B3762EE398004D7BBB%2F20221008%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20221008T210229Z&X-Amz-Expires=900&X-Amz-Signature=42a430313953da9e8903a7f1a7d24fa5b5efa64e1e8f61bb1c676ec2e30244f4&X-Amz-SignedHeaders=host","albumArt":"https:\/\/naoinviabilize-img.s3.filebase.com\/Logo_Nova_Temp_Picole_0711c607d6.jpeg","artist":"Déia Freitas","album":"Picolé de Limão","title":"MARMANJO FITNESS"}}}
V/Capacitor/PlaylistPlugin: Notifying listeners for event status
I/DrmHalHidl: No hidl drm factories found
I/PlaylistPlugin: setPlaylistItems10
E/DrmHalHidl: Failed to find passthrough drm factories
I/onPlaybackStateChanged: PLAYING, {"trackId":"276","isStream":true,"currentIndex":0,"status":"playing","currentPosition":0,"duration":0,"playbackPercent":0,"bufferPercent":0,"bufferStart":0,"bufferEnd":0}, org.dwbn.plugins.playlist.data.AudioTrack@e0cd5b3
V/PlaylistStatusCallback: statusChanged:{"action":"status","status":{"msgType":30,"trackId":"276","value":{"trackId":"276","isStream":true,"currentIndex":0,"status":"playing","currentPosition":0,"duration":0,"playbackPercent":0,"bufferPercent":0,"bufferStart":0,"bufferEnd":0}}}
V/Capacitor/PlaylistPlugin: Notifying listeners for event status
I/DrmUtils: found IDrmFactory. Instance name:[android.hardware.drm.IDrmFactory/clearkey]
I/DrmUtils: found IDrmFactory. Instance name:[android.hardware.drm.IDrmFactory/widevine]
I/ExoPlayerImpl: Init 5b770 [ExoPlayerLib/2.9.6] [bluejay, Pixel 6a, Google, 33]
V/PlaylistStatusCallback: statusChanged:{"action":"status","status":{"msgType":100,"trackId":"276","value":{"currentItem":{"trackId":"276","isStream":true,"assetUrl":"https:\/\/naoinviabilize.s3.filebase.com\/CANIVETE_921d47df70.mp3?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=A5B3762EE398004D7BBB%2F20221008%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20221008T210229Z&X-Amz-Expires=900&X-Amz-Signature=e8c90fa64dc6c5a90bb0f4998d7eb951378b05d4f1a1234689e3c3c550c07e43&X-Amz-SignedHeaders=host","albumArt":"https:\/\/naoinviabilize-img.s3.filebase.com\/Logo_Nova_Temp_Luz_Acesa_d976efa734.jpeg","artist":"Déia Freitas","album":"Luz Acesa","title":"CANIVETE"},"currentIndex":0,"isAtEnd":false,"isAtBeginning":true,"hasNext":true,"hasPrevious":false}}}
V/Capacitor/PlaylistPlugin: Notifying listeners for event status
D/EventLogger: seekStarted [0.00, 0.00, window=0]
E/ExoMediaPlayer: Unable to seek across windows, falling back to in-window seeking
D/EventLogger: positionDiscontinuity [0.00, 0.00, window=0, SEEK]
E/ExoMediaPlayer: Unable to seek across windows, falling back to in-window seeking
D/EventLogger: positionDiscontinuity [0.00, 0.00, window=0, SEEK]
D/EventLogger: state [0.00, 0.00, window=0, false, BUFFERING]
I/onPlaybackStateChanged: PREPARING, {"trackId":"276","isStream":true,"currentIndex":0,"status":"loading","currentPosition":0,"duration":0,"playbackPercent":0,"bufferPercent":0,"bufferStart":0,"bufferEnd":0}, org.dwbn.plugins.playlist.data.AudioTrack@e0cd5b3
V/PlaylistStatusCallback: statusChanged:{"action":"status","status":{"msgType":10,"trackId":"276","value":{"trackId":"276","isStream":true,"currentIndex":0,"status":"loading","currentPosition":0,"duration":0,"playbackPercent":0,"bufferPercent":0,"bufferStart":0,"bufferEnd":0}}}
V/Capacitor/PlaylistPlugin: Notifying listeners for event status
I/PlaylistPlugin: play
D/AudioManager: dispatching onAudioFocusChange(-1) to android.media.AudioManager@4335925com.devbrackets.android.playlistcore.components.audiofocus.DefaultAudioFocusProvider@6a46afa
D/EventLogger: timelineChanged [0.04, 0.00, window=0, periodCount=1, windowCount=1, reason=PREPARED
D/EventLogger:   period [?]
D/EventLogger:   window [?, false, false]
D/EventLogger: ]
D/EventLogger: seekProcessed [0.04, 0.00, window=0]
D/EventLogger: mediaPeriodCreated [0.04, 0.00, window=0, period=0]
D/EventLogger: loading [0.04, 0.00, window=0, period=0, true]
D/TrafficStats: tagSocket(410) with statsTag=0xffffffff, statsUid=-1
W/inviabilize.com: Accessing hidden method Lcom/android/org/conscrypt/ConscryptEngineSocket;->setUseSessionTickets(Z)V (max-target-q,core-platform-api, reflection, denied)
W/inviabilize.com: Accessing hidden method Lcom/android/org/conscrypt/OpenSSLSocketImpl;->setUseSessionTickets(Z)V (max-target-q,core-platform-api, reflection, denied)
W/inviabilize.com: Accessing hidden method Lcom/android/org/conscrypt/AbstractConscryptSocket;->setUseSessionTickets(Z)V (max-target-q, reflection, denied)
W/inviabilize.com: Accessing hidden method Lcom/android/org/conscrypt/ConscryptEngineSocket;->setHostname(Ljava/lang/String;)V (max-target-q,core-platform-api, reflection, denied)
W/inviabilize.com: Accessing hidden method Lcom/android/org/conscrypt/OpenSSLSocketImpl;->setHostname(Ljava/lang/String;)V (max-target-q,core-platform-api, reflection, denied)
W/inviabilize.com: Accessing hidden method Lcom/android/org/conscrypt/AbstractConscryptSocket;->setHostname(Ljava/lang/String;)V (max-target-q, reflection, denied)
W/inviabilize.com: Accessing hidden method Lcom/android/org/conscrypt/OpenSSLSocketImpl;->setAlpnProtocols([B)V (max-target-q,core-platform-api, reflection, denied)
W/inviabilize.com: Accessing hidden method Lcom/android/org/conscrypt/AbstractConscryptSocket;->setAlpnProtocols([B)V (max-target-q, reflection, denied)
W/inviabilize.com: Accessing hidden method Lcom/android/org/conscrypt/OpenSSLSocketImpl;->getAlpnSelectedProtocol()[B (max-target-q,core-platform-api, reflection, denied)
W/inviabilize.com: Accessing hidden method Lcom/android/org/conscrypt/AbstractConscryptSocket;->getAlpnSelectedProtocol()[B (max-target-q, reflection, denied)
D/EventLogger: timelineChanged [0.28, 0.00, window=0, period=0, periodCount=1, windowCount=1, reason=DYNAMIC
D/EventLogger:   period [900.39]
D/EventLogger:   window [900.39, true, false]
D/EventLogger: ]
D/EventLogger: decoderEnabled [0.28, 0.00, window=0, period=0, audio]
D/EventLogger: tracksChanged [0.28, 0.00, window=0, period=0, []]
D/EventLogger: mediaPeriodReadingStarted [0.29, 0.00, window=0, period=0]
D/EventLogger: downstreamFormatChanged [0.29, 0.00, window=0, period=0, id=null, mimeType=audio/mpeg, channels=2, sample_rate=44100]
D/CCodec: allocate(c2.android.mp3.decoder)
I/CCodec: setting up 'default' as default (vendor) store
I/CCodec: Created component [c2.android.mp3.decoder]
D/CCodecConfig: read media type: audio/mpeg
D/ReflectedParamUpdater: extent() != 1 for single value type: algo.buffers.max-count.values
D/ReflectedParamUpdater: extent() != 1 for single value type: output.subscribed-indices.values
D/ReflectedParamUpdater: extent() != 1 for single value type: input.buffers.allocator-ids.values
D/ReflectedParamUpdater: extent() != 1 for single value type: output.buffers.allocator-ids.values
D/ReflectedParamUpdater: extent() != 1 for single value type: algo.buffers.allocator-ids.values
D/ReflectedParamUpdater: extent() != 1 for single value type: output.buffers.pool-ids.values
D/ReflectedParamUpdater: extent() != 1 for single value type: algo.buffers.pool-ids.values
I/CCodecConfig: query failed after returning 7 values (BAD_INDEX)
D/CCodecConfig: c2 config diff is Dict {
      c2::u32 coded.bitrate.value = 64000
      c2::u32 input.buffers.max-size.value = 8192
      c2::u32 input.delay.value = 0
      string input.media-type.value = "audio/mpeg"
      string output.media-type.value = "audio/raw"
      c2::u32 raw.channel-count.value = 2
      c2::u32 raw.sample-rate.value = 44100
    }
D/CCodec: [c2.android.mp3.decoder] buffers are bound to CCodec for this session
D/CCodecConfig: no c2 equivalents for flags
D/CCodecConfig: config failed => CORRUPTED
W/Codec2Client: query -- param skipped: index = 1107298332.
D/CCodec: client requested max input size 4096, which is smaller than what component recommended (8192); overriding with component recommendation.
W/CCodec: This behavior is subject to change. It is recommended that app developers double check whether the requested max input size is in reasonable range.
D/CCodec: encoding statistics level = 0
D/CCodec: setup formats input: AMessage(what = 0x00000000) = {
      int32_t bitrate = 64000
      int32_t channel-count = 2
      int32_t max-input-size = 8192
      string mime = "audio/mpeg"
      int32_t sample-rate = 44100
    }
D/CCodec: setup formats output: AMessage(what = 0x00000000) = {
      int32_t channel-count = 2
      string mime = "audio/raw"
      int32_t sample-rate = 44100
      int32_t android._config-pcm-encoding = 2
    }
I/CCodecConfig: query failed after returning 7 values (BAD_INDEX)
W/Codec2Client: query -- param skipped: index = 1342179345.
W/Codec2Client: query -- param skipped: index = 2415921170.
D/CCodecBufferChannel: [c2.android.mp3.decoder#271] Created input block pool with allocatorID 16 => poolID 19 - OK (0)
D/BufferPoolAccessor2.0: bufferpool2 0xb400006e6c703f78 : 0(0 size) total buffers - 0(0 size) used buffers - 0/5 (recycle/alloc) - 7/108 (fetch/transfer)
D/BufferPoolAccessor2.0: Destruction - bufferpool2 0xb400006e6c703f78 cached: 0/0M, 0/0% in use; allocs: 5, 0% recycled; transfers: 108, 94% unfetched
D/BufferPoolAccessor2.0: bufferpool2 0xb400006e6c70da68 : 0(0 size) total buffers - 0(0 size) used buffers - 0/5 (recycle/alloc) - 4/876 (fetch/transfer)
D/BufferPoolAccessor2.0: Destruction - bufferpool2 0xb400006e6c70da68 cached: 0/0M, 0/0% in use; allocs: 5, 0% recycled; transfers: 876, 100% unfetched
I/CCodecBufferChannel: [c2.android.mp3.decoder#271] Created output block pool with allocatorID 16 => poolID 300 - OK
D/CCodecBufferChannel: [c2.android.mp3.decoder#271] Configured output block pool ids 300 => OK
D/EventLogger: decoderInitialized [0.30, 0.00, window=0, period=0, audio, c2.android.mp3.decoder]
D/EventLogger: decoderInputFormatChanged [0.30, 0.00, window=0, period=0, audio, id=null, mimeType=audio/mpeg, channels=2, sample_rate=44100]
D/EventLogger: audioSessionId [0.32, 0.00, window=0, period=0, 2873]
D/EventLogger: state [0.36, 0.00, window=0, period=0, false, READY]
D/EventLogger: seekStarted [0.36, 0.00, window=0, period=0]
D/EventLogger: positionDiscontinuity [0.37, 42.00, window=0, period=0, SEEK]
D/EventLogger: state [0.37, 42.00, window=0, period=0, true, READY]
D/CCodecBuffers: [c2.android.mp3.decoder#271:1D-Output.Impl[N]] Client returned a buffer it does not own according to our record: 0
D/CCodecBuffers: [c2.android.mp3.decoder#271:1D-Output.Impl[N]] Client returned a buffer it does not own according to our record: 1
D/CCodecBuffers: [c2.android.mp3.decoder#271:1D-Output.Impl[N]] Client returned a buffer it does not own according to our record: 2
I/CCodecConfig: query failed after returning 7 values (BAD_INDEX)
W/Codec2Client: query -- param skipped: index = 1342179345.
W/Codec2Client: query -- param skipped: index = 2415921170.
I/onPlaybackStateChanged: PLAYING, {"trackId":"276","isStream":true,"currentIndex":0,"status":"playing","currentPosition":0,"duration":0,"playbackPercent":0,"bufferPercent":0,"bufferStart":0,"bufferEnd":0}, org.dwbn.plugins.playlist.data.AudioTrack@e0cd5b3
V/PlaylistStatusCallback: statusChanged:{"action":"status","status":{"msgType":11,"trackId":"276","value":{"trackId":"276","isStream":true,"currentIndex":0,"status":"playing","currentPosition":0,"duration":0,"playbackPercent":0,"bufferPercent":0,"bufferStart":0,"bufferEnd":0}}}
V/Capacitor/PlaylistPlugin: Notifying listeners for event status
V/PlaylistStatusCallback: statusChanged:{"action":"status","status":{"msgType":30,"trackId":"276","value":{"trackId":"276","isStream":true,"currentIndex":0,"status":"playing","currentPosition":0,"duration":0,"playbackPercent":0,"bufferPercent":0,"bufferStart":0,"bufferEnd":0}}}
V/Capacitor/PlaylistPlugin: Notifying listeners for event status
D/TrafficStats: tagSocket(283) with statsTag=0xffffffff, statsUid=-1
I/PlaylistRmxAudioPlayer: onMediaPlaybackStarted: ==> CANIVETE: 42000,900393
D/EventLogger: state [0.40, 42.00, window=0, period=0, true, BUFFERING]
D/EventLogger: seekProcessed [0.40, 42.00, window=0, period=0]
W/inviabilize.com: Accessing hidden method Lcom/android/org/conscrypt/ConscryptEngineSocket;->setUseSessionTickets(Z)V (max-target-q,core-platform-api, reflection, denied)
W/inviabilize.com: Accessing hidden method Lcom/android/org/conscrypt/OpenSSLSocketImpl;->setUseSessionTickets(Z)V (max-target-q,core-platform-api, reflection, denied)
W/inviabilize.com: Accessing hidden method Lcom/android/org/conscrypt/AbstractConscryptSocket;->setUseSessionTickets(Z)V (max-target-q, reflection, denied)
W/inviabilize.com: Accessing hidden method Lcom/android/org/conscrypt/ConscryptEngineSocket;->setHostname(Ljava/lang/String;)V (max-target-q,core-platform-api, reflection, denied)
W/inviabilize.com: Accessing hidden method Lcom/android/org/conscrypt/OpenSSLSocketImpl;->setHostname(Ljava/lang/String;)V (max-target-q,core-platform-api, reflection, denied)
W/inviabilize.com: Accessing hidden method Lcom/android/org/conscrypt/AbstractConscryptSocket;->setHostname(Ljava/lang/String;)V (max-target-q, reflection, denied)
W/inviabilize.com: Accessing hidden method Lcom/android/org/conscrypt/OpenSSLSocketImpl;->setAlpnProtocols([B)V (max-target-q,core-platform-api, reflection, denied)
W/inviabilize.com: Accessing hidden method Lcom/android/org/conscrypt/AbstractConscryptSocket;->setAlpnProtocols([B)V (max-target-q, reflection, denied)
W/inviabilize.com: Accessing hidden method Lcom/android/org/conscrypt/OpenSSLSocketImpl;->getAlpnSelectedProtocol()[B (max-target-q,core-platform-api, reflection, denied)
W/inviabilize.com: Accessing hidden method Lcom/android/org/conscrypt/AbstractConscryptSocket;->getAlpnSelectedProtocol()[B (max-target-q, reflection, denied)
V/PlaylistStatusCallback: statusChanged:{"action":"status","status":{"msgType":40,"trackId":"276","value":{"trackId":"276","isStream":true,"currentIndex":0,"status":"playing","currentPosition":42,"duration":900.393,"playbackPercent":4.66462977833013,"bufferPercent":0,"bufferStart":0,"bufferEnd":0}}}
V/Capacitor/PlaylistPlugin: Notifying listeners for event status
V/PlaylistStatusCallback: statusChanged:{"action":"status","status":{"msgType":55,"trackId":"276","value":{"trackId":"276","isStream":true,"currentIndex":0,"status":"playing","currentPosition":42,"duration":900.393,"playbackPercent":4.66462977833013,"bufferPercent":4,"bufferStart":0,"bufferEnd":36.01571875}}}
V/Capacitor/PlaylistPlugin: Notifying listeners for event status
V/PlaylistStatusCallback: statusChanged:{"action":"status","status":{"msgType":25,"trackId":"276","value":{"trackId":"276","isStream":true,"currentIndex":0,"status":"playing","currentPosition":42,"duration":900.393,"playbackPercent":4.66462977833013,"bufferPercent":4,"bufferStart":0,"bufferEnd":36.01571875}}}
V/Capacitor/PlaylistPlugin: Notifying listeners for event status
V/PlaylistStatusCallback: statusChanged:{"action":"status","status":{"msgType":40,"trackId":"276","value":{"trackId":"276","isStream":true,"currentIndex":0,"status":"playing","currentPosition":42,"duration":900.393,"playbackPercent":4.66462977833013,"bufferPercent":4,"bufferStart":0,"bufferEnd":36.01571875}}}
V/Capacitor/PlaylistPlugin: Notifying listeners for event status
I/PlaylistAudioPlaylistHandler: onSeekComplete! 42000
I/onPlaybackStateChanged: PLAYING, {"trackId":"276","isStream":true,"currentIndex":0,"status":"playing","currentPosition":42,"duration":900.393,"playbackPercent":4.66462977833013,"bufferPercent":4,"bufferStart":0,"bufferEnd":36.01571875}, org.dwbn.plugins.playlist.data.AudioTrack@e0cd5b3
V/PlaylistStatusCallback: statusChanged:{"action":"status","status":{"msgType":30,"trackId":"276","value":{"trackId":"276","isStream":true,"currentIndex":0,"status":"playing","currentPosition":42,"duration":900.393,"playbackPercent":4.66462977833013,"bufferPercent":4,"bufferStart":0,"bufferEnd":36.01571875}}}
V/Capacitor/PlaylistPlugin: Notifying listeners for event status
D/EventLogger: state [1.79, 42.02, window=0, period=0, true, READY]
V/PlaylistStatusCallback: statusChanged:{"action":"status","status":{"msgType":40,"trackId":"276","value":{"trackId":"276","isStream":true,"currentIndex":0,"status":"playing","currentPosition":42.191,"duration":900.393,"playbackPercent":4.685842737560154,"bufferPercent":4,"bufferStart":0,"bufferEnd":36.01571875}}}
V/Capacitor/PlaylistPlugin: Notifying listeners for event status
V/PlaylistStatusCallback: statusChanged:{"action":"status","status":{"msgType":25,"trackId":"276","value":{"trackId":"276","isStream":true,"currentIndex":0,"status":"playing","currentPosition":42.564,"duration":900.393,"playbackPercent":4.727269092496276,"bufferPercent":7,"bufferStart":0,"bufferEnd":63.02751171875}}}
V/Capacitor/PlaylistPlugin: Notifying listeners for event status
V/PlaylistStatusCallback: statusChanged:{"action":"status","status":{"msgType":40,"trackId":"276","value":{"trackId":"276","isStream":true,"currentIndex":0,"status":"playing","currentPosition":42.564,"duration":900.393,"playbackPercent":4.727269092496276,"bufferPercent":7,"bufferStart":0,"bufferEnd":63.02751171875}}}
V/Capacitor/PlaylistPlugin: Notifying listeners for event status
D/EventLogger: loading [2.43, 42.62, window=0, period=0, false]
V/PlaylistStatusCallback: statusChanged:{"action":"status","status":{"msgType":40,"trackId":"276","value":{"trackId":"276","isStream":true,"currentIndex":0,"status":"playing","currentPosition":43.199,"duration":900.393,"playbackPercent":4.797793852240077,"bufferPercent":7,"bufferStart":0,"bufferEnd":63.02751171875}}}
V/Capacitor/PlaylistPlugin: Notifying listeners for event status
V/PlaylistStatusCallback: statusChanged:{"action":"status","status":{"msgType":25,"trackId":"276","value":{"trackId":"276","isStream":true,"currentIndex":0,"status":"playing","currentPosition":43.566,"duration":900.393,"playbackPercent":4.838553831493582,"bufferPercent":11,"bufferStart":0,"bufferEnd":99.0432265625}}}
V/Capacitor/PlaylistPlugin: Notifying listeners for event status
V/PlaylistStatusCallback: statusChanged:{"action":"status","status":{"msgType":40,"trackId":"276","value":{"trackId":"276","isStream":true,"currentIndex":0,"status":"playing","currentPosition":43.566,"duration":900.393,"playbackPercent":4.838553831493582,"bufferPercent":11,"bufferStart":0,"bufferEnd":99.0432265625}}}
V/Capacitor/PlaylistPlugin: Notifying listeners for event status
V/Capacitor/Plugin: To native (Capacitor plugin): callbackId: 7805879, pluginId: Playlist, methodName: playTrackByIndex
V/Capacitor: callback: 7805879, pluginId: Playlist, methodName: playTrackByIndex, methodData: {"index":1,"position":0}
I/PlaylistManager: setPlaybackSpeed completing with speed = 1.0
V/PlaylistStatusCallback: statusChanged:{"action":"status","status":{"msgType":60,"trackId":"276","value":{"trackId":"276","isStream":true,"currentIndex":1,"status":"playing","currentPosition":43.566,"duration":900.393,"playbackPercent":4.838553831493582,"bufferPercent":11,"bufferStart":0,"bufferEnd":99.0432265625}}}
V/Capacitor/PlaylistPlugin: Notifying listeners for event status
I/PlaylistPlugin: playTrackByIndex
V/PlaylistStatusCallback: statusChanged:{"action":"status","status":{"msgType":100,"trackId":"275","value":{"currentItem":{"trackId":"275","isStream":true,"assetUrl":"https:\/\/naoinviabilize.s3.filebase.com\/DERRAME_ac99275fb2.mp3?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=A5B3762EE398004D7BBB%2F20221008%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20221008T210229Z&X-Amz-Expires=900&X-Amz-Signature=7337c84f85da121207710166b2075efa8211cf25a167234f49951e5fde4333fe&X-Amz-SignedHeaders=host","albumArt":"https:\/\/naoinviabilize-img.s3.filebase.com\/Logo_Nova_Temp_Picole_0711c607d6.jpeg","artist":"Déia Freitas","album":"Picolé de Limão","title":"DERRAME"},"currentIndex":1,"isAtEnd":false,"isAtBeginning":false,"hasNext":true,"hasPrevious":true}}}
V/Capacitor/PlaylistPlugin: Notifying listeners for event status
D/EventLogger: state [3.39, 43.59, window=0, period=0, false, READY]
D/EventLogger: state [3.40, 43.59, window=0, period=0, false, IDLE]
D/EventLogger: seekStarted [3.40, 43.59, window=0, period=0]
E/ExoMediaPlayer: Unable to seek across windows, falling back to in-window seeking
D/EventLogger: positionDiscontinuity [3.40, 0.00, window=0, period=0, SEEK]
D/EventLogger: mediaPeriodReleased [3.40, 0.00, window=0, period=0]
D/CCodecBufferChannel: [c2.android.mp3.decoder#271] MediaCodec discarded an unknown buffer
D/CCodecBufferChannel: [c2.android.mp3.decoder#271] MediaCodec discarded an unknown buffer
D/CCodecBufferChannel: [c2.android.mp3.decoder#271] MediaCodec discarded an unknown buffer
D/CCodecBufferChannel: [c2.android.mp3.decoder#271] MediaCodec discarded an unknown buffer
E/ExoMediaPlayer: Unable to seek across windows, falling back to in-window seeking
D/EventLogger: positionDiscontinuity [3.40, 0.00, window=0, SEEK]
D/EventLogger: timelineChanged [3.40, 0.00, window=0, periodCount=0, windowCount=0, reason=RESET
D/EventLogger: ]
D/EventLogger: tracksChanged [3.40, 0.00, window=0, []]
I/hw-BpHwBinder: onLastStrongRef automatically unlinking death recipients
D/EventLogger: state [3.40, 0.00, window=0, false, BUFFERING]
D/TrafficStats: tagSocket(5) with statsTag=0xffffffff, statsUid=-1
I/onPlaybackStateChanged: PREPARING, {"trackId":"275","isStream":true,"currentIndex":1,"status":"loading","currentPosition":43.566,"duration":0,"playbackPercent":0,"bufferPercent":0,"bufferStart":0,"bufferEnd":0}, org.dwbn.plugins.playlist.data.AudioTrack@fcd66e8
V/PlaylistStatusCallback: statusChanged:{"action":"status","status":{"msgType":10,"trackId":"275","value":{"trackId":"275","isStream":true,"currentIndex":1,"status":"loading","currentPosition":43.566,"duration":0,"playbackPercent":0,"bufferPercent":0,"bufferStart":0,"bufferEnd":0}}}
V/Capacitor/PlaylistPlugin: Notifying listeners for event status
D/EventLogger: decoderDisabled [3.43, 0.00, window=0, period=0, audio]
D/EventLogger: timelineChanged [3.44, 0.00, window=0, periodCount=1, windowCount=1, reason=PREPARED
D/EventLogger:   period [?]
D/EventLogger:   window [?, false, false]
D/EventLogger: ]
D/EventLogger: seekProcessed [3.44, 0.00, window=0]
V/Capacitor/Plugin: To native (Capacitor plugin): callbackId: 7805880, pluginId: Playlist, methodName: play
V/Capacitor: callback: 7805880, pluginId: Playlist, methodName: play, methodData: {}
D/EventLogger: mediaPeriodCreated [3.44, 0.00, window=0, period=0]
D/EventLogger: state [3.44, 0.00, window=0, period=0, true, BUFFERING]
D/EventLogger: loading [3.44, 0.00, window=0, period=0, true]
I/onPlaybackStateChanged: PLAYING, {"trackId":"275","isStream":true,"currentIndex":1,"status":"playing","currentPosition":43.566,"duration":0,"playbackPercent":0,"bufferPercent":0,"bufferStart":0,"bufferEnd":0}, org.dwbn.plugins.playlist.data.AudioTrack@fcd66e8
V/PlaylistStatusCallback: statusChanged:{"action":"status","status":{"msgType":11,"trackId":"275","value":{"trackId":"275","isStream":true,"currentIndex":1,"status":"playing","currentPosition":43.566,"duration":0,"playbackPercent":0,"bufferPercent":0,"bufferStart":0,"bufferEnd":0}}}
V/Capacitor/PlaylistPlugin: Notifying listeners for event status
V/PlaylistStatusCallback: statusChanged:{"action":"status","status":{"msgType":30,"trackId":"275","value":{"trackId":"275","isStream":true,"currentIndex":1,"status":"playing","currentPosition":43.566,"duration":0,"playbackPercent":0,"bufferPercent":0,"bufferStart":0,"bufferEnd":0}}}
V/Capacitor/PlaylistPlugin: Notifying listeners for event status
W/inviabilize.com: Accessing hidden method Lcom/android/org/conscrypt/ConscryptEngineSocket;->setUseSessionTickets(Z)V (max-target-q,core-platform-api, reflection, denied)
W/inviabilize.com: Accessing hidden method Lcom/android/org/conscrypt/OpenSSLSocketImpl;->setUseSessionTickets(Z)V (max-target-q,core-platform-api, reflection, denied)
W/inviabilize.com: Accessing hidden method Lcom/android/org/conscrypt/AbstractConscryptSocket;->setUseSessionTickets(Z)V (max-target-q, reflection, denied)
W/inviabilize.com: Accessing hidden method Lcom/android/org/conscrypt/ConscryptEngineSocket;->setHostname(Ljava/lang/String;)V (max-target-q,core-platform-api, reflection, denied)
W/inviabilize.com: Accessing hidden method Lcom/android/org/conscrypt/OpenSSLSocketImpl;->setHostname(Ljava/lang/String;)V (max-target-q,core-platform-api, reflection, denied)
W/inviabilize.com: Accessing hidden method Lcom/android/org/conscrypt/AbstractConscryptSocket;->setHostname(Ljava/lang/String;)V (max-target-q, reflection, denied)
W/inviabilize.com: Accessing hidden method Lcom/android/org/conscrypt/OpenSSLSocketImpl;->setAlpnProtocols([B)V (max-target-q,core-platform-api, reflection, denied)
W/inviabilize.com: Accessing hidden method Lcom/android/org/conscrypt/AbstractConscryptSocket;->setAlpnProtocols([B)V (max-target-q, reflection, denied)
I/PlaylistPlugin: play
W/inviabilize.com: Accessing hidden method Lcom/android/org/conscrypt/OpenSSLSocketImpl;->getAlpnSelectedProtocol()[B (max-target-q,core-platform-api, reflection, denied)
W/inviabilize.com: Accessing hidden method Lcom/android/org/conscrypt/AbstractConscryptSocket;->getAlpnSelectedProtocol()[B (max-target-q, reflection, denied)
D/EventLogger: timelineChanged [3.64, 0.00, window=0, period=0, periodCount=1, windowCount=1, reason=DYNAMIC
D/EventLogger:   period [694.38]
D/EventLogger:   window [694.38, true, false]
D/EventLogger: ]
D/EventLogger: decoderEnabled [3.64, 0.00, window=0, period=0, audio]
D/EventLogger: tracksChanged [3.64, 0.00, window=0, period=0, []]
D/EventLogger: mediaPeriodReadingStarted [3.65, 0.00, window=0, period=0]
D/EventLogger: downstreamFormatChanged [3.65, 0.00, window=0, period=0, id=null, mimeType=audio/mpeg, channels=2, sample_rate=44100]
D/CCodec: allocate(c2.android.mp3.decoder)
I/CCodec: setting up 'default' as default (vendor) store
I/CCodec: Created component [c2.android.mp3.decoder]
D/CCodecConfig: read media type: audio/mpeg
D/ReflectedParamUpdater: extent() != 1 for single value type: algo.buffers.max-count.values
D/ReflectedParamUpdater: extent() != 1 for single value type: output.subscribed-indices.values
D/ReflectedParamUpdater: extent() != 1 for single value type: input.buffers.allocator-ids.values
D/ReflectedParamUpdater: extent() != 1 for single value type: output.buffers.allocator-ids.values
D/ReflectedParamUpdater: extent() != 1 for single value type: algo.buffers.allocator-ids.values
D/ReflectedParamUpdater: extent() != 1 for single value type: output.buffers.pool-ids.values
D/ReflectedParamUpdater: extent() != 1 for single value type: algo.buffers.pool-ids.values
I/CCodecConfig: query failed after returning 7 values (BAD_INDEX)
D/CCodecConfig: c2 config diff is Dict {
      c2::u32 coded.bitrate.value = 64000
      c2::u32 input.buffers.max-size.value = 8192
      c2::u32 input.delay.value = 0
      string input.media-type.value = "audio/mpeg"
      string output.media-type.value = "audio/raw"
      c2::u32 raw.channel-count.value = 2
      c2::u32 raw.sample-rate.value = 44100
    }
D/CCodec: [c2.android.mp3.decoder] buffers are bound to CCodec for this session
D/CCodecConfig: no c2 equivalents for flags
D/CCodecConfig: config failed => CORRUPTED
W/Codec2Client: query -- param skipped: index = 1107298332.
D/CCodec: client requested max input size 4096, which is smaller than what component recommended (8192); overriding with component recommendation.
W/CCodec: This behavior is subject to change. It is recommended that app developers double check whether the requested max input size is in reasonable range.
D/CCodec: encoding statistics level = 0
D/CCodec: setup formats input: AMessage(what = 0x00000000) = {
      int32_t bitrate = 64000
      int32_t channel-count = 2
      int32_t max-input-size = 8192
      string mime = "audio/mpeg"
      int32_t sample-rate = 44100
    }
D/CCodec: setup formats output: AMessage(what = 0x00000000) = {
      int32_t channel-count = 2
      string mime = "audio/raw"
      int32_t sample-rate = 44100
      int32_t android._config-pcm-encoding = 2
    }
I/CCodecConfig: query failed after returning 7 values (BAD_INDEX)
W/Codec2Client: query -- param skipped: index = 1342179345.
W/Codec2Client: query -- param skipped: index = 2415921170.
D/CCodecBufferChannel: [c2.android.mp3.decoder#671] Created input block pool with allocatorID 16 => poolID 20 - OK (0)
I/CCodecBufferChannel: [c2.android.mp3.decoder#671] Created output block pool with allocatorID 16 => poolID 301 - OK
D/CCodecBufferChannel: [c2.android.mp3.decoder#671] Configured output block pool ids 301 => OK
D/EventLogger: decoderInitialized [3.66, 0.00, window=0, period=0, audio, c2.android.mp3.decoder]
D/EventLogger: decoderInputFormatChanged [3.66, 0.00, window=0, period=0, audio, id=null, mimeType=audio/mpeg, channels=2, sample_rate=44100]
D/EventLogger: audioSessionId [3.68, 0.00, window=0, period=0, 2881]
D/EventLogger: state [3.69, 0.00, window=0, period=0, true, READY]
I/onPlaybackStateChanged: PAUSED, {"trackId":"275","isStream":true,"currentIndex":1,"status":"paused","currentPosition":43.566,"duration":0,"playbackPercent":0,"bufferPercent":0,"bufferStart":0,"bufferEnd":0}, org.dwbn.plugins.playlist.data.AudioTrack@fcd66e8
V/PlaylistStatusCallback: statusChanged:{"action":"status","status":{"msgType":35,"trackId":"275","value":{"trackId":"275","isStream":true,"currentIndex":1,"status":"paused","currentPosition":43.566,"duration":0,"playbackPercent":0,"bufferPercent":0,"bufferStart":0,"bufferEnd":0}}}
V/Capacitor/PlaylistPlugin: Notifying listeners for event status
D/AudioTrack: getTimestamp_l(462): device stall time corrected using current time 119894668541653
D/EventLogger: loading [3.88, 0.04, window=0, period=0, false]
V/PlaylistStatusCallback: statusChanged:{"action":"status","status":{"msgType":55,"trackId":"275","value":{"trackId":"275","isStream":true,"currentIndex":1,"status":"paused","currentPosition":0.532,"duration":694.381,"playbackPercent":0.07661499954635856,"bufferPercent":9,"bufferStart":0,"bufferEnd":62.49429296875}}}
V/Capacitor/PlaylistPlugin: Notifying listeners for event status
V/PlaylistStatusCallback: statusChanged:{"action":"status","status":{"msgType":25,"trackId":"275","value":{"trackId":"275","isStream":true,"currentIndex":1,"status":"paused","currentPosition":0.532,"duration":694.381,"playbackPercent":0.07661499954635856,"bufferPercent":9,"bufferStart":0,"bufferEnd":62.49429296875}}}
V/Capacitor/PlaylistPlugin: Notifying listeners for event status
D/BufferPoolAccessor2.0: evictor expired: 2, evicted: 0
D/EventLogger: state [7.38, 3.54, window=0, period=0, false, READY]
I/onPlaybackStateChanged: PAUSED, {"trackId":"275","isStream":true,"currentIndex":1,"status":"paused","currentPosition":3.536,"duration":694.381,"playbackPercent":0.5092305233006088,"bufferPercent":9,"bufferStart":0,"bufferEnd":62.49429296875}, org.dwbn.plugins.playlist.data.AudioTrack@fcd66e8
V/PlaylistStatusCallback: statusChanged:{"action":"status","status":{"msgType":35,"trackId":"275","value":{"trackId":"275","isStream":true,"currentIndex":1,"status":"paused","currentPosition":3.536,"duration":694.381,"playbackPercent":0.5092305233006088,"bufferPercent":9,"bufferStart":0,"bufferEnd":62.49429296875}}}
V/Capacitor/PlaylistPlugin: Notifying listeners for event status
D/BufferPoolAccessor2.0: bufferpool2 0xb400006e6c716c18 : 0(0 size) total buffers - 0(0 size) used buffers - 0/5 (recycle/alloc) - 7/206 (fetch/transfer)
D/BufferPoolAccessor2.0: bufferpool2 0xb400006e6c701828 : 5(40960 size) total buffers - 4(32768 size) used buffers - 0/5 (recycle/alloc) - 4/318 (fetch/transfer)
D/BufferPoolAccessor2.0: evictor expired: 2, evicted: 2

[feature] move item in playlist

How can we move an item in the playlist without disrupting the playback? Playlist re-ordering is a a pretty core feature for most music players.

If moved from after currentTrack to before currentTrack then the index of currentTrack will change (+1)

If moved from before currentTrack to after currentTrack then the index of currentTrack will change (-1).

If moved from before to before no change to index of currentTrack

If moved from after to after no change to index of currentTrack

Can the currentTrack be moved in the playlist while status is playing?

Listening for status changes

Looking for advice on best practices with this plugin to detect status changes. I've created the following Angular code to detect and react to changes in the player status...any advice. Is there a better / more appropriate way to this? I'm using rxjs pairwise to compare status values emitted from the observable subscription, and then when a value exists and changes, action can be taken.

`
// listening for status changes

ngAfterViewInit() {

  this.status$.pipe(
    pairwise(),
    map(values => ({
      prev: values[0],
      current: values[1]
    })))

  .subscribe((pairwise: any) => {

   // create a listener to determine when currentTrack has changed

    this.currentTrackId = pairwise.current.trackId;
    this.nextTrackId = pairwise.prev.trackId;

    if (this.nextTrackId != this.currentTrackId) { // if there is a current track, then set it to played status
      console.log("setting track played status to 'played' = ", this.currentTrackId)
      this.database.setListenProfileTrackStatus(this.user.uid, this.user.selectedListenProfile, this.currentTrackId, "played")
    } else {
      console.log("track id did not change with last emit")
    }
  }  }

`

Fatal error whenever I try to add an Item

I installed the plugin for ios and doing this call

Capacitor.Plugins.Playlist.addItem( { trackId: 1, assetUrl: "my-asset.mp3", albumArt: "my-album-art.jpg" } )

or this one

Capacitor.Plugins.Playlist.addItem( { item: { trackId: 1, assetUrl: "my-asset.mp3", albumArt: "my-album-art.jpg" } })

raises a fatal error on Xcode in the file CapacitorPluginPlaylist/Plugin.swift line 43

@objc func addItem(_ call: CAPPluginCall) {
        let trackInfo = call.getObject("item")
        
        let track = AudioTrack.initWithDictionary(trackInfo)
        audioPlayerImpl.addItem(track!) - Thread 12: Fatal error: Unexpectedly found nil while unwrapping an Optional value
        
        call.resolve();
    }

This is my package.json dependencies

  "dependencies": {
    "@capacitor-community/facebook-login": "^5.0.0",
    "@capacitor-firebase/analytics": "5.2.0",
    "@capacitor-firebase/authentication": "5.2.0",
    "@capacitor-firebase/messaging": "5.2.0",
    "@capacitor-firebase/remote-config": "^5.2.0",
    "@capacitor/android": "^5.0.0",
    "@capacitor/app": "^5.0.0",
    "@capacitor/assets": "^2.0.4",
    "@capacitor/camera": "^5.0.0",
    "@capacitor/clipboard": "^5.0.0",
    "@capacitor/core": "^5.0.0",
    "@capacitor/device": "^5.0.0",
    "@capacitor/ios": "^5.0.0",
    "@capacitor/push-notifications": "^5.0.0",
    "@capacitor/share": "^5.0.0",
    "@capacitor/splash-screen": "^5.0.0",
    "@capawesome/capacitor-badge": "^5.0.0",
    "@revenuecat/purchases-capacitor": "^7.0.0",
    "capacitor-native-settings": "^5.0.0",
    "capacitor-plugin-app-tracking-transparency": "^2.0.4",
    "capacitor-plugin-playlist": "^0.4.0",
    "capacitor-rate-app": "^4.0.3",
    "firebase": "^9.18.0",
    "sharp": "^0.32.0"
  },

Ionic 5 + Capacitor - crashes app on register of class

What I've done:

  • Added the plugin with npm i ...
  • Synced my Capacitor plugins with npx cap sync.
  • Added the required ext { ... } bits to variables.gradle.
  • Tried to register the plugin in MainActivity.java as directed.

With the plugin register line left in, like so:

    // Initializes the Bridge
    this.init(savedInstanceState, new ArrayList<Class<? extends Plugin>>() {{
      // Additional plugins you've installed go here
      add(PlaylistPlugin.class);
    }});

I get a crash on load with:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ripper.aomtest/com.ripper.aomtest.MainActivity}: java.lang.ClassCastException: android.app.Application cannot be cast to org.dwbn.plugins.playlist.App

status event RMXSTATUS_PLAYLIST_COMPLETED is not emitted

Expected Behaviour

When the last track in playlist has completed playing the RMXSTATUS_PLAYLIST_COMPLETED = 105 status should be emitted.
(note: there is a similar open issue for the cordova-plugin-playlist here: Rolamix/cordova-plugin-playlist#22)

Actual Behaviour

RMXSTATUS_PLAYLIST_COMPLETED status is not emitted.

Steps to Reproduce

I've only tested this on iOS. A playlist is passed to the player. The playlist plays each track consecutively, as expected. At the end of the last track the playlist completed status (105) should be reported but it is not. I am seeing other events fire, for example RMXSTATUS_TRACK_CHANGED = 100.

Platform and Version (eg. Android 5.0 or iOS 9.2.1)

iPhone 7 Plus, iOS 15.5

Sample code:


this.audioPlayer.on('status', (data: any) => {
      // run in zone, so e.g. change detection can act, since the event is triggered outside
      return this.zone.run(async () => {

        let code = data.type;

        switch (code) {
          case 5:
            console.log("RMXSTATUS_ERROR = 5");
            break;
          case 100:
            // note: this event maybe fired more than once for a given track
            console.log("RMXSTATUS_TRACK_CHANGED = 100");
            console.log("100: track changed values = ", data);
            break;
          case 105:
            console.log("RMXSTATUS_PLAYLIST_COMPLETED = 105")
            console.log("105: playlist complete, values = ", data.value)
            break;
...

Ionic Info
Ionic:

Ionic CLI : 6.20.1 (/usr/local/lib/node_modules/@ionic/cli)
Ionic Framework : @ionic/angular 6.1.2
@angular-devkit/build-angular : 13.2.6
@angular-devkit/schematics : 13.3.1
@angular/cli : 13.2.6
@ionic/angular-toolkit : 6.1.0

Capacitor:

Capacitor CLI : 3.5.1
@capacitor/android : 3.4.3
@capacitor/core : 3.5.1
@capacitor/ios : 3.5.1

Utility:

cordova-res : 0.15.4
native-run (update available: 1.6.0) : 1.5.0

System:

NodeJS : v17.8.0 (/usr/local/bin/node)
npm : 8.9.0
OS : macOS Monterey

STATUS_SKIP_FORWARD event is not being reported in iOS

My tests in iOS are finding that the STATUS_SKIP_FORWARD status event is not being fired when playNext function is called in RmxAudioPlayer.swift (approx. line 316)

It appears that the bool var isCommand is false even though true is passed to the playNext function. When isCommand is false, the line:

onStatus(.rmx_STATUS_SKIP_FORWARD, trackId: playerItem?.trackId, param: param)

will not be called.

are there any plans on supporting capacitor v4?

I'm really struggling with my app. I'm unable to prevent the audio from stopping when the screen goes off and i've been looking for an answer for a few days now. Your plugin is the only thing that seems to work (as far as i've investigated) but since it uses capacitor v3 I can't really make use of it. So now I wonder if are there any plans on upgrading it to support capacitor v4. Thanks in advance!

Options empty, resulting in no drawable icon?

I was stuck on the issue, that android always crashed on loading a playlist, because there was not small icon set:

AndroidRuntime: java.lang.RuntimeException: Unable to start service org.dwbn.plugins.playlist.service.MediaService@e78b87b with Intent { act=com.devbrackets.android.playlistcore.start_service cmp=**.**.**/org.dwbn.plugins.playlist.service.MediaService (has extras) }: java.lang.IllegalArgumentException: Invalid notification (no valid small icon): Notification(channel=PlaylistCoreMediaNotificationChannel shortcut=null contentView=null vibrate=null sound=null defaults=0x0 flags=0x10 color=0x00000000 category=transport actions=3 vis=PUBLIC)

I dont know much about the icon system in android / capacitor / cordova, but it came down to these lines:
(MediaImageProvider.ts:52 and following)

private val mipmapIcon: Int
  get() {
    Log.i("options", options.toString())
      // return R.mipmap.icon; // this comes from cordova itself.
      if (notificationIconId <= 0) {
          notificationIconId = fakeR.getId("drawable", options?.icon)
      }
      return notificationIconId
  }

When I log options at this point, its always an empty object, even though I set the options before like this as documented:

player.setOptions({
  verbose: true,
  options: {
    icon: 'ic_notification'
  }
})

Has anybody got this to work on android and can share their code?

Best regards

Adding Android platform peer dependency errors

I'm running:

Capacitor CLI : 4.2.0
@capacitor/android : 4.2.0
@capacitor/core : 4.2.0
@capacitor/ios : 4.2.0

and trying to install the Capacitor Andorid platform with command: ionic capacitor add android

and getting this response with errors:

npm ERR! code ERESOLVE
npm ERR! ERESOLVE could not resolve
npm ERR! 
npm ERR! While resolving: [email protected]
npm ERR! Found: @capacitor/[email protected]
npm ERR! node_modules/@capacitor/core
npm ERR!   peer @capacitor/core@"^4.0.0" from @capacitor/[email protected]
npm ERR!   node_modules/@capacitor/app
npm ERR!     @capacitor/app@"^4.0.1" from the root project
npm ERR!   peer @capacitor/core@"^4.0.0" from @capacitor/[email protected]
npm ERR!   node_modules/@capacitor/filesystem
npm ERR!     @capacitor/filesystem@"4.1.1" from the root project
npm ERR!   6 more (@capacitor/ios, @capacitor/network, ...)
npm ERR! 
npm ERR! Could not resolve dependency:
npm ERR! peer @capacitor/core@"^3.0.0" from [email protected]
npm ERR! node_modules/capacitor-plugin-playlist
npm ERR!   capacitor-plugin-playlist@"^0.2.4" from the root project
npm ERR! 
npm ERR! Conflicting peer dependency: @capacitor/[email protected]
npm ERR! node_modules/@capacitor/core
npm ERR!   peer @capacitor/core@"^3.0.0" from [email protected]
npm ERR!   node_modules/capacitor-plugin-playlist
npm ERR!     capacitor-plugin-playlist@"^0.2.4" from the root project
npm ERR! 
npm ERR! Fix the upstream dependency conflict, or retry
npm ERR! this command with --force, or --legacy-peer-deps
npm ERR! to accept an incorrect (and potentially broken) dependency resolution.
npm ERR! 
npm ERR! See /home/xxxx/.npm/eresolve-report.txt for a full report.

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/xxxx/.npm/_logs/2023-04-16T21_10_19_190Z-debug-0.log
[ERROR] An error occurred while running subprocess npm.
        
        npm i -E @capacitor/[email protected] exited with exit code 1.

What can I do to work around these errors ?

Android: seekTo

Unfortunately I haven't found the reason yet, but if you'll try to add seconds with 'seekTo' method as float - it won't work. The issue is only reproduced:

  • Android
  • state: isPlaying
  • position is not integer

🟢 Works: audioPlayer.seekTo(currentPosition + 15)
🔴 Failed: audioPlayer.seekTo(currentPosition + 15.1)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.