BeautifulPilgrim / MauiAudio

MIT License
23 stars 5 forks source link

Play from local storage Android #1

Closed amellini closed 2 years ago

amellini commented 2 years ago

Hi, thank you for your job I'm using it in a Maui app, in Windows and Android.

Play remote files it works but with this errors in Debug Console:

[DOTNET] Java.Lang.RuntimeException: Can't create handler inside thread Thread[Thread-14,10,main] that has not called Looper.prepare()
[DOTNET]    at Java.Interop.JniEnvironment.InstanceMethods.CallVoidMethod(JniObjectReference instance, JniMethodInfo method, JniArgumentValue* args) in /Users/runner/work/1/s/xamarin-android/external/Java.Interop/src/Java.Interop/Java.Interop/JniEnvironment.g.cs:line 11884
[DOTNET]    at Java.Interop.JniPeerMembers.JniInstanceMethods.InvokeAbstractVoidMethod(String encodedMember, IJavaPeerable self, JniArgumentValue* parameters) in /Users/runner/work/1/s/xamarin-android/external/Java.Interop/src/Java.Interop/Java.Interop/JniPeerMembers.JniInstanceMethods_Invoke.cs:line 17
[DOTNET]    at Android.Media.Session.MediaSession.SetCallback(Callback callback) in /Users/runner/work/1/s/xamarin-android/src/Mono.Android/obj/Release/net6.0/android-31/mcw/Android.Media.Session.MediaSession.cs:line 1159
[DOTNET]    at MauiAudio.Platforms.Android.MediaPlayerService.InitMediaSession()
[DOTNET]   --- End of managed Java.Lang.RuntimeException stack trace ---
[DOTNET] java.lang.RuntimeException: Can't create handler inside thread Thread[Thread-14,10,main] that has not called Looper.prepare()
[DOTNET]    at android.os.Handler.<init>(Handler.java:207)
[DOTNET]    at android.os.Handler.<init>(Handler.java:119)
[DOTNET]    at android.media.session.MediaSession.setCallback(MediaSession.java:236)
[DOTNET]    at android.media.session.MediaSession.setCallback(MediaSession.java:212)
[DOTNET] 
[DOTNET]   --- End of managed Java.Lang.RuntimeException stack trace ---
[DOTNET] java.lang.RuntimeException: Can't create handler inside thread Thread[Thread-14,10,main] that has not called Looper.prepare()
[DOTNET]    at android.os.Handler.<init>(Handler.java:207)
[DOTNET]    at android.os.Handler.<init>(Handler.java:119)
[DOTNET]    at android.media.session.MediaSession.setCallback(MediaSession.java:236)
[DOTNET]    at android.media.session.MediaSession.setCallback(MediaSession.java:212)
[MediaPlayer] Couldn't open https://rr2---sn-45nufxc-4age.googlevideo.com/...
[MediaPlayer] java.io.FileNotFoundException: No content provider: https://rr2---sn-45nufxc-4age.googlevideo.com/videoplayback?expire=1663441516&ei=DMYlY5fmJb2F6dsPsaWoeA&ip=93.37.161.72&id=o-AELzFu7txs9PvzLZvD-PWHtEGxP3I_KPJPcvWaItWu6h&itag=251&source=youtube&requiressl=yes&mh=Q7&mm=31%2C29&mn=sn-45nufxc-4age%2Csn-hpa7zn76&ms=au%2Crdu&mv=m&mvi=2&pl=22&gcr=it&initcwndbps=1583750&vprv=1&svpuc=1&mime=audio%2Fwebm&gir=yes&clen=3918921&dur=233.881&lmt=1649206934614938&mt=1663419429&fvip=4&keepalive=yes&fexp=24001373%2C24007246&c=ANDROID&rbqsm=fr&txp=4532434&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cgcr%2Cvprv%2Csvpuc%2Cmime%2Cgir%2Cclen%2Cdur%2Clmt&sig=AOq0QJ8wRQIhAM-FdO8lSjPUidiN9EEFKGDHlb5BuYXr4rAsbPQ5udqmAiAM75zehAI7RrWZR6JSMGKX4TE749apasZ1jTFxxmtlxw%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AG3C_xAwRgIhAPGg5rzKzA5aA5GflavYckZIp6Bg9D6bfJCGZycRhqnaAiEAhri9NO3m873MbGTa6XQPRBkRoDUbbRIwoBoZyhHV_E8%3D
[MediaPlayer]   at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:1673)
[MediaPlayer]   at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:1503)
[MediaPlayer]   at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:1420)
[MediaPlayer]   at android.media.MediaPlayer.attemptDataSource(MediaPlayer.java:1101)
[MediaPlayer]   at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1073)
[MediaPlayer]   at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1001)
[MediaHTTPService] MediaHTTPService(android.media.MediaHTTPService@40bedc3): Cookies: null
[MediaHTTPService] MediaHTTPService(android.media.MediaHTTPService@52de979): Cookies: null
[MediaHTTPService] makeHTTPConnection: CookieManager created: java.net.CookieManager@e4576be
[MediaHTTPService] makeHTTPConnection(android.media.MediaHTTPService@52de979): cookieHandler: java.net.CookieManager@e4576be Cookies: null
[mpanyname.boxi] Long monitor contention with owner Binder:5803_4 (5867) at int com.android.org.conscrypt.NativeCrypto.SSL_read(long, com.android.org.conscrypt.NativeSsl, java.io.FileDescriptor, com.android.org.conscrypt.NativeCrypto$SSLHandshakeCallbacks, byte[], int, int, int)(NativeCrypto.java:-2) waiters=0 in long android.media.MediaHTTPConnection.getSize() for 478ms
[mpanyname.boxi] Long monitor contention with owner Binder:5803_4 (5867) at int android.media.MediaHTTPConnection.readAt(long, int)(MediaHTTPConnection.java:-1) waiters=0 in long android.media.MediaHTTPConnection.getSize() for 468ms
[MediaHTTPService] makeHTTPConnection: CookieHandler (java.net.CookieManager@e4576be) exists.
[MediaHTTPService] makeHTTPConnection(android.media.MediaHTTPService@40bedc3): cookieHandler: java.net.CookieManager@e4576be Cookies: null
[MediaMetadataRetrieverJNI] getEmbeddedPicture: Call to getEmbeddedPicture failed.
[MediaPlayerNative] Attempt to perform seekTo in wrong state: mPlayer=0x79779238ff80, mCurrentState=4
[MediaPlayerNative] error (-38, 0)
[MediaPlayer] Error (-38,0)
[MediaPlayer] Couldn't open https://rr2---sn-45nufxc-4age.googlevideo.com/...
[MediaPlayer] java.io.FileNotFoundException: No content provider: https://rr2---sn-45nufxc-4age.googlevideo.com/videoplayback?expire=1663441516&ei=DMYlY5fmJb2F6dsPsaWoeA&ip=93.37.161.72&id=o-AELzFu7txs9PvzLZvD-PWHtEGxP3I_KPJPcvWaItWu6h&itag=251&source=youtube&requiressl=yes&mh=Q7&mm=31%2C29&mn=sn-45nufxc-4age%2Csn-hpa7zn76&ms=au%2Crdu&mv=m&mvi=2&pl=22&gcr=it&initcwndbps=1583750&vprv=1&svpuc=1&mime=audio%2Fwebm&gir=yes&clen=3918921&dur=233.881&lmt=1649206934614938&mt=1663419429&fvip=4&keepalive=yes&fexp=24001373%2C24007246&c=ANDROID&rbqsm=fr&txp=4532434&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cgcr%2Cvprv%2Csvpuc%2Cmime%2Cgir%2Cclen%2Cdur%2Clmt&sig=AOq0QJ8wRQIhAM-FdO8lSjPUidiN9EEFKGDHlb5BuYXr4rAsbPQ5udqmAiAM75zehAI7RrWZR6JSMGKX4TE749apasZ1jTFxxmtlxw%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AG3C_xAwRgIhAPGg5rzKzA5aA5GflavYckZIp6Bg9D6bfJCGZycRhqnaAiEAhri9NO3m873MbGTa6XQPRBkRoDUbbRIwoBoZyhHV_E8%3D
[MediaPlayer]   at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:1673)
[MediaPlayer]   at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:1503)
[MediaPlayer]   at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:1420)
[MediaPlayer]   at android.media.MediaPlayer.attemptDataSource(MediaPlayer.java:1101)
[MediaPlayer]   at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1073)
[MediaPlayer]   at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1001)
[MediaHTTPService] MediaHTTPService(android.media.MediaHTTPService@b0cd542): Cookies: null
[MediaHTTPService] MediaHTTPService(android.media.MediaHTTPService@b97038e): Cookies: null
[MediaHTTPService] makeHTTPConnection: CookieHandler (java.net.CookieManager@e4576be) exists.
[MediaHTTPService] makeHTTPConnection(android.media.MediaHTTPService@b97038e): cookieHandler: java.net.CookieManager@e4576be Cookies: null
[mpanyname.boxi] Long monitor contention with owner Binder:5803_2 (5822) at int com.android.org.conscrypt.NativeCrypto.SSL_read(long, com.android.org.conscrypt.NativeSsl, java.io.FileDescriptor, com.android.org.conscrypt.NativeCrypto$SSLHandshakeCallbacks, byte[], int, int, int)(NativeCrypto.java:-2) waiters=0 in long android.media.MediaHTTPConnection.getSize() for 481ms
[MediaHTTPService] makeHTTPConnection: CookieHandler (java.net.CookieManager@e4576be) exists.
[MediaHTTPService] makeHTTPConnection(android.media.MediaHTTPService@b0cd542): cookieHandler: java.net.CookieManager@e4576be Cookies: null
[MediaMetadataRetrieverJNI] getEmbeddedPicture: Call to getEmbeddedPicture failed.
[MediaPlayerNative] Attempt to perform seekTo in wrong state: mPlayer=0x797792397f40, mCurrentState=4
[MediaPlayerNative] error (-38, 0)
[MediaPlayer] Error (-38,0)

After two seconds stream start (webm file), in Windows the sane file saved locally works as expected. Under Android the local file cannot be played and I get this error in Debug Console :

[MediaPlayer] Couldn't open /data/user/0/com.companyname.boxie/files/Incubus/fgT9zGkiLig.webm
[MediaPlayer] java.io.FileNotFoundException: No content provider: /data/user/0/com.companyname.boxie/files/Incubus/fgT9zGkiLig.webm
[MediaPlayer]   at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:1673)
[MediaPlayer]   at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:1503)
[MediaPlayer]   at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:1420)
[MediaPlayer]   at android.media.MediaPlayer.attemptDataSource(MediaPlayer.java:1101)
[MediaPlayer]   at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1073)
[MediaPlayer]   at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1001)
[Choreographer] Skipped 808 frames!  The application may be doing too much work on its main thread.
[OpenGLRenderer] Davey! duration=13504ms; Flags=0, IntendedVsync=62215768101175, Vsync=62229234767303, OldestInputEvent=9223372036854775807, NewestInputEvent=0, HandleInputStart=62229246551820, AnimationStart=62229246583720, PerformTraversalsStart=62229246617720, DrawStart=62229262742220, SyncQueued=62229265543020, SyncStart=62229266711920, IssueDrawCommandsStart=62229266847620, SwapBuffers=62229267760720, FrameCompleted=62229274073120, DequeueBufferDuration=351000, QueueBufferDuration=499000, 
[MediaPlayer] resetDrmState:  mDrmInfo=null mDrmProvisioningThread=null mPrepareDrmInProgress=false mActiveDrmScheme=false
[MediaPlayer] cleanDrmObj: mDrmObj=null mDrmSessionId=null
[MediaPlayer] resetDrmState:  mDrmInfo=null mDrmProvisioningThread=null mPrepareDrmInProgress=false mActiveDrmScheme=false
[MediaPlayer] cleanDrmObj: mDrmObj=null mDrmSessionId=null
[monodroid-assembly] Shared library 'liblog' not loaded, p/invoke '__android_log_print' may fail
[DOTNET] Java.Lang.RuntimeException: setDataSource failed: status = 0xFFFFFFEA
[DOTNET]    at Java.Interop.JniEnvironment.InstanceMethods.CallVoidMethod(JniObjectReference instance, JniMethodInfo method, JniArgumentValue* args) in /Users/runner/work/1/s/xamarin-android/external/Java.Interop/src/Java.Interop/Java.Interop/JniEnvironment.g.cs:line 11884
[DOTNET]    at Java.Interop.JniPeerMembers.JniInstanceMethods.InvokeVirtualVoidMethod(String encodedMember, IJavaPeerable self, JniArgumentValue* parameters) in /Users/runner/work/1/s/xamarin-android/external/Java.Interop/src/Java.Interop/Java.Interop/JniPeerMembers.JniInstanceMethods_Invoke.cs:line 29
[DOTNET]    at Android.Media.MediaMetadataRetriever.SetDataSource(String uri, IDictionary`2 headers) in /Users/runner/work/1/s/xamarin-android/src/Mono.Android/obj/Release/net6.0/android-31/mcw/Android.Media.MediaMetadataRetriever.cs:line 1192
[DOTNET]    at Android.Media.MediaMetadataRetriever.<>c__DisplayClass161_0.<SetDataSourceAsync>b__0() in /Users/runner/work/1/s/xamarin-android/src/Mono.Android/obj/Release/net6.0/android-31/mcw/Android.Media.MediaMetadataRetriever.cs:line 1202
[DOTNET]    at System.Threading.Tasks.Task.InnerInvoke()
[DOTNET]    at System.Threading.Tasks.Task.<>c.<.cctor>b__272_0(Object obj)
[DOTNET]    at System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(Thread threadPoolThread, ExecutionContext executionContext, ContextCallback callback, Object state)
[DOTNET] --- End of stack trace from previous location ---
[DOTNET]    at System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(Thread threadPoolThread, ExecutionContext executionContext, ContextCallback callback, Object state)
[DOTNET]    at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot, Thread threadPoolThread)
[DOTNET] --- End of stack trace from previous location ---
[DOTNET]    at MauiAudio.Platforms.Android.MediaPlayerService.PrepareAndPlayMediaPlayerAsync()
[DOTNET]   --- End of managed Java.Lang.RuntimeException stack trace ---
[DOTNET] java.lang.RuntimeException: setDataSource failed: status = 0xFFFFFFEA
[DOTNET]    at android.media.MediaMetadataRetriever._setDataSource(Native Method)
[DOTNET]    at android.media.MediaMetadataRetriever.setDataSource(MediaMetadataRetriever.java:103)
[DOTNET] 
[DOTNET]   --- End of managed Java.Lang.RuntimeException stack trace ---
[DOTNET] java.lang.RuntimeException: setDataSource failed: status = 0xFFFFFFEA
[DOTNET]    at android.media.MediaMetadataRetriever._setDataSource(Native Method)
[DOTNET]    at android.media.MediaMetadataRetriever.setDataSource(MediaMetadataRetriever.java:103)
[MediaPlayer] Couldn't open /data/user/0/com.companyname.boxie/files/Incubus/fgT9zGkiLig.webm
[MediaPlayer] java.io.FileNotFoundException: No content provider: /data/user/0/com.companyname.boxie/files/Incubus/fgT9zGkiLig.webm
[MediaPlayer]   at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:1673)
[MediaPlayer]   at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:1503)
[MediaPlayer]   at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:1420)
[MediaPlayer]   at android.media.MediaPlayer.attemptDataSource(MediaPlayer.java:1101)
[MediaPlayer]   at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1073)
[MediaPlayer]   at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1001)
[MediaPlayer] resetDrmState:  mDrmInfo=null mDrmProvisioningThread=null mPrepareDrmInProgress=false mActiveDrmScheme=false
[MediaPlayer] cleanDrmObj: mDrmObj=null mDrmSessionId=null
[MediaPlayer] resetDrmState:  mDrmInfo=null mDrmProvisioningThread=null mPrepareDrmInProgress=false mActiveDrmScheme=false
[MediaPlayer] cleanDrmObj: mDrmObj=null mDrmSessionId=null
[DOTNET] Java.Lang.RuntimeException: setDataSource failed: status = 0xFFFFFFEA
[DOTNET]    at Java.Interop.JniEnvironment.InstanceMethods.CallVoidMethod(JniObjectReference instance, JniMethodInfo method, JniArgumentValue* args) in /Users/runner/work/1/s/xamarin-android/external/Java.Interop/src/Java.Interop/Java.Interop/JniEnvironment.g.cs:line 11884
[DOTNET]    at Java.Interop.JniPeerMembers.JniInstanceMethods.InvokeVirtualVoidMethod(String encodedMember, IJavaPeerable self, JniArgumentValue* parameters) in /Users/runner/work/1/s/xamarin-android/external/Java.Interop/src/Java.Interop/Java.Interop/JniPeerMembers.JniInstanceMethods_Invoke.cs:line 29
[DOTNET]    at Android.Media.MediaMetadataRetriever.SetDataSource(String uri, IDictionary`2 headers) in /Users/runner/work/1/s/xamarin-android/src/Mono.Android/obj/Release/net6.0/android-31/mcw/Android.Media.MediaMetadataRetriever.cs:line 1192
[DOTNET]    at Android.Media.MediaMetadataRetriever.<>c__DisplayClass161_0.<SetDataSourceAsync>b__0() in /Users/runner/work/1/s/xamarin-android/src/Mono.Android/obj/Release/net6.0/android-31/mcw/Android.Media.MediaMetadataRetriever.cs:line 1202
[DOTNET]    at System.Threading.Tasks.Task.InnerInvoke()
[DOTNET]    at System.Threading.Tasks.Task.<>c.<.cctor>b__272_0(Object obj)
[DOTNET]    at System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(Thread threadPoolThread, ExecutionContext executionContext, ContextCallback callback, Object state)
[DOTNET] --- End of stack trace from previous location ---
[DOTNET]    at System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(Thread threadPoolThread, ExecutionContext executionContext, ContextCallback callback, Object state)
[DOTNET]    at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot, Thread threadPoolThread)
[DOTNET] --- End of stack trace from previous location ---
[DOTNET]    at MauiAudio.Platforms.Android.MediaPlayerService.PrepareAndPlayMediaPlayerAsync()
[DOTNET]   --- End of managed Java.Lang.RuntimeException stack trace ---
[DOTNET] java.lang.RuntimeException: setDataSource failed: status = 0xFFFFFFEA
[DOTNET]    at android.media.MediaMetadataRetriever._setDataSource(Native Method)
[DOTNET]    at android.media.MediaMetadataRetriever.setDataSource(MediaMetadataRetriever.java:103)
[DOTNET] 
[DOTNET]   --- End of managed Java.Lang.RuntimeException stack trace ---
[DOTNET] java.lang.RuntimeException: setDataSource failed: status = 0xFFFFFFEA
[DOTNET]    at android.media.MediaMetadataRetriever._setDataSource(Native Method)
[DOTNET]    at android.media.MediaMetadataRetriever.setDataSource(MediaMetadataRetriever.java:103)

This is the code used to play file (local and remote)

if (!url.StartsWith("http://"))
{
    if (!File.Exists(url))
    {
        Debug.WriteLine($"Cannot find File: {url}");
        return false;
    }

    Debug.WriteLine($"Loading local File {url}");
}
await _audioService.InitializeAsync(url);
await _audioService.PlayAsync(_audioService.CurrentPosition);

Any suggestions?

BeautifulPilgrim commented 2 years ago

Sorry, I have not do the local file, I will find a way to read the local resources.

BeautifulPilgrim commented 2 years ago

When I read the error information, I think maybe the problem is that the format is not correct. I think maybe audio format is about mp3,aac, etc.