RenderHeads / UnityPlugin-AVProVideo

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

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

Closed RuudvanReenen closed 2 years ago

RuudvanReenen commented 2 years 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 2 years 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 2 years 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 2 years 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 2 years 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 2 years 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 2 years 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 2 years 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 2 years 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 2 years 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 2 years 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 2 years 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 2 years 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 2 years 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 2 years 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 2 years 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 2 years 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 2 years ago

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

ShobhitHexa commented 5 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 5 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?