jellyfin-androidtv
jellyfin-androidtv copied to clipboard
Strange Transcoding behavior with NVIDIA Shield Pro
Describe the bug
When the Bitrate limit is set to "Auto," videos are randomly transcoded at 26.3Mbps. If the file is huge (for example a 93GB MKV) then forcing the bitrate to 120 will crash Jellyfin. Depending on the movie, it will stop crashing once I set it to around 60 or 70 Mbps.
On a movie around 20-25GB, the same weird 26.3Mbps transcoding happens with the bitrate set to "auto." But now the bitrate can be set as high as 120 and the video will direct stream as long as the bitrate is set above the native bitrate of the file.
The Transcoding reasons as viewed in the Dashboard is not consistent either. Sometimes it is because the max bitrate is exceeded, other times because the format isn't supported, or the audio codec isn't supported. The reason will change as the bitrate is set at different values.
I'm running the Shield on gigabit ethernet, with speeds over 800Mbps recorded.
Logs
client: Jellyfin for Android TV client_version: 0.16.11 client_repository: https://github.com/jellyfin/jellyfin-androidtv type: crash_report format: markdown
Logs
Stack Trace:
java.lang.NullPointerException: Attempt to get length of null array
at org.jellyfin.androidtv.ui.playback.VideoManager.setVLCAudioTrack(VideoManager.java:677)
at org.jellyfin.androidtv.ui.playback.PlaybackController.switchAudioStream(PlaybackController.java:933)
at org.jellyfin.androidtv.ui.playback.PlaybackController.onPrepared(PlaybackController.java:1472)
at org.jellyfin.androidtv.ui.playback.VideoManager.lambda$setupVLCListeners$3$org-jellyfin-androidtv-ui-playback-VideoManager(VideoManager.java:993)
at org.jellyfin.androidtv.ui.playback.VideoManager$$ExternalSyntheticLambda10.onEvent(Unknown Source:2)
at org.jellyfin.androidtv.ui.playback.VlcEventHandler.onEvent(VlcEventHandler.kt:14)
at org.jellyfin.androidtv.ui.playback.VlcEventHandler.onEvent(VlcEventHandler.kt:5)
at org.videolan.libvlc.VLCObject$1EventRunnable.run(VLCObject.java:170)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7668)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
Logcat:
06-25 13:30:29.820 W/MediaCodecCapabilitiesTest(15910): at org.jellyfin.androidtv.ui.playback.PlaybackController.play(PlaybackController.java:438)
06-25 13:30:29.820 W/MediaCodecCapabilitiesTest(15910): at org.jellyfin.androidtv.ui.playback.CustomPlaybackOverlayFragment.onActivityCreated(CustomPlaybackOverlayFragment.java:351)
06-25 13:30:29.820 W/MediaCodecCapabilitiesTest(15910): at androidx.fragment.app.Fragment.performActivityCreated(Fragment.java:3156)
06-25 13:30:29.820 W/MediaCodecCapabilitiesTest(15910): at androidx.fragment.app.FragmentStateManager.activityCreated(FragmentStateManager.java:619)
06-25 13:30:29.820 W/MediaCodecCapabilitiesTest(15910): at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:275)
06-25 13:30:29.820 W/MediaCodecCapabilitiesTest(15910): at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1943)
06-25 13:30:29.820 W/MediaCodecCapabilitiesTest(15910): at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1839)
06-25 13:30:29.820 W/MediaCodecCapabilitiesTest(15910): at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1782)
06-25 13:30:29.820 W/MediaCodecCapabilitiesTest(15910): at androidx.fragment.app.FragmentManager$5.run(FragmentManager.java:565)
06-25 13:30:29.820 W/MediaCodecCapabilitiesTest(15910): at android.os.Handler.handleCallback(Handler.java:938)
06-25 13:30:29.820 W/MediaCodecCapabilitiesTest(15910): at android.os.Handler.dispatchMessage(Handler.java:99)
06-25 13:30:29.820 W/MediaCodecCapabilitiesTest(15910): at android.os.Looper.loop(Looper.java:223)
06-25 13:30:29.820 W/MediaCodecCapabilitiesTest(15910): at android.app.ActivityThread.main(ActivityThread.java:7668)
06-25 13:30:29.820 W/MediaCodecCapabilitiesTest(15910): at java.lang.reflect.Method.invoke(Native Method)
06-25 13:30:29.820 W/MediaCodecCapabilitiesTest(15910): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
06-25 13:30:29.820 W/MediaCodecCapabilitiesTest(15910): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
06-25 13:30:29.823 I/ProfileHelper$deviceAV1CodecProfile(15910): *** Does NOT support AV1
06-25 13:30:29.843 D/jellyfin-apiclient(15910): Adding request to queue: https://jellyfin.ratner.com/Items/33160096-c244-9466-358c-21072682a228/PlaybackInfo?format=json
06-25 13:30:29.850 W/AudioManager(15910): Use of stream types is deprecated for operations other than volume control
06-25 13:30:29.850 W/AudioManager(15910): See the documentation of requestAudioFocus() for what to use instead with android.media.AudioAttributes to qualify your playback use case
06-25 13:30:29.899 I/jellyfin-apiclient(15910): Response received from: https://jellyfin.ratner.com/Items/33160096-c244-9466-358c-21072682a228/PlaybackInfo?format=json
06-25 13:30:29.903 I/PlaybackController(15910): VLC would direct stream
06-25 13:30:29.907 D/jellyfin-apiclient(15910): Adding request to queue: https://jellyfin.ratner.com/Items/33160096-c244-9466-358c-21072682a228/PlaybackInfo?format=json
06-25 13:30:29.961 I/jellyfin-apiclient(15910): Response received from: https://jellyfin.ratner.com/Items/33160096-c244-9466-358c-21072682a228/PlaybackInfo?format=json
06-25 13:30:29.964 I/PlaybackController(15910): Internal player would transcode
06-25 13:30:29.964 I/PlaybackController(15910): Explicit deinterlacing will NOT be used
06-25 13:30:29.965 I/PlaybackController(15910): User preferred player is: AUTO
06-25 13:30:29.965 I/PlaybackController(15910): Preferring VLC
06-25 13:30:29.998 I/VideoManager(15910): Network buffer set to 600
06-25 13:30:30.000 E/VLC (15910): [00000023d984a820/3e26] libvlc audio output: GetStaticFieldID(AudioFormat.ENCODING_PCM_32BIT) failed
06-25 13:30:30.002 D/VideoManager(15910): Surface attached
06-25 13:30:30.004 D/PlaybackController(15910): default audio index set to 1
06-25 13:30:30.004 D/PlaybackController(15910): default audio index set to 1 remote default 1
06-25 13:30:30.005 D/PlaybackController(15910): default sub index set to -1 remote default -1
06-25 13:30:30.005 I/PlaybackController(15910): Playing back in VLC.
06-25 13:30:30.006 D/VideoManager(15910): Setting playback speed: 1.000000
06-25 13:30:30.011 I/VideoManager(15910): Video path set to: https://jellyfin.ratner.com/Videos/33160096-c244-9466-358c-21072682a228/stream.mpegts?api_key=90601c29439c4b939069caae13e7026e&DeviceId=69ddffe1dfc32f51f21d6187eddfaa15672b7640&MediaSourceId=33160096c2449466358c21072682a228&Tag=a05431c383f3b9644b2c4fa3553a0a60&Static=true
06-25 13:30:30.013 D/VideoManager(15910): Setting video index to: 0
06-25 13:30:30.015 D/jellyfin-apiclient(15910): Adding request to queue: https://jellyfin.ratner.com/Sessions/Playing
06-25 13:30:30.016 I/ReportingHelper(15910): Playback of Avatar: The Way of Water started.
06-25 13:30:30.080 I/jellyfin-apiclient(15910): Response received from: https://jellyfin.ratner.com/Sessions/Playing
06-25 13:30:30.567 I/org.jellyfin.sdk.api.sockets.OkHttpWebsocketSession(15910): Receiving (raw) message {"MessageId":"aa9bdcceebda4c8691fd4c8b8e2c5488","Data":{"UserId":"3636693f5d414b17914b354badc9ad91","UserDataList":[{"PlaybackPositionTicks":0,"PlayCount":9,"IsFavorite":false,"LastPlayedDate":"2024-06-25T18:30:31.3573656Z","Played":false,"Key":"33160096-c244-9466-358c-21072682a228","ItemId":"33160096c2449466358c21072682a228"},{"UnplayedItemCount":669,"PlaybackPositionTicks":0,"PlayCount":0,"IsFavorite":false,"Played":false,"Key":"c0830691-392f-b8d9-0b5b-290cf4462736","ItemId":"c0830691392fb8d90b5b290cf4462736"}]},"MessageType":"UserDataChanged"}
06-25 13:30:30.835 W/VLC (15910): [00000023a986c440/3e88] libvlc demux: this does not look like a TS stream, continuing
06-25 13:30:30.835 W/VLC (15910): [00000023a986c440/3e88] libvlc demux: lost synchro
06-25 13:30:30.836 D/VideoManager(15910): re-retrieved libVLC audio track index -1
06-25 13:30:30.837 D/jellyfin-apiclient(15910): Adding request to queue: https://jellyfin.ratner.com/Sessions/Playing/Progress
06-25 13:30:30.837 I/PlaybackController(15910): Play method: Direct
06-25 13:30:30.837 I/PlaybackController(15910): Turning off subs
06-25 13:30:30.837 D/PlaybackController(15910): Setting subtitle index to: -1
06-25 13:30:30.839 D/VideoManager(15910): re-retrieved libVLC audio track index -1
06-25 13:30:30.839 D/PlaybackController(15910): trying to switch audio stream from -1 to 1
06-25 13:30:30.839 D/VideoManager(15910): Setting VLC audio track index to: 1
06-25 13:30:30.839 D/AndroidRuntime(15910): Shutting down VM
--------- beginning of crash
06-25 13:30:30.840 E/AndroidRuntime(15910): FATAL EXCEPTION: main
06-25 13:30:30.840 E/AndroidRuntime(15910): Process: org.jellyfin.androidtv, PID: 15910
06-25 13:30:30.840 E/AndroidRuntime(15910): java.lang.NullPointerException: Attempt to get length of null array
06-25 13:30:30.840 E/AndroidRuntime(15910): at org.jellyfin.androidtv.ui.playback.VideoManager.setVLCAudioTrack(VideoManager.java:677)
06-25 13:30:30.840 E/AndroidRuntime(15910): at org.jellyfin.androidtv.ui.playback.PlaybackController.switchAudioStream(PlaybackController.java:933)
06-25 13:30:30.840 E/AndroidRuntime(15910): at org.jellyfin.androidtv.ui.playback.PlaybackController.onPrepared(PlaybackController.java:1472)
06-25 13:30:30.840 E/AndroidRuntime(15910): at org.jellyfin.androidtv.ui.playback.VideoManager.lambda$setupVLCListeners$3$org-jellyfin-androidtv-ui-playback-VideoManager(VideoManager.java:993)
06-25 13:30:30.840 E/AndroidRuntime(15910): at org.jellyfin.androidtv.ui.playback.VideoManager$$ExternalSyntheticLambda10.onEvent(Unknown Source:2)
06-25 13:30:30.840 E/AndroidRuntime(15910): at org.jellyfin.androidtv.ui.playback.VlcEventHandler.onEvent(VlcEventHandler.kt:14)
06-25 13:30:30.840 E/AndroidRuntime(15910): at org.jellyfin.androidtv.ui.playback.VlcEventHandler.onEvent(VlcEventHandler.kt:5)
06-25 13:30:30.840 E/AndroidRuntime(15910): at org.videolan.libvlc.VLCObject$1EventRunnable.run(VLCObject.java:170)
06-25 13:30:30.840 E/AndroidRuntime(15910): at android.os.Handler.handleCallback(Handler.java:938)
06-25 13:30:30.840 E/AndroidRuntime(15910): at android.os.Handler.dispatchMessage(Handler.java:99)
06-25 13:30:30.840 E/AndroidRuntime(15910): at android.os.Looper.loop(Looper.java:223)
06-25 13:30:30.840 E/AndroidRuntime(15910): at android.app.ActivityThread.main(ActivityThread.java:7668)
06-25 13:30:30.840 E/AndroidRuntime(15910): at java.lang.reflect.Method.invoke(Native Method)
06-25 13:30:30.840 E/AndroidRuntime(15910): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
06-25 13:30:30.840 E/AndroidRuntime(15910): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
06-25 13:30:30.840 E/ACRA (15910): ACRA caught a NullPointerException for org.jellyfin.androidtv
06-25 13:30:30.840 E/ACRA (15910): java.lang.NullPointerException: Attempt to get length of null array
06-25 13:30:30.840 E/ACRA (15910): at org.jellyfin.androidtv.ui.playback.VideoManager.setVLCAudioTrack(VideoManager.java:677)
06-25 13:30:30.840 E/ACRA (15910): at org.jellyfin.androidtv.ui.playback.PlaybackController.switchAudioStream(PlaybackController.java:933)
06-25 13:30:30.840 E/ACRA (15910): at org.jellyfin.androidtv.ui.playback.PlaybackController.onPrepared(PlaybackController.java:1472)
06-25 13:30:30.840 E/ACRA (15910): at org.jellyfin.androidtv.ui.playback.VideoManager.lambda$setupVLCListeners$3$org-jellyfin-androidtv-ui-playback-VideoManager(VideoManager.java:993)
06-25 13:30:30.840 E/ACRA (15910): at org.jellyfin.androidtv.ui.playback.VideoManager$$ExternalSyntheticLambda10.onEvent(Unknown Source:2)
06-25 13:30:30.840 E/ACRA (15910): at org.jellyfin.androidtv.ui.playback.VlcEventHandler.onEvent(VlcEventHandler.kt:14)
06-25 13:30:30.840 E/ACRA (15910): at org.jellyfin.androidtv.ui.playback.VlcEventHandler.onEvent(VlcEventHandler.kt:5)
06-25 13:30:30.840 E/ACRA (15910): at org.videolan.libvlc.VLCObject$1EventRunnable.run(VLCObject.java:170)
06-25 13:30:30.840 E/ACRA (15910): at android.os.Handler.handleCallback(Handler.java:938)
06-25 13:30:30.840 E/ACRA (15910): at android.os.Handler.dispatchMessage(Handler.java:99)
06-25 13:30:30.840 E/ACRA (15910): at android.os.Looper.loop(Looper.java:223)
06-25 13:30:30.840 E/ACRA (15910): at android.app.ActivityThread.main(ActivityThread.java:7668)
06-25 13:30:30.840 E/ACRA (15910): at java.lang.reflect.Method.invoke(Native Method)
06-25 13:30:30.840 E/ACRA (15910): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
06-25 13:30:30.840 E/ACRA (15910): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
06-25 13:30:30.840 D/ACRA (15910): Building report
06-25 13:30:30.841 D/ACRA (15910): Starting collectors with priority FIRST
06-25 13:30:30.841 D/ACRA (15910): Calling collector org.acra.collector.DropBoxCollector
06-25 13:30:30.842 D/ACRA (15910): Calling collector org.acra.collector.LogCatCollector
06-25 13:30:30.842 D/ACRA (15910): Collector org.acra.collector.DropBoxCollector completed
06-25 13:30:30.842 D/ACRA (15910): Calling collector org.acra.collector.StacktraceCollector
06-25 13:30:30.842 D/ACRA (15910): Collector org.acra.collector.StacktraceCollector completed
06-25 13:30:30.849 D/ACRA (15910): Retrieving logcat output (buffer:default)...
06-25 13:30:30.856 W/VLC (15910): [00000023a986c440/3e88] libvlc demux: discontinuity indicator (pid=2048)
06-25 13:30:30.856 W/VLC (15910): [00000023a986c440/3e88] libvlc demux: lost synchro
App information
App version: 0.16.11
(161199
)
Package name: org.jellyfin.androidtv
Build:
{"BOARD":"darcy","BOOTLOADER":"32.00.2019.50-t210-69ebfcbe","BRAND":"NVIDIA","CPU_ABI":"arm64-v8a","CPU_ABI2":"","DEVICE":"mdarcy","DISPLAY":"RQ1A.210105.003.7825230_3167.5736","FINGERPRINT":"NVIDIA\/mdarcy\/mdarcy:11\/RQ1A.210105.003\/7825230_3167.5736:user\/release-keys","HARDWARE":"darcy","HOST":"mobile-u64-5308-d7000","ID":"RQ1A.210105.003","IS_DEBUGGABLE":false,"IS_EMULATOR":false,"MANUFACTURER":"NVIDIA","MODEL":"SHIELD Android TV","PERMISSIONS_REVIEW_REQUIRED":true,"PRODUCT":"mdarcy","RADIO":"unknown","SUPPORTED_32_BIT_ABIS":["armeabi-v7a","armeabi"],"SUPPORTED_64_BIT_ABIS":["arm64-v8a"],"SUPPORTED_ABIS":["arm64-v8a","armeabi-v7a","armeabi"],"TAGS":"release-keys","TIME":1665975826000,"TYPE":"user","UNKNOWN":"unknown","USER":"NVIDIA","VERSION":{"ACTIVE_CODENAMES":[],"BASE_OS":"","CODENAME":"REL","INCREMENTAL":"7825230_3167.5736","PREVIEW_SDK_FINGERPRINT":"REL","PREVIEW_SDK_INT":0,"RELEASE":"11","RELEASE_OR_CODENAME":"11","SDK":"30","SDK_INT":30,"SECURITY_PATCH":"2022-04-05"}}
Build config:
{"APPLICATION_ID":"org.jellyfin.androidtv","BUILD_TYPE":"release","DEBUG":false,"DEVELOPMENT":false,"VERSION_CODE":161199,"VERSION_NAME":"0.16.11"}
Device information
Android version: 11
Device brand: NVIDIA
Device product: mdarcy
Device model: SHIELD Android TV
Crash information
Start time: 2024-06-25T13:30:20.059-05:00
Crash time: 2024-06-25T13:30:30.882-05:00
FFmpeg logs
No response
Media info of the file
Avatar The Way of Water (2022) - BR-DISK/Bluray
Container: mpegts
Path: /mnt/theater/movies/Avatar The Way of Water (2022)/Avatar The Way of Water (2022) - BR-DISK.iso
Size: 81014 MB
Video
Title: 4K HEVC HDR
Codec: HEVC
Codec tag: HDMV
AVC: No
Profile: Main 10
Level: 153
Resolution: 3840x2160
Aspect ratio: 16:9
Anamorphic: No
Interlaced: No
Framerate: 23.976025
Bitrate: 58852 kbps
Bit depth: 10 bit
Video range: HDR
Video range type: HDR10
Color space: bt2020nc
Color transfer: smpte2084
Color primaries: bt2020
Pixel format: yuv420p10le
Ref frames: 1
Audio
Title: TRUEHD - 7.1
Codec: TRUEHD
Codec tag: AC-3
AVC: No
Layout: 7.1
Channels: 8 ch
Sample rate: 48000 Hz
Bit depth: 24 bit
Default: No
Forced: No
External: No
Audio
Title: Dolby Digital - 5.1
Codec: AC3
Codec tag: AC-3
AVC: No
Layout: 5.1
Channels: 6 ch
Bitrate: 640 kbps
Sample rate: 48000 Hz
Default: No
Forced: No
External: No
Audio
Title: DTS-HD MA - Stereo
Codec: DTS
AVC: No
Profile: DTS-HD MA
Layout: stereo
Channels: 2 ch
Sample rate: 48000 Hz
Bit depth: 24 bit
Default: No
Forced: No
External: No
Audio
Title: Dolby Digital - Stereo
Codec: AC3
Codec tag: AC-3
AVC: No
Layout: stereo
Channels: 2 ch
Bitrate: 320 kbps
Sample rate: 48000 Hz
Default: No
Forced: No
External: No
Audio
Title: Dolby Digital - 5.1
Codec: AC3
Codec tag: AC-3
AVC: No
Layout: 5.1
Channels: 6 ch
Bitrate: 640 kbps
Sample rate: 48000 Hz
Default: No
Forced: No
External: No
Audio
Title: Dolby Digital - 5.1
Codec: AC3
Codec tag: AC-3
AVC: No
Layout: 5.1
Channels: 6 ch
Bitrate: 640 kbps
Sample rate: 48000 Hz
Default: No
Forced: No
External: No
Audio
Title: Dolby Digital+ - 7.1
Codec: EAC3
Codec tag: AC-3
AVC: No
Layout: 7.1
Channels: 8 ch
Bitrate: 1024 kbps
Sample rate: 48000 Hz
Default: No
Forced: No
External: No
Audio
Title: Dolby Digital+ - 7.1
Codec: EAC3
Codec tag: AC-3
AVC: No
Layout: 7.1
Channels: 8 ch
Bitrate: 1024 kbps
Sample rate: 48000 Hz
Default: No
Forced: No
External: No
Subtitle
Title: Undefined - PGSSUB
Codec: PGSSUB
AVC: No
Resolution: 1920x1080
Default: No
Forced: No
External: No
Subtitle
Title: Undefined - PGSSUB
Codec: PGSSUB
AVC: No
Resolution: 1920x1080
Default: No
Forced: No
External: No
Subtitle
Title: Undefined - PGSSUB
Codec: PGSSUB
AVC: No
Resolution: 1920x1080
Default: No
Forced: No
External: No
Subtitle
Title: Undefined - PGSSUB
Codec: PGSSUB
AVC: No
Resolution: 1920x1080
Default: No
Forced: No
External: No
Subtitle
Title: Undefined - PGSSUB
Codec: PGSSUB
AVC: No
Resolution: 1920x1080
Default: No
Forced: No
External: No
Subtitle
Title: Undefined - PGSSUB
Codec: PGSSUB
AVC: No
Resolution: 1920x1080
Default: No
Forced: No
External: No
Subtitle
Title: Undefined - PGSSUB
Codec: PGSSUB
AVC: No
Resolution: 1920x1080
Default: No
Forced: No
External: No
Audio
Title: Dolby Digital - 0 ch
Codec: AC3
AVC: No
Bitrate: 192 kbps
Default: No
Forced: No
External: No
Application version
0.16.11
Device information
Nvidia Shield Pro 2019
Android version
Android 11
Jellyfin server version
10.9.6