1

I've been working on this app that is required to display video, and I've chosen to use MediaElement. The element is initialized fine, but if I do anything besides play or pause the video, like moving the slider, I receive this error:

Java.Lang.AbstractMethodError: 'abstract method "void androidx.media3.common.Player$Listener.onPositionDiscontinuity(androidx.media3.common.Player$PositionInfo, androidx.media3.common.Player$PositionInfo, int)"'

This being a Media3 issue, the error doesn't stop the iOS and Windows versions from working. I have found this link, https://github.com/CommunityToolkit/Maui/issues/2824, which gave me the idea that it could be a version issue between the related media3 libraries and the MediaElement library, but when I try to upgrade the Media3 libraries it fails because it downgrades Microsoft.Maui.Controls to 9.0.50, and MediaElement requires 9.0.90 or newer. Here are my dotnet relevant packages for reference:

    > CommunityToolkit.Maui.MediaElement              6.1.2       6.1.2   
    > Microsoft.Maui.Controls                         9.0.90      9.0.90    
   > Xamarin.AndroidX.Media                                     1.7.0.8        
   > Xamarin.AndroidX.Media3.Common                             1.5.0          
   > Xamarin.AndroidX.Media3.Container                          1.5.0          
   > Xamarin.AndroidX.Media3.Database                           1.5.0          
   > Xamarin.AndroidX.Media3.DataSource                         1.5.0          
   > Xamarin.AndroidX.Media3.Decoder                            1.5.0          
   > Xamarin.AndroidX.Media3.ExoPlayer                          1.5.0          
   > Xamarin.AndroidX.Media3.ExoPlayer.Dash                     1.5.0          
   > Xamarin.AndroidX.Media3.ExoPlayer.Hls                      1.5.0          
   > Xamarin.AndroidX.Media3.ExoPlayer.Rtsp                     1.5.0          
   > Xamarin.AndroidX.Media3.Extractor                          1.5.0          
   > Xamarin.AndroidX.Media3.Session                            1.5.0          
   > Xamarin.AndroidX.Media3.Ui                                 1.5.0 

I'm fully open to implementing it myself through Media3.ExoPlayer, but I wanted to see if anyone out there would be able to help with this issue before I take on that task. Here is a sample XAML file that causes this issue:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
             x:Class="Test.TestPage"
             Title="TestPage">
    <VerticalStackLayout>
        <Label 
            Text="Welcome to .NET MAUI!"
            VerticalOptions="Center" 
            HorizontalOptions="Center" />

        <toolkit:MediaElement x:Name="videoview" Source="https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4"
              ShouldShowPlaybackControls="True"
              ShouldAutoPlay="False"
              Aspect="AspectFill"
              HeightRequest="300"
              />
    </VerticalStackLayout>
</ContentPage>

I tried to update related Media3 libraries, downgrade MediaElements, switch to .NET 10, switching to LibVLCSharp but that had different issues.

Steps to reproduce:

Make a new Maui App, add CommunityToolkit.Maui.MediaElement latest version 6.1.2, transitive Xamarin.AndroidX.Media3.* packages will be added as 1.5.0 automatically, create a MediaElement as shown in the .xml above, results in error. Using .NET 9.

Here is the complete stack trace:

