Closed mikewesten closed 1 year ago
I was about to post a very similar issue when I saw this. I've been able to reproduce a similar crash by adding a subtitles file. For example, if I add "Marley & Me (2008).eng.srt" to the movie directory, along with updated NFO file created by Tiny Media Manager, I get a very similar stack trace. I'm running Jellyfin 10.8.5 and jellyfin-androidtv 0.14.3 on an Nvidia Shield. I'm happy to post a log, if it's helpful. This issue is also being discussed at: https://www.reddit.com/r/jellyfin/comments/xomxsy/android_tv_jellyfin_crash_when_opening_movie/
This was a result of the api changes in https://github.com/jellyfin/jellyfin/pull/8298 added in 10.8.5 being incompatible with some of the old code in the app. We're planning to get a fix out soon!
I have a potential fix for this issue in #2139 but I'm unable to test it. If anyone experiences this issue wants to help out you can do the following:
1) Share a file that triggers this issue, preferably max 10 seconds. (I can't accept pirated files) 2) Sideload the .apk file to your device and see if it triggers the issue. Do note that this is a development version with other changes as well and there might be other issues, try to focus on this one in particular.
APK Download: https://github.com/jellyfin/jellyfin-androidtv/suites/8606729121/artifacts/385968954 Here is a guide on how to sideload apps: https://www.xda-developers.com/how-to-sideload-apps-android-tv/. It will install a new app called "Jellyfin Debug" with an orange logo.
@nielsvanvelzen
8 second generic Jellyfin Preroll video, with silent AAC audio
Containing menu stream: https://user-images.githubusercontent.com/73662866/193892458-6de81fdc-4d98-4d76-ac6c-47afb65c2068.mp4
Does not contain menu stream: https://user-images.githubusercontent.com/73662866/193892796-410df37e-86c2-41fe-b4db-6cae74f5dceb.mp4
Thanks a lot @mikewesten! I was able to reproduce the crash and can confirm that my fix works.
Will make a new app release ASAP.
Thanks a lot @mikewesten! I was able to reproduce the crash and can confirm that my fix works.
Will make a new app release ASAP.
That's good.
I don't know how helpful or relevant this might be but here's the same menu-stream-containing video remuxed to an .mkv container. It completely eliminates the issue on my end.
My personal libraries are 100% MKV files and from what I could find the matroska specification doesn't have data streams. So that's why it doesn't trigger the issue with mkv files.
A new version of the app is now released and we're pushing it to Google Play and the Amazon Appstore. They need to review it and that can sometimes take a few days.
@nielsvanvelzen
Thank you, that was quick. I've just downloaded it and "update over'd" my v0.14.3 to v0.14.4 via sideload. Using 'Jellyfin Prerolls + Menu Stream.mp4' to test with. Crash #2 (selecting movie library from the 'My Media' row) was completely resolved. No more crash there. However, there's still a crash when selecting the problematic media item itself. What happens is the media item's details page will briefly load, followed by a crash. This behavior differs slightly from Crash #1 mentioned in the original post, where only the backdrop art loads > screen stuck indefinitely > back button/user input triggers crash
Stack Trace:
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Enum.toString()' on a null object reference
at org.jellyfin.androidtv.ui.card.MediaInfoCardView.setMediaStream(MediaInfoCardView.kt:31)
at org.jellyfin.androidtv.ui.presentation.InfoCardPresenter$ViewHolder.setItem(InfoCardPresenter.java:22)
at org.jellyfin.androidtv.ui.presentation.InfoCardPresenter.onBindViewHolder(InfoCardPresenter.java:42)
at androidx.leanback.widget.Presenter.onBindViewHolder(Presenter.java:140)
at androidx.leanback.widget.ItemBridgeAdapter.onBindViewHolder(ItemBridgeAdapter.java:422)
at androidx.recyclerview.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:7337)
at androidx.recyclerview.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:6194)
at androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:6460)
at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6300)
at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6296)
at androidx.leanback.widget.GridLayoutManager.getViewForPosition(GridLayoutManager.java:1118)
at androidx.leanback.widget.GridLayoutManager$2.createItem(GridLayoutManager.java:1646)
at androidx.leanback.widget.SingleRow.appendVisibleItems(SingleRow.java:113)
at androidx.leanback.widget.Grid.appendVisibleItems(Grid.java:397)
at androidx.leanback.widget.GridLayoutManager.appendVisibleItems(GridLayoutManager.java:1965)
at androidx.leanback.widget.GridLayoutManager.onLayoutChildren(GridLayoutManager.java:2318)
at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:4309)
at androidx.recyclerview.widget.RecyclerView.dispatchLayout(RecyclerView.java:4012)
at androidx.recyclerview.widget.RecyclerView.onLayout(RecyclerView.java:4578)
at android.view.View.layout(View.java:17640)
at android.view.ViewGroup.layout(ViewGroup.java:5575)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1741)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1494)
at android.view.View.layout(View.java:17640)
at android.view.ViewGroup.layout(ViewGroup.java:5575)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1741)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1494)
at android.view.View.layout(View.java:17640)
at android.view.ViewGroup.layout(ViewGroup.java:5575)
at androidx.recyclerview.widget.RecyclerView$LayoutManager.layoutDecoratedWithMargins(RecyclerView.java:9878)
at androidx.leanback.widget.GridLayoutManager.layoutChild(GridLayoutManager.java:1807)
at androidx.leanback.widget.GridLayoutManager$2.addItem(GridLayoutManager.java:1729)
at androidx.leanback.widget.SingleRow.appendVisibleItems(SingleRow.java:126)
at androidx.leanback.widget.Grid.appendVisibleItems(Grid.java:397)
at androidx.leanback.widget.GridLayoutManager.appendVisibleItems(GridLayoutManager.java:1965)
at androidx.leanback.widget.GridLayoutManager.onLayoutChildren(GridLayoutManager.java:2246)
at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep1(RecyclerView.java:4255)
at androidx.recyclerview.widget.RecyclerView.dispatchLayout(RecyclerView.java:4010)
at androidx.recyclerview.widget.RecyclerView.onLayout(RecyclerView.java:4578)
at android.view.View.layout(View.java:17640)
at android.view.ViewGroup.layout(ViewGroup.java:5575)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
at android.view.View.layout(View.java:17640)
at android.view.ViewGroup.layout(ViewGroup.java:5575)
at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1079)
at android.view.View.layout(View.java:17640)
at android.view.ViewGroup.layout(ViewGroup.java:5575)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
at android.view.View.layout(View.java:17640)
at android.view.ViewGroup.layout(ViewGroup.java:5575)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1741)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1494)
at android.view.View.layout(View.java:17640)
at android.view.ViewGroup.layout(ViewGroup.java:5575)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
at com.android.internal.policy.DecorView.onLayout(DecorView.java:742)
at android.view.View.layout(View.java:17640)
at android.view.ViewGroup.layout(ViewGroup.java:5575)
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2356)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2078)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1256)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6374)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:878)
at android.view.Choreographer.doCallbacks(Choreographer.java:689)
at android.view.Choreographer.doFrame(Choreographer.java:623)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:864)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6194)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:911)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:801)
Logcat:
--------- beginning of main
10-04 11:59:32.654 I/art (28538): Background partial concurrent mark sweep GC freed 1671(70KB) AllocSpace objects, 1(7MB) LOS objects, 5% free, 75MB/79MB, paused 1.755ms total 110.419ms
10-04 11:59:32.704 E/ThemeUtils(28538): View class org.jellyfin.androidtv.ui.AsyncImageView is an AppCompat widget that can only be used with a Theme.AppCompat theme (or descendant).
10-04 11:59:32.756 E/ThemeUtils(28538): View class org.jellyfin.androidtv.ui.AsyncImageView is an AppCompat widget that can only be used with a Theme.AppCompat theme (or descendant).
10-04 11:59:34.382 I/OkHttpWebsocketSession(28538): Sending (raw) message {"MessageType":"KeepAlive","Data":{}}
10-04 11:59:34.386 I/OkHttpWebsocketSession(28538): Receiving (raw) message {"MessageType":"KeepAlive","MessageId":"d8df4c32343a4cc887c9e4cbd93efc9f"}
10-04 11:59:39.276 I/art (28538): Do full code cache collection, code=504KB, data=493KB
10-04 11:59:39.279 I/art (28538): Starting a blocking GC JitCodeCache
10-04 11:59:39.280 I/art (28538): After code cache collection, code=363KB, data=341KB
10-04 11:59:39.790 D/ItemLauncher(28538): Item selected: 0 - Movies (CollectionFolder)
10-04 11:59:39.791 D/ItemLauncher(28538): **** Collection type: movies
10-04 11:59:39.819 D/ACRA (28538): onActivityPaused class org.jellyfin.androidtv.ui.browsing.MainActivity
10-04 11:59:39.852 D/ACRA (28538): onActivityCreated class org.jellyfin.androidtv.ui.browsing.GenericGridActivity
10-04 11:59:39.854 I/AppThemeCallbacks(28538): Applying theme: DARK
10-04 11:59:39.868 D/ACRA (28538): onActivityStarted class org.jellyfin.androidtv.ui.browsing.GenericGridActivity
10-04 11:59:39.874 I/BackgroundService(28538): Adding BackgroundServiceFragment to activity
10-04 11:59:39.884 D/StdGridFragment(28538): numCardsScreen <0>
10-04 11:59:39.939 E/ThemeUtils(28538): View class org.jellyfin.androidtv.ui.AsyncImageView is an AppCompat widget that can only be used with a Theme.AppCompat theme (or descendant).
10-04 11:59:39.945 D/StdGridFragment(28538): buildAdapter cardHeight <379> getCardWidthBy <252> chunks <25> type <Items>
10-04 11:59:39.947 D/jellyfin-apiclient(28538): Adding request to queue: http://192.168.0.110:8096/Users/da9448d2-254a-4cb3-8c82-c9b871e1f545/Items?Fields=PrimaryImageAspectRatio%2CChildCount%2CMediaSources%2CMediaStreams%2CDisplayPreferencesId&recursive=true&sortOrder=Descending&Limit=25&SortBy=DateCreated%2CSortName&IncludeItemTypes=Movie&ParentId=f137a2dd-21bb-c1b9-9aa5-c0f6bf02a805&format=json
10-04 11:59:39.961 D/ACRA (28538): onActivityResumed class org.jellyfin.androidtv.ui.browsing.GenericGridActivity
10-04 11:59:39.963 D/BackgroundServiceFragme(28538): Restoring background drawable
10-04 11:59:39.979 D/MediaManager(28538): Added event listener. Total listeners: 2
10-04 11:59:40.003 D/GridFragment(28538): row selected position -1
10-04 11:59:40.060 D/OpenGLRenderer(28538): endAllActiveAnimators on 0x8ee87980 (RelativeLayout) with handle 0x8c5ffa40
10-04 11:59:40.071 D/ACRA (28538): onActivitySaveInstanceState class org.jellyfin.androidtv.ui.browsing.MainActivity
10-04 11:59:40.079 D/ACRA (28538): onActivityStopped class org.jellyfin.androidtv.ui.browsing.MainActivity
10-04 11:59:40.099 I/jellyfin-apiclient(28538): Response received from: http://192.168.0.110:8096/Users/da9448d2-254a-4cb3-8c82-c9b871e1f545/Items?Fields=PrimaryImageAspectRatio%2CChildCount%2CMediaSources%2CMediaStreams%2CDisplayPreferencesId&recursive=true&sortOrder=Descending&Limit=25&SortBy=DateCreated%2CSortName&IncludeItemTypes=Movie&ParentId=f137a2dd-21bb-c1b9-9aa5-c0f6bf02a805&format=json
10-04 11:59:40.144 E/ThemeUtils(28538): View class org.jellyfin.androidtv.ui.AsyncImageView is an AppCompat widget that can only be used with a Theme.AppCompat theme (or descendant).
10-04 11:59:40.157 D/GridFragment(28538): row selected position 0
10-04 11:59:40.160 E/ThemeUtils(28538): View class org.jellyfin.androidtv.ui.AsyncImageView is an AppCompat widget that can only be used with a Theme.AppCompat theme (or descendant).
10-04 11:59:40.175 E/ThemeUtils(28538): View class org.jellyfin.androidtv.ui.AsyncImageView is an AppCompat widget that can only be used with a Theme.AppCompat theme (or descendant).
10-04 11:59:40.188 E/ThemeUtils(28538): View class org.jellyfin.androidtv.ui.AsyncImageView is an AppCompat widget that can only be used with a Theme.AppCompat theme (or descendant).
10-04 11:59:40.199 E/ThemeUtils(28538): View class org.jellyfin.androidtv.ui.AsyncImageView is an AppCompat widget that can only be used with a Theme.AppCompat theme (or descendant).
10-04 11:59:40.210 E/ThemeUtils(28538): View class org.jellyfin.androidtv.ui.AsyncImageView is an AppCompat widget that can only be used with a Theme.AppCompat theme (or descendant).
10-04 11:59:40.222 E/ThemeUtils(28538): View class org.jellyfin.androidtv.ui.AsyncImageView is an AppCompat widget that can only be used with a Theme.AppCompat theme (or descendant).
10-04 11:59:40.234 E/ThemeUtils(28538): View class org.jellyfin.androidtv.ui.AsyncImageView is an AppCompat widget that can only be used with a Theme.AppCompat theme (or descendant).
10-04 11:59:40.247 E/ThemeUtils(28538): View class org.jellyfin.androidtv.ui.AsyncImageView is an AppCompat widget that can only be used with a Theme.AppCompat theme (or descendant).
10-04 11:59:40.261 E/ThemeUtils(28538): View class org.jellyfin.androidtv.ui.AsyncImageView is an AppCompat widget that can only be used with a Theme.AppCompat theme (or descendant).
10-04 11:59:40.275 E/ThemeUtils(28538): View class org.jellyfin.androidtv.ui.AsyncImageView is an AppCompat widget that can only be used with a Theme.AppCompat theme (or descendant).
10-04 11:59:40.288 E/ThemeUtils(28538): View class org.jellyfin.androidtv.ui.AsyncImageView is an AppCompat widget that can only be used with a Theme.AppCompat theme (or descendant).
10-04 11:59:40.301 E/ThemeUtils(28538): View class org.jellyfin.androidtv.ui.AsyncImageView is an AppCompat widget that can only be used with a Theme.AppCompat theme (or descendant).
10-04 11:59:40.313 E/ThemeUtils(28538): View class org.jellyfin.androidtv.ui.AsyncImageView is an AppCompat widget that can only be used with a Theme.AppCompat theme (or descendant).
10-04 11:59:44.836 D/GridFragment(28538): row selected position 7
10-04 11:59:44.866 E/ThemeUtils(28538): View class org.jellyfin.androidtv.ui.AsyncImageView is an AppCompat widget that can only be used with a Theme.AppCompat theme (or descendant).
10-04 11:59:44.886 E/ThemeUtils(28538): View class org.jellyfin.androidtv.ui.AsyncImageView is an AppCompat widget that can only be used with a Theme.AppCompat theme (or descendant).
10-04 11:59:44.905 E/ThemeUtils(28538): View class org.jellyfin.androidtv.ui.AsyncImageView is an AppCompat widget that can only be used with a Theme.AppCompat theme (or descendant).
10-04 11:59:44.923 E/ThemeUtils(28538): View class org.jellyfin.androidtv.ui.AsyncImageView is an AppCompat widget that can only be used with a Theme.AppCompat theme (or descendant).
10-04 11:59:44.940 E/ThemeUtils(28538): View class org.jellyfin.androidtv.ui.AsyncImageView is an AppCompat widget that can only be used with a Theme.AppCompat theme (or descendant).
10-04 11:59:44.954 E/ThemeUtils(28538): View class org.jellyfin.androidtv.ui.AsyncImageView is an AppCompat widget that can only be used with a Theme.AppCompat theme (or descendant).
10-04 11:59:44.968 E/ThemeUtils(28538): View class org.jellyfin.androidtv.ui.AsyncImageView is an AppCompat widget that can only be used with a Theme.AppCompat theme (or descendant).
10-04 11:59:45.596 D/GridFragment(28538): row selected position 14
10-04 11:59:45.601 D/ItemRowAdapter(28538): Loading more items trigger pos <14> itemsLoaded <25> from total <5653> with chunkSize <25>
10-04 11:59:45.603 D/jellyfin-apiclient(28538): Adding request to queue: http://192.168.0.110:8096/Users/da9448d2-254a-4cb3-8c82-c9b871e1f545/Items?Fields=PrimaryImageAspectRatio%2CChildCount%2CMediaSources%2CMediaStreams%2CDisplayPreferencesId&StartIndex=25&recursive=true&sortOrder=Descending&Limit=25&SortBy=DateCreated%2CSortName&IncludeItemTypes=Movie&ParentId=f137a2dd-21bb-c1b9-9aa5-c0f6bf02a805&format=json
10-04 11:59:45.759 I/jellyfin-apiclient(28538): Response received from: http://192.168.0.110:8096/Users/da9448d2-254a-4cb3-8c82-c9b871e1f545/Items?Fields=PrimaryImageAspectRatio%2CChildCount%2CMediaSources%2CMediaStreams%2CDisplayPreferencesId&StartIndex=25&recursive=true&sortOrder=Descending&Limit=25&SortBy=DateCreated%2CSortName&IncludeItemTypes=Movie&ParentId=f137a2dd-21bb-c1b9-9aa5-c0f6bf02a805&format=json
10-04 11:59:45.788 E/ThemeUtils(28538): View class org.jellyfin.androidtv.ui.AsyncImageView is an AppCompat widget that can only be used with a Theme.AppCompat theme (or descendant).
10-04 11:59:45.800 E/ThemeUtils(28538): View class org.jellyfin.androidtv.ui.AsyncImageView is an AppCompat widget that can only be used with a Theme.AppCompat theme (or descendant).
10-04 11:59:46.236 D/GridFragment(28538): row selected position 7
10-04 11:59:46.345 E/ThemeUtils(28538): View class org.jellyfin.androidtv.ui.AsyncImageView is an AppCompat widget that can only be used with a Theme.AppCompat theme (or descendant).
10-04 11:59:46.364 E/ThemeUtils(28538): View class org.jellyfin.androidtv.ui.AsyncImageView is an AppCompat widget that can only be used with a Theme.AppCompat theme (or descendant).
10-04 11:59:46.594 D/GridFragment(28538): row selected position 0
10-04 11:59:47.318 D/GridFragment(28538): row selected position 1
10-04 11:59:47.837 D/GridFragment(28538): row selected position 0
10-04 11:59:50.136 D/ItemLauncher(28538): Item selected: 0 - Jellyfin Prerolls + Menu Stream (Movie)
10-04 11:59:50.155 D/ACRA (28538): onActivityPaused class org.jellyfin.androidtv.ui.browsing.GenericGridActivity
10-04 11:59:50.190 D/ACRA (28538): onActivityCreated class org.jellyfin.androidtv.ui.itemdetail.FullDetailsActivity
10-04 11:59:50.191 I/AppThemeCallbacks(28538): Applying theme: DARK
10-04 11:59:50.206 E/ThemeUtils(28538): View class org.jellyfin.androidtv.ui.AsyncImageView is an AppCompat widget that can only be used with a Theme.AppCompat theme (or descendant).
10-04 11:59:50.223 I/BackgroundService(28538): Adding BackgroundServiceFragment to activity
10-04 11:59:50.286 D/jellyfin-apiclient(28538): Adding request to queue: http://192.168.0.110:8096/Users/da9448d2-254a-4cb3-8c82-c9b871e1f545/Items/9f008cb009ab54e8abce841a272cbdc0?format=json
10-04 11:59:50.288 D/ACRA (28538): onActivityStarted class org.jellyfin.androidtv.ui.itemdetail.FullDetailsActivity
10-04 11:59:50.300 D/ACRA (28538): onActivityResumed class org.jellyfin.androidtv.ui.itemdetail.FullDetailsActivity
10-04 11:59:50.302 D/BackgroundServiceFragme(28538): Restoring background drawable
10-04 11:59:50.308 I/jellyfin-apiclient(28538): Response received from: http://192.168.0.110:8096/Users/da9448d2-254a-4cb3-8c82-c9b871e1f545/Items/9f008cb009ab54e8abce841a272cbdc0?format=json
10-04 11:59:50.322 D/MediaManager(28538): Added event listener. Total listeners: 3
10-04 11:59:50.342 W/RecyclerView(28538): No adapter attached; skipping layout
10-04 11:59:50.347 E/ThemeUtils(28538): View class androidx.appcompat.widget.AppCompatImageView is an AppCompat widget that can only be used with a Theme.AppCompat theme (or descendant).
10-04 11:59:50.353 E/ThemeUtils(28538): View class androidx.appcompat.widget.AppCompatImageView is an AppCompat widget that can only be used with a Theme.AppCompat theme (or descendant).
10-04 11:59:50.358 E/ThemeUtils(28538): View class androidx.appcompat.widget.AppCompatImageView is an AppCompat widget that can only be used with a Theme.AppCompat theme (or descendant).
10-04 11:59:50.360 E/ThemeUtils(28538): View class androidx.appcompat.widget.AppCompatImageView is an AppCompat widget that can only be used with a Theme.AppCompat theme (or descendant).
10-04 11:59:50.364 E/ThemeUtils(28538): View class androidx.appcompat.widget.AppCompatImageView is an AppCompat widget that can only be used with a Theme.AppCompat theme (or descendant).
10-04 11:59:50.366 D/FullDetailsActivity(28538): Item type: Movie
10-04 11:59:50.369 D/jellyfin-apiclient(28538): Adding request to queue: http://192.168.0.110:8096/Items/9f008cb009ab54e8abce841a272cbdc0/Similar?Limit=10&UserId=da9448d2-254a-4cb3-8c82-c9b871e1f545&Fields=PrimaryImageAspectRatio%2CChildCount&format=json
10-04 11:59:50.393 E/ThemeUtils(28538): View class org.jellyfin.androidtv.ui.ExpandableTextView is an AppCompat widget that can only be used with a Theme.AppCompat theme (or descendant).
10-04 11:59:50.408 E/ThemeUtils(28538): View class org.jellyfin.androidtv.ui.AsyncImageView is an AppCompat widget that can only be used with a Theme.AppCompat theme (or descendant).
10-04 11:59:50.442 E/ThemeUtils(28538): View class org.jellyfin.androidtv.ui.AsyncImageView is an AppCompat widget that can only be used with a Theme.AppCompat theme (or descendant).
10-04 11:59:50.460 E/ThemeUtils(28538): View class org.jellyfin.androidtv.ui.AsyncImageView is an AppCompat widget that can only be used with a Theme.AppCompat theme (or descendant).
10-04 11:59:50.476 I/ViewTarget(28538): Glide treats LayoutParams.WRAP_CONTENT as a request for an image the size of this device's screen dimensions. If you want to load the original image and are ok with the corresponding memory cost and OOMs (depending on the input size), use override(Target.SIZE_ORIGINAL). Otherwise, use LayoutParams.MATCH_PARENT, set layout_width and layout_height to fixed dimension, or use .override() with fixed dimensions.
10-04 11:59:50.477 I/ViewTarget(28538): Glide treats LayoutParams.WRAP_CONTENT as a request for an image the size of this device's screen dimensions. If you want to load the original image and are ok with the corresponding memory cost and OOMs (depending on the input size), use override(Target.SIZE_ORIGINAL). Otherwise, use LayoutParams.MATCH_PARENT, set layout_width and layout_height to fixed dimension, or use .override() with fixed dimensions.
10-04 11:59:50.537 I/jellyfin-apiclient(28538): Response received from: http://192.168.0.110:8096/Items/9f008cb009ab54e8abce841a272cbdc0/Similar?Limit=10&UserId=da9448d2-254a-4cb3-8c82-c9b871e1f545&Fields=PrimaryImageAspectRatio%2CChildCount&format=json
10-04 11:59:50.573 D/AndroidRuntime(28538): Shutting down VM
10-04 11:59:50.574 E/ACRA (28538): ACRA caught a NullPointerException for org.jellyfin.androidtv
10-04 11:59:50.574 E/ACRA (28538): java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Enum.toString()' on a null object reference
10-04 11:59:50.574 E/ACRA (28538): at org.jellyfin.androidtv.ui.card.MediaInfoCardView.setMediaStream(MediaInfoCardView.kt:31)
10-04 11:59:50.574 E/ACRA (28538): at org.jellyfin.androidtv.ui.presentation.InfoCardPresenter$ViewHolder.setItem(InfoCardPresenter.java:22)
10-04 11:59:50.574 E/ACRA (28538): at org.jellyfin.androidtv.ui.presentation.InfoCardPresenter.onBindViewHolder(InfoCardPresenter.java:42)
10-04 11:59:50.574 E/ACRA (28538): at androidx.leanback.widget.Presenter.onBindViewHolder(Presenter.java:140)
10-04 11:59:50.574 E/ACRA (28538): at androidx.leanback.widget.ItemBridgeAdapter.onBindViewHolder(ItemBridgeAdapter.java:422)
10-04 11:59:50.574 E/ACRA (28538): at androidx.recyclerview.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:7337)
10-04 11:59:50.574 E/ACRA (28538): at androidx.recyclerview.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:6194)
10-04 11:59:50.574 E/ACRA (28538): at androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:6460)
10-04 11:59:50.574 E/ACRA (28538): at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6300)
10-04 11:59:50.574 E/ACRA (28538): at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6296)
10-04 11:59:50.574 E/ACRA (28538): at androidx.leanback.widget.GridLayoutManager.getViewForPosition(GridLayoutManager.java:1118)
10-04 11:59:50.574 E/ACRA (28538): at androidx.leanback.widget.GridLayoutManager$2.createItem(GridLayoutManager.java:1646)
10-04 11:59:50.574 E/ACRA (28538): at androidx.leanback.widget.SingleRow.appendVisibleItems(SingleRow.java:113)
10-04 11:59:50.574 E/ACRA (28538): at androidx.leanback.widget.Grid.appendVisibleItems(Grid.java:397)
10-04 11:59:50.574 E/ACRA (28538): at androidx.leanback.widget.GridLayoutManager.appendVisibleItems(GridLayoutManager.java:1965)
10-04 11:59:50.574 E/ACRA (28538): at androidx.leanback.widget.GridLayoutManager.onLayoutChildren(GridLayoutManager.java:2318)
10-04 11:59:50.574 E/ACRA (28538): at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:4309)
10-04 11:59:50.574 E/ACRA (28538): at androidx.recyclerview.widget.RecyclerView.dispatchLayout(RecyclerView.java:4012)
10-04 11:59:50.574 E/ACRA (28538): at androidx.recyclerview.widget.RecyclerView.onLayout(RecyclerView.java:4578)
10-04 11:59:50.574 E/ACRA (28538): at android.view.View.layout(View.java:17640)
10-04 11:59:50.574 E/ACRA (28538): at android.view.ViewGroup.layout(ViewGroup.java:5575)
10-04 11:59:50.574 E/ACRA (28538): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1741)
10-04 11:59:50.574 E/ACRA (28538): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585)
10-04 11:59:50.574 E/ACRA (28538): at android.widget.LinearLayout.onLayout(LinearLayout.java:1494)
10-04 11:59:50.574 E/ACRA (28538): at android.view.View.layout(View.java:17640)
10-04 11:59:50.574 E/ACRA (28538): at android.view.ViewGroup.layout(ViewGroup.java:5575)
10-04 11:59:50.574 E/ACRA (28538): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1741)
10-04 11:59:50.574 E/ACRA (28538): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585)
10-04 11:59:50.574 E/ACRA (28538): at android.widget.LinearLayout.onLayout(LinearLayout.java:1494)
10-04 11:59:50.574 E/ACRA (28538): at android.view.View.layout(View.java:17640)
10-04 11:59:50.574 E/ACRA (28538): at android.view.ViewGroup.layout(ViewGroup.java:5575)
10-04 11:59:50.574 E/ACRA (28538): at androidx.recyclerview.widget.RecyclerView$LayoutManager.layoutDecoratedWithMargins(RecyclerView.java:9878)
10-04 11:59:50.574 E/ACRA (28538): at androidx.leanback.widget.GridLayoutManager.layoutChild(GridLayoutManager.java:1807)
10-04 11:59:50.574 E/ACRA (28538): at androidx.leanback.widget.GridLayoutManager$2.addItem(GridLayoutManager.java:1729)
10-04 11:59:50.574 E/ACRA (28538): at androidx.leanback.widget.SingleRow.appendVisibleItems(SingleRow.java:126)
10-04 11:59:50.574 E/ACRA (28538): at androidx.leanback.widget.Grid.appendVisibleItems(Grid.java:397)
10-04 11:59:50.574 E/ACRA (28538): at androidx.leanback.widget.GridLayoutManager.appendVisibleItems(GridLayoutManager.java:1965)
10-04 11:59:50.574 E/ACRA (28538): at androidx.leanback.widget.GridLayoutManager.onLayoutChildren(GridLayoutManager.java:2246)
10-04 11:59:50.574 E/ACRA (28538): at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep1(RecyclerView.java:4255)
10-04 11:59:50.574 E/ACRA (28538): at androidx.recyclerview.widget.RecyclerView.dispatchLayout(RecyclerView.java:4010)
10-04 11:59:50.574 E/ACRA (28538): at androidx.recyclerview.widget.RecyclerView.onLayout(RecyclerView.java:4578)
10-04 11:59:50.574 E/ACRA (28538): at android.view.View.layout(View.java:17640)
10-04 11:59:50.574 E/ACRA (28538): at android.view.ViewGroup.layout(ViewGroup.java:5575)
10-04 11:59:50.574 E/ACRA (28538): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
10-04 11:59:50.574 E/ACRA (28538): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
10-04 11:59:50.574 E/ACRA (28538): at android.view.View.layout(View.java:17640)
10-04 11:59:50.574 E/ACRA (28538): at android.view.ViewGroup.layout(ViewGroup.java:5575)
10-04 11:59:50.574 E/ACRA (28538): at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1079)
10-04 11:59:50.574 E/ACRA (28538): at android.view.View.layout(View.java:17640)
10-04 11:59:50.575 E/ACRA (28538): at android.view.ViewGroup.layout(ViewGroup.java:5575)
10-04 11:59:50.575 E/ACRA (28538): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
10-04 11:59:50.575 E/ACRA (28538): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
10-04 11:59:50.575 E/ACRA (28538): at android.view.View.layout(View.java:17640)
10-04 11:59:50.575 E/ACRA (28538): at android.view.ViewGroup.layout(ViewGroup.java:5575)
10-04 11:59:50.575 E/ACRA (28538): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1741)
10-04 11:59:50.575 E/ACRA (28538): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585)
10-04 11:59:50.575 E/ACRA (28538): at android.widget.LinearLayout.onLayout(LinearLayout.java:1494)
10-04 11:59:50.575 E/ACRA (28538): at android.view.View.layout(View.java:17640)
10-04 11:59:50.575 E/ACRA (28538): at android.view.ViewGroup.layout(ViewGroup.java:5575)
10-04 11:59:50.575 E/ACRA (28538): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
10-04 11:59:50.575 E/ACRA (28538): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
10-04 11:59:50.575 E/ACRA (28538): at com.android.internal.policy.DecorView.onLayout(DecorView.java:742)
10-04 11:59:50.575 E/ACRA (28538): at android.view.View.layout(View.java:17640)
10-04 11:59:50.575 E/ACRA (28538): at android.view.ViewGroup.layout(ViewGroup.java:5575)
10-04 11:59:50.575 E/ACRA (28538): at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2356)
10-04 11:59:50.575 E/ACRA (28538): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2078)
10-04 11:59:50.575 E/ACRA (28538): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1256)
10-04 11:59:50.575 E/ACRA (28538): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6374)
10-04 11:59:50.575 E/ACRA (28538): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:878)
10-04 11:59:50.575 E/ACRA (28538): at android.view.Choreographer.doCallbacks(Choreographer.java:689)
10-04 11:59:50.575 E/ACRA (28538): at android.view.Choreographer.doFrame(Choreographer.java:623)
10-04 11:59:50.575 E/ACRA (28538): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:864)
10-04 11:59:50.575 E/ACRA (28538): at android.os.Handler.handleCallback(Handler.java:751)
10-04 11:59:50.575 E/ACRA (28538): at android.os.Handler.dispatchMessage(Handler.java:95)
10-04 11:59:50.575 E/ACRA (28538): at android.os.Looper.loop(Looper.java:154)
10-04 11:59:50.575 E/ACRA (28538): at android.app.ActivityThread.main(ActivityThread.java:6194)
10-04 11:59:50.575 E/ACRA (28538): at java.lang.reflect.Method.invoke(Native Method)
10-04 11:59:50.575 E/ACRA (28538): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:911)
10-04 11:59:50.575 E/ACRA (28538): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:801)
10-04 11:59:50.575 D/ACRA (28538): Building report
10-04 11:59:50.576 D/ACRA (28538): Starting collectors with priority FIRST
10-04 11:59:50.577 D/ACRA (28538): Calling collector org.acra.collector.DropBoxCollector
10-04 11:59:50.577 D/ACRA (28538): Collector org.acra.collector.DropBoxCollector completed
10-04 11:59:50.578 D/ACRA (28538): Calling collector org.acra.collector.LogCatCollector
10-04 11:59:50.578 D/ACRA (28538): Calling collector org.acra.collector.StacktraceCollector
10-04 11:59:50.579 D/ACRA (28538): Collector org.acra.collector.StacktraceCollector completed
10-04 11:59:50.582 D/ACRA (28538): Retrieving logcat output (buffer:default)...
App version: 0.14.4
(140499
)
Package name: org.jellyfin.androidtv
Build:
{"BOARD":"mantis","BOOTLOADER":"unknown","BRAND":"Amazon","CPU_ABI":"armeabi-v7a","CPU_ABI2":"armeabi","DEVICE":"mantis","DISPLAY":"NS6280","FINGERPRINT":"Amazon\/mantis\/mantis:6.0\/NS6280\/3236N:user\/amz-p,release-keys","HARDWARE":"mt8695","HOST":"i3-ri-14-use1a-b-80","ID":"NS6280","IS_DEBUGGABLE":false,"IS_EMULATOR":false,"MANUFACTURER":"Amazon","MODEL":"AFTMM","PERMISSIONS_REVIEW_REQUIRED":false,"PRODUCT":"mantis","RADIO":"unknown","REQ_BATTERY_LEVEL":0.3,"SUPPORTED_32_BIT_ABIS":["armeabi-v7a","armeabi"],"SUPPORTED_64_BIT_ABIS":[],"SUPPORTED_ABIS":["armeabi-v7a","armeabi"],"TAGS":"amz-p,release-keys","TIME":1621639613000,"TYPE":"user","UNKNOWN":"unknown","USER":"build","VERSION":{"ACTIVE_CODENAMES":[],"BASE_OS":"NHG47K","CODENAME":"REL","INCREMENTAL":"0005067547780","PREVIEW_SDK_INT":0,"RELEASE":"7.1.2","RESOURCES_SDK_INT":25,"SDK":"25","SDK_INT":25,"SECURITY_PATCH":"2019-09-01"}}
Build config:
{"APPLICATION_ID":"org.jellyfin.androidtv","BUILD_TYPE":"release","DEBUG":false,"DEVELOPMENT":false,"VERSION_CODE":140499,"VERSION_NAME":"0.14.4"}
Android version: 7.1.2
Device brand: Amazon
Device product: mantis
Device model: AFTMM
Start time: 2022-10-04T11:59:03.624-07:00
Crash time: `2022-10-04T11:59:50.634-07:00``
Looks like that issue only happens in the current 0.14 branch. A workaround should be to disable debugging options in the advanced preferences. I'm looking into a proper fix now.
New build is running now (reused the same version) with a fix. When testing I did it on our master branch which includes all the changes for the next 0.15 version where the issue did not happen. I've backported a change from some time ago (#1997) to fix in in 0.14 too.
To follow up... I just tested a legitimate movie media item (the same movie from the mediainfo in the original post above). The crashes are completely resolved.
As for the test sample video ''Jellyfin Prerolls + Menu Stream.mp4' still being subject to a crash... Once I (falsely) identify + match it to any random movie, allowing it to retrieve and populate some movie metadata, it's crash no longer occurs. So if there's a variable condition at play here for this particular video test sample's crash, it may have something to do with that (lack of identifying match or movie metadata).
Edit: Or if I put that video test sample into a 'Photos' library, that also works. No crashes there.
Issue resolved as far as I'm corncerned. Upwards and onwards. 👍
Describe the bug
When adding new media to movie library in the form of an .mp4 video file with embedded menu stream/timed text chapters, it results in an Android TV app crash when that item is selected from the 'Latest Movies' row... and also when the movie library itself is selected from the 'My Media' row. The former action results in the movie's backdrop being displayed but remains stuck with nothing else loading except the user avatar and the clock on the top right corner. From here the user can only use the back button and the app then crashes. The latter action of selecting the movie library from the 'My Media' row results in an immediate crash.
This behavior does not occur in the web app or native app, the media is fully navigable, viewable, and playable, and embedded chapters of aforementioned .mp4 video file are fully seekable.
(On Android TV app) I am able to resolve this issue by re-adding the media item as either an .mp4 file with embedded chapters removed, or by an re-adding it as an .mkv file with those very same embedded chapters. When doing either of these two things, the crash ceases to occur. Alternatively, the problematic media item can simply be removed entirely without replacement, and then selecting movie library from the 'My Media' row will no longer result in a crash, instead it loads normally again.
I should note that this issue only began occurring after a recent server update to v10.8.5 And it seems to only affect new media additions. Previously added .mp4 video files with embedded chapters are unaffected somehow. Those media items can be selected, viewed, and played back normally, with no crashes and no issues.
Mediainfo of a problematic video file is as follows `General Complete name : Media/Movies/The Willies (1990)/The.Willies.1990.DVDRip.x264-HANDJOB.mp4 Format : MPEG-4 Format profile : Base Media Codec ID : isom (isom/iso2/avc1/mp41) File size : 2.04 GiB Duration : 1 h 31 min Overall bit rate : 3 206 kb/s Movie name : The Willies Writing application : Lavf58.29.100 Comment : The.Willies.1990.DVDRip.x264-HANDJOB
Video ID : 1 Format : AVC Format/Info : Advanced Video Codec Format profile : High@L4 Format settings : CABAC / 16 Ref Frames Format settings, CABAC : Yes Format settings, Reference frames : 16 frames Codec ID : avc1 Codec ID/Info : Advanced Video Coding Duration : 1 h 31 min Bit rate : 2 753 kb/s Width : 704 pixels Height : 480 pixels Display aspect ratio : 4:3 Original display aspect ratio : 4:3 Frame rate mode : Constant Frame rate : 23.976 (24000/1001) FPS Color space : YUV Chroma subsampling : 4:2:0 Bit depth : 8 bits Scan type : Progressive Bits/(Pixel*Frame) : 0.340 Stream size : 1.75 GiB (86%) Writing library : x264 core 142 r2479 dd79a61 Encoding settings : cabac=1 / ref=16 / deblock=1:-3:-3 / analyse=0x3:0x133 / me=umh / subme=10 / psy=1 / psy_rd=1.00:0.00 / mixed_ref=1 / me_range=32 / chroma_me=1 / trellis=2 / 8x8dct=1 / cqm=0 / deadzone=21,11 / fast_pskip=0 / chroma_qp_offset=-2 / threads=12 / lookahead_threads=1 / sliced_threads=0 / nr=0 / decimate=0 / interlaced=0 / bluray_compat=0 / constrained_intra=0 / bframes=5 / b_pyramid=2 / b_adapt=2 / b_bias=0 / direct=3 / weightb=1 / open_gop=0 / weightp=2 / keyint=240 / keyint_min=24 / scenecut=40 / intra_refresh=0 / rc_lookahead=60 / rc=crf / mbtree=0 / crf=18.0 / qcomp=0.60 / qpmin=0 / qpmax=69 / qpstep=4 / vbv_maxrate=25000 / vbv_bufsize=31250 / crf_max=0.0 / nal_hrd=none / filler=0 / ip_ratio=1.40 / pb_ratio=1.30 / aq=1:1.00 Color range : Limited Color primaries : BT.601 NTSC Transfer characteristics : BT.709 Matrix coefficients : BT.601 Menus : 3 Codec configuration box : avcC
Audio ID : 2 Format : AC-3 Format/Info : Audio Coding 3 Commercial name : Dolby Digital Codec ID : ac-3 Duration : 1 h 31 min Bit rate mode : Constant Bit rate : 448 kb/s Channel(s) : 6 channels Channel layout : L R C LFE Ls Rs Sampling rate : 48.0 kHz Frame rate : 31.250 FPS (1536 SPF) Compression mode : Lossy Stream size : 292 MiB (14%) Language : English Service kind : Complete Main Default : Yes Alternate group : 1 Menus : 3
Menu ID : 3 Format : Timed Text Codec ID : text Duration : 1 h 31 min Language : English Menu For : 1,2 00:00:00.000 : Grosser Than Gross 00:12:59.112 : Back In The Day 00:23:40.169 : Scary Stall 00:31:29.096 : Back For Seconds 00:40:48.655 : Gordy Belcher 00:51:37.136 : Experiments 00:58:39.599 : Truth Televised 01:08:30.398 : Being Mean 01:16:35.800 : Spivey's Gift 01:24:55.465 : What's Real`
Logs
CRASH #1 (selecting item from 'Latest Movies')
client: Jellyfin for Android TV client_version: 0.14.3 client_repository: https://github.com/jellyfin/jellyfin-androidtv type: crash_report format: markdown
Logs
Stack Trace:
Logcat:
App information
App version:
0.14.3
(140399
)Package name:
org.jellyfin.androidtv
Build:
Build config:
Device information
Android version:
7.1.2
Device brand:
Amazon
Device product:
mantis
Device model:
AFTMM
Crash information
Start time:
2022-09-29T15:04:06.091-07:00
Crash time:
2022-09-29T15:05:05.750-07:00
CRASH #2 (selecting movie library from the 'My Media' row)
client: Jellyfin for Android TV client_version: 0.14.3 client_repository: https://github.com/jellyfin/jellyfin-androidtv type: crash_report format: markdown
Logs
Stack Trace:
Logcat:
App information
App version:
0.14.3
(140399
)Package name:
org.jellyfin.androidtv
Build:
Build config:
Device information
Android version:
7.1.2
Device brand:
Amazon
Device product:
mantis
Device model:
AFTMM
Crash information
Start time:
2022-09-29T15:06:01.373-07:00
Crash time:
2022-09-29T15:06:09.242-07:00
Application version
0.14.3
Where did you install the app from?
Sideloaded APK
Device information
Amazon Fire Stick 4k
Android version
Fire OS 6.2.8.0 / Wolf Launcher v0.1.9-Wolf
Jellyfin server version
10.8.5