RenderHeads / UnityPlugin-AVProVideo

AVPro Video is a multi-platform Unity plugin for advanced video playback
https://www.renderheads.com/products/avpro-video/
231 stars 28 forks source link

Crash on Android when video starts: JNI DETECTED ERROR IN APPLICATION #1352

Closed RuudvanReenen closed 1 year ago

RuudvanReenen commented 1 year ago

Describe the issue Crash on Android phones when video starts

Your Setup (please complete the following information):

To Reproduce

  1. Android app runs fine until a video is started, then crashes immediately

Logs `2022-10-31 15:28:34.879 29979-30001/? I/ExoPlayerImpl: Init f4bc10c [ExoPlayerLib/2.15.0] [taimen, Pixel 2 XL, Google, 30] 2022-10-31 15:28:34.882 29979-30001/? I/Unity: m_Video UnityEngine.AndroidJavaObject RenderHeads.Media.AVProVideo.AndroidMediaPlayer:.ctor(OptionsAndroid) RenderHeads.Media.AVProVideo.MediaPlayer:CreateMediaPlayer(OptionsAndroid) RenderHeads.Media.AVProVideo.MediaPlayer:CreateMediaPlayer() RenderHeads.Media.AVProVideo.MediaPlayer:Initialise() RenderHeads.Media.AVProVideo.MediaPlayer:Start()

(Filename: ./Runtime/Export/Debug.bindings.h Line: 45)

2022-10-31 15:28:34.898 29979-30001/? I/AVProVideo: Video Loading: TYPE_OTHER : No file offset | uri = https://d2ht5lqlrw6yq0.cloudfront.net/Demo-full/media/SampleVideo_360x240_30mb.mp4 2022-10-31 15:28:34.902 29979-30001/? A/ourviewerremot: java_vm_ext.cc:577] JNI DETECTED ERROR IN APPLICATION: JNI CallStaticIntMethodV called with pending exception java.lang.AbstractMethodError: abstract method "void com.google.android.exoplr2avp.Player$EventListener.onTimelineChanged(com.google.android.exoplr2avp.Timeline, int)" java_vm_ext.cc:577] at void com.google.android.exoplr2avp.ExoPlayerImpl.lambda$updatePlaybackInfo$8(com.google.android.exoplr2avp.PlaybackInfo, int, com.google.android.exoplr2avp.Player$EventListener) (ExoPlayerImpl.java:1280) java_vm_ext.cc:577] at void com.google.android.exoplr2avp.-$$Lambda$ExoPlayerImpl$awmKZuinXJSIwhWHM_g5NqQEQLg.invoke(java.lang.Object) (lambda:-1) java_vm_ext.cc:577] at void com.google.android.exoplr2avp.util.ListenerSet$ListenerHolder.invoke(int, com.google.android.exoplr2avp.util.ListenerSet$Event) (ListenerSet.java:261) java_vm_ext.cc:577] at void com.google.android.exoplr2avp.util.ListenerSet.lambda$queueEvent$0(java.util.concurrent.CopyOnWriteArraySet, int, com.google.android.exoplr2avp.util.ListenerSet$Event) (ListenerSet.java:170) java_vm_ext.cc:577] at void com.google.android.exoplr2avp.util.-$$Lambda$ListenerSet$DVkVkrgVacqzqAQBdKazvku2TgI.run() (lambda:-1) java_vm_ext.cc:577] at void com.google.android.exoplr2avp.util.ListenerSet.flushEvents() (ListenerSet.java:191) java_vm_ext.cc:577] at void com.google.android.exoplr2avp.ExoPlayerImpl.updatePlaybackInfo(com.google.android.exoplr2avp.PlaybackInfo, int, int, boolean, boolean, int, long, int) (ExoPlayerImpl.java:1380) java_vm_ext.cc:577] at void com.google.android.exoplr2avp.ExoPlayerImpl.setMediaSourcesInternal(java.util.List, int, long, boolean) (ExoPlayerImpl.java:1585) java_vm_ext.cc:577] at void com.google.android.exoplr2avp.ExoPlayerImpl.setMediaSources(java.util.List, boolean) (ExoPlayerImpl.java:465) java_vm_ext.cc:577] at void com.google.android.exoplr2avp.ExoPlayerImpl.setMediaSource(com.google.android.exoplr2avp.source.MediaSource, boolean) (ExoPlayerImpl.java:455) java_vm_ext.cc:577] at void com.google.android.exoplr2avp.SimpleExoPlayer.setMediaSource(com.google.android.exoplr2avp.source.MediaSource, boolean) (SimpleExoPlayer.java:1484) java_vm_ext.cc:577] at boolean com.renderheads.AVPro.Video.Player_ExoPlayer.OpenVideoFromFileInternal(java.lang.String, long, java.lang.String, int) (Player_ExoPlayer.java:257) java_vm_ext.cc:577] at void com.renderheads.AVPro.Video.Player_ExoPlayer.PlayerRenderUpdate() (Player_ExoPlayer.java:54) java_vm_ext.cc:577] at void com.renderheads.AVPro.Video.Player_Base.Update() (Player_Base.java:12) java_vm_ext.cc:577] at boolean com.unity3d.player.UnityPlayer.nativeRender() ((null):-2) java_vm_ext.cc:577] at boolean com.unity3d.player.UnityPlayer.c(com.unity3d.player.UnityPlayer) ((null):-1) java_vm_ext.cc:577] at boolean com.unity3d.player.UnityPlayer$e$1.handleMessage(android.os.Message) ((null):-1) java_vm_ext.cc:577] at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:102) java_vm_ext.cc:577] at void android.os.Looper.loop() (Looper.java:223) java_vm_ext.cc:577] at void com.unity3d.player.UnityPlayer$e.run() ((null):-1) java_vm_ext.cc:577] java_vm_ext.cc:577] in call to CallStaticIntMethodV java_vm_ext.cc:577] from boolean com.unity3d.player.UnityPlayer.nativeRender() 2022-10-31 15:28:35.115 29979-30001/? A/ourviewerremot: runtime.cc:655] Runtime aborting... `

