phiamo / capacitor-plugin-playlist Goto Github PK
View Code? Open in Web Editor NEWA capacitor migration of cordova-plugin-playlist
A capacitor migration of cordova-plugin-playlist
To get round this, I have set the relevant method signatures to take either audioTrack: any
or currentItem?: any
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:
What I'm observing:
These values need to be initialised appropriately, but so far I'm unsure of where this would be done, perhaps in func setPlaylistItems
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.
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.
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?
@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:
Kotlin version
ext.kotlin_version = '1.6.0'
PlaylistCore version
implementation 'com.devbrackets.android:playlistcore:2.1.0'
I've already tested at my project - works fine
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!
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.
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()
}
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.
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! :-)
It's unclear from the README if this works for playing a list of tracks in the background or not.
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.
I do not see anything in the docs about how to add the songs/playlist.
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?
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
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.
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.
@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.
play()
and I see "Here 1", butif
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")
}
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.
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
I just added your plugin to awesome-capacitor thanks !
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
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
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>
Since this commit, our app fails to build :/
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
@phiamo Edit: Please when you have a moment, could you reply re: the below? It'd be much appreciated. Thank you.
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;
}
}
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?
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?
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
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
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?
is this compatible to be installed in capacitor 3?
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")
}
} }
`
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"
},
What I've done:
npm i ...
npx cap sync
.ext { ... }
bits to variables.gradle.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
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
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.
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!
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
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 ?
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:
🟢 Works: audioPlayer.seekTo(currentPosition + 15)
🔴 Failed: audioPlayer.seekTo(currentPosition + 15.1)
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.