$exception {Java.Lang.AbstractMethodError: abstract method "void androidx.media3.common.Player$Listener.onPositionDiscontinuity(androidx.media3.common.Player$PositionInfo, androidx.media3.common.Player$PositionInfo, int)" at Java.Interop.JniEnvironment.InstanceMethods.CallNonvirtualVoidMethod(JniObjectReference instance, JniObjectReference type, JniMethodInfo method, JniArgumentValue* args) in /Users/runner/work/1/s/xamarin-android/external/Java.Interop/src/Java.Interop/obj/Release/net8.0/JniEnvironment.g.cs:line 20831 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 75 at AndroidX.Media3.Common.IPlayerListener.OnPositionDiscontinuity(PlayerPositionInfo oldPosition, PlayerPositionInfo newPosition, Int32 reason) in D:\a\_work\1\s\generated\androidx.media3.media3-common\obj\Release\net8.0-android\generated\src\AndroidX.Media3.Common.IPlayer.cs:line 1685 at AndroidX.Media3.Common.IPlayerListener.n_OnPositionDiscontinuity_Landroidx_media3_common_Player_PositionInfo_Landroidx_media3_common_Player_PositionInfo_I(IntPtr jnienv, IntPtr native__this, IntPtr native_oldPosition, IntPtr native_newPosition, Int32 reason) in D:\a\_work\1\s\generated\androidx.media3.media3-common\obj\Release\net8.0-android\generated\src\AndroidX.Media3.Common.IPlayer.cs:line 1671 at Android.Runtime.DynamicMethodNameCounter.10(IntPtr , IntPtr , IntPtr , IntPtr , Int32 ) --- End of managed Java.Lang.AbstractMethodError stack trace --- java.lang.AbstractMethodError: abstract method "void androidx.media3.common.Player$Listener.onPositionDiscontinuity(androidx.media3.common.Player$PositionInfo, androidx.media3.common.Player$PositionInfo, int)" at crc64ceb75e76f4b66147.MediaManager.n_onPositionDiscontinuity(Native Method) at crc64ceb75e76f4b66147.MediaManager.onPositionDiscontinuity(MediaManager.java:225) at androidx.media3.exoplayer.ExoPlayerImpl.lambda$updatePlaybackInfo$13(ExoPlayerImpl.java:2094) at androidx.media3.exoplayer.ExoPlayerImpl$$ExternalSyntheticLambda5.invoke(D8$$SyntheticClass:0) at androidx.media3.common.util.ListenerSet$ListenerHolder.invoke(ListenerSet.java:342) at androidx.media3.common.util.ListenerSet.lambda$queueEvent$0(ListenerSet.java:226) at androidx.media3.common.util.ListenerSet$$ExternalSyntheticLambda1.run(D8$$SyntheticClass:0) at androidx.media3.common.util.ListenerSet.flushEvents(ListenerSet.java:248) at androidx.media3.exoplayer.ExoPlayerImpl.updatePlaybackInfo(ExoPlayerImpl.java:2174) at androidx.media3.exoplayer.ExoPlayerImpl.seekTo(ExoPlayerImpl.java:943) at androidx.media3.common.BasePlayer.seekToCurrentItem(BasePlayer.java:454) at androidx.media3.common.BasePlayer.seekTo(BasePlayer.java:254) at crc64fcf28c0e24b4cc31.ButtonHandler_ButtonClickListener.n_onClick(Native Method) at crc64fcf28c0e24b4cc31.ButtonHandler_ButtonClickListener.onClick(ButtonHandler_ButtonClickListener.java:29) at android.view.View.performClick(View.java:8028) at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1218) at android.view.View.performClickInternal(View.java:8005) at android.view.View.-$$Nest$mperformClickInternal(Unknown Source:0) at android.view.View$PerformClick.run(View.java:31229) at android.os.Handler.handleCallback(Handler.java:959) at android.os.Handler.dispatchMessage(Handler.java:100) at android.os.Looper.loopOnce(Looper.java:232) at android.os.Looper.loop(Looper.java:317) at android.app.ActivityThread.main(ActivityThread.java:8705) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:580) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:886) --- End of managed Java.Lang.AbstractMethodError stack trace --- java.lang.AbstractMethodError: abstract method "void androidx.media3.common.Player$Listener.onPositionDiscontinuity(androidx.media3.common.Player$PositionInfo, androidx.media3.common.Player$PositionInfo, int)" at crc64ceb75e76f4b66147.MediaManager.n_onPositionDiscontinuity(Native Method) at crc64ceb75e76f4b66147.MediaManager.onPositionDiscontinuity(MediaManager.java:225) at androidx.media3.exoplayer.ExoPlayerImpl.lambda$updatePlaybackInfo$13(ExoPlayerImpl.java:2094) at androidx.media3.exoplayer.ExoPlayerImpl$$ExternalSyntheticLambda5.invoke(D8$$SyntheticClass:0) at androidx.media3.common.util.ListenerSet$ListenerHolder.invoke(ListenerSet.java:342) at androidx.media3.common.util.ListenerSet.lambda$queueEvent$0(ListenerSet.java:226) at androidx.media3.common.util.ListenerSet$$ExternalSyntheticLambda1.run(D8$$SyntheticClass:0) at androidx.media3.common.util.ListenerSet.flushEvents(ListenerSet.java:248) at androidx.media3.exoplayer.ExoPlayerImpl.updatePlaybackInfo(ExoPlayerImpl.java:2174) at androidx.media3.exoplayer.ExoPlayerImpl.seekTo(ExoPlayerImpl.java:943) at androidx.media3.common.BasePlayer.seekToCurrentItem(BasePlayer.java:454) at androidx.media3.common.BasePlayer.seekTo(BasePlayer.java:254) at crc64fcf28c0e24b4cc31.ButtonHandler_ButtonClickListener.n_onClick(Native Method) at crc64fcf28c0e24b4cc31.ButtonHandler_ButtonClickListener.onClick(ButtonHandler_ButtonClickListener.java:29) at android.view.View.performClick(View.java:8028) at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1218) at android.view.View.performClickInternal(View.java:8005) at android.view.View.-$$Nest$mperformClickInternal(Unknown Source:0) at android.view.View$PerformClick.run(View.java:31229) at android.os.Handler.handleCallback(Handler.java:959) at android.os.Handler.dispatchMessage(Handler.java:100) at android.os.Looper.loopOnce(Looper.java:232) at android.os.Looper.loop(Looper.java:317) at android.app.ActivityThread.main(ActivityThread.java:8705) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:580) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:886) } Java.Lang.AbstractMethodError

1 Answer 1

0

I downgraded my app to .NET 8 and am using older version of MediaElement and Media3.
Not the solution I would have wanted but it works for now.

 > CommunityToolkit.Maui.MediaElement            3.1.0        3.1.0
 > Xam.Plugins.Android.ExoPlayer                              2.19.1         
 > Xam.Plugins.Android.ExoPlayer.Common                       2.19.1         
 > Xam.Plugins.Android.ExoPlayer.Container                    2.19.1         
 > Xam.Plugins.Android.ExoPlayer.Core                         2.19.1         
 > Xam.Plugins.Android.ExoPlayer.Dash                         2.19.1         
 > Xam.Plugins.Android.ExoPlayer.Database                     2.19.1         
 > Xam.Plugins.Android.ExoPlayer.DataSource                   2.19.1         
 > Xam.Plugins.Android.ExoPlayer.Decoder                      2.19.1         
 > Xam.Plugins.Android.ExoPlayer.Extractor                    2.19.1         
 > Xam.Plugins.Android.ExoPlayer.Hls                          2.19.1         
 > Xam.Plugins.Android.ExoPlayer.Rtsp                         2.19.1         
 > Xam.Plugins.Android.ExoPlayer.SmoothStreaming              2.19.1         
 > Xam.Plugins.Android.ExoPlayer.Transformer                  2.19.1         
 > Xam.Plugins.Android.ExoPlayer.UI                           2.19.1
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.