Chris-RH commented 1 year ago
  1. What is the min/target SDK?
  2. What are your minify settings?
  3. Could you provide a full logcat?
  4. What are your gradle settings?
  5. Have you tried a new, clean build using just AVPro Media player demo scene playing your video?
Ste-RH commented 1 year ago

You state you are running AVPro Video v2.6.5, but your log says it is implementing ExoPlayer v2.15.0. The last build that used that version of ExoPlayer was AVPro Video v2.2.4, as we updated from ExoPlayer 2.15.0 in AVPro Video v2.3.0

I wonder if you can clarify the version of AVPro being used? Because a miss-match might cause such an issue as you are seeing.

Initial suggestion is to delete the \Assets\AVProVideo\Runtime\Plugins\Android\ folder and re-import the AVPro Video 2.6.5 asset package to reinstate the Android plugin files.

Please do send over a full log (not a pasted snippet) if you are still seeing the same issue once you have tried the above.

RuudvanReenen commented 1 year ago
  1. Min API: 21, Target API: 30
  2. Not minifying
  3. AVPro-crash-01.txt
  4. mainTemplate.gradle.txt
  5. Not yet

Thanks for the quick responses! Looks like the ExoPlayer version issue could be the cause of this indeed. But I've deleted the folder as mentioned (also searched and removed some old AVPro 1.x files from Assets/Plugins/Android) and reimported AVPro 2.6.5, but it's still mentioning version 2.15.0 in logcat.

Which version of the ExoPlayer should be shown?

Chris-RH commented 1 year ago

Hi @RuudvanReenen,

It should be ExoPlayer 2.18.0

Have you followed the upgrade steps: https://www.renderheads.com/content/docs/AVProVideo/articles/upgrading-from-avpro-video-1x.html https://www.renderheads.com/content/docs/AVProVideo/articles/install.html#upgrade-steps

Ste-RH commented 1 year ago

Ahh, this might be just old v1 stale files then if you have updated from v1.x to v2.x

Can you send a screen shot of what files exist in the following folder:

\Assets\Plugins\Android\

RuudvanReenen commented 1 year ago

Was hoping that would be the case, but as far as I can tell there's no old v1 file in there anymore

Assets-Plugins-Android-folder

Ste-RH commented 1 year ago

The log you sent is not complete. I would expect to see something along the lines of:

[AVProVideo] Initialising AVPro Video v2.6.5 (native plugin v2.6.5f1-ultra) on Adreno (TM) 650/OpenGL ES 3.2 V@0502.0 (GIT@191610ae03, Ic907de5ed0, 1600323700) (Date:09/17/20) (MT True) on Android

(as an 'Info' level log)

Ste-RH commented 1 year ago

Would it be possible to send over your project so we can quickly find what the issue is? If so, send it over to unitysupport@renderheads.com

RuudvanReenen commented 1 year ago

Weird, the logcat was unfiltered on level Verbose from start of the app until after the crash.

Unfortunately I can't share the project, but I'll test with a clean project and report back. I'll share that if the result is the same.

RuudvanReenen commented 1 year ago

Is it possible that the logcat is complete but MediaPlayer.CreateMediaPlayer is resulting in null because of the ExoPlayer mismatch? That would cause the 'Initializing' line to be skipped.

RuudvanReenen commented 1 year ago

Tried a new, clean build using just AVPro Media player with the 360 video demo scene and it crashes immediately after showing the Unity splash screen. I've sent the project with WeTransfer. The new project reports ExoPlayer 2.18.0, so something is still off in my own project. Using Unity 2018.4.36f1 LTS.

logcat of the new project: logcat.txt

Ste-RH commented 1 year ago

Thanks for sending it over @RuudvanReenen. I have tracked down the issue and put a fix in for it. It only appears to be an issue in Unity 2018. I tested with Unity 2019.4.37f1 and the crash does not happen.

This fix will be in the next release, but if you require a hot-fix before this (due later this week), then please email over your Unity Asset Store PDF receipt for your purchase of AVPro Video and I will issue you a fix.

EDIT: Also, your original project I think is still not right. You should be getting ExoPlayer 2.18.1 in your logcat output like you do in the demo project you sent over to us.

RuudvanReenen commented 1 year ago

Awesome support, quick responses and a quick solution, thanks a lot! Very much appreciated. I'll email the invoice and await the solution. I'll dig further to make sure ExoPlayer 2.18.1 is used, this could be an issue caused by another plugin. Thanks again!

RuudvanReenen commented 1 year ago

Thanks a lot for the quick fix! The hotfix works well in the clean project.

But still stuck with ExoPlayer 2.15.0 in the original project, and when building there is no warning about duplicates... Is there any way I can find out where it's coming from using Android Studio and exporting the build from Unity?

Ste-RH commented 1 year ago

Yeah, you could. The main gradle file will show what external libs are being pulled in (as well as local ones). Feel free to email anything like that over for a second pair of eyes if you can/want.

You could also maybe try removing AVPro Video from your project and seeing if ExoPlayer is still logging?

We use a different package name to the default ExoPlayer so there should not be a clash...but I guess it's possible.

stale[bot] commented 1 year ago

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

Chris-RH commented 1 year ago

Version 2.6.6 is now out. Please let us know if this has not resolved your issue.

ShobhitHexa commented 2 months ago

Hello, My app is getting crash just after I click on google login button(Implemented with firebase). Need Your help. I am getting this log java_vm_ext.cc:591] JNI DETECTED ERROR IN APPLICATION: CallStaticVoidMethodV received NULL jclass java_vm_ext.cc:591] in call to CallStaticVoidMethodV java_vm_ext.cc:591] from boolean com.unity3d.player.UnityPlayer.nativeRender()

Thankyou.

Chris-RH commented 2 months ago

This is an old issue. Please open a new issue and fill in the form completely. The error logs aren't related to AVPro. Why do you think it is an AVPro issue rather than a Firebase issue?