Comments (25)
I don't think this affects the behaviour, but @nielsvanvelzen cherry picked the first commit in that PR for v0.16.5 rather than all of them. Therefore v0.16.5 contains the initial unfixed-up version of my change. I assume this was a mistake.
It wasn't intentional and I've now cherrypicked the missing commits to make sure they will be in the next 0.16 release.
from jellyfin-androidtv.
Yeah, you are correct. I failed to notice that the software encoder was Main not Main10.
Current:
Main 5.2 plays without transcoding
Main10 5.2 transcodes
Without the level checks in the prior build, Main10 5.2 played without transcoding.
from jellyfin-androidtv.
This is odd. The only thing I can think of is that MediaCodec is reporting a lower level than is really supported, causing transcoding. But even that I can't believe is true.
Level 156 is profile level 5.2, which the Shield should definitely support. Does logcat show the device profile being sent to the server? Or maybe the server logs show it. This would certainly help narrow down the problem.
I'll take a look to see what could be causing this, even though I don't have a Shield to test on.
from jellyfin-androidtv.
I don't think this affects the behaviour, but @nielsvanvelzen cherry picked the first commit in that PR for v0.16.5 rather than all of them. Therefore v0.16.5 contains the initial unfixed-up version of my change. I assume this was a mistake.
As I said, shouldn't affect anything, but more confusing to debug.
from jellyfin-androidtv.
Is there any chance you can run dumpsys media.player
in an adb shell and attach the result? This should dump exactly what MediaCodec reports as supported on the device.
from jellyfin-androidtv.
Nothing transcoded before last update, Does this help?
Decoder "OMX.Nvidia.h265.decode" supports
aliases: []
attributes: 0xa: [
encoder: 0,
vendor: 1,
software-only: 0,
hw-accelerated: 1 ]
owner: "default"
rank: 256
profile/levels: [
1/131072 (Main/High 5.1),
2/131072 (Main10/High 5.1),
4096/131072 (Main10HDR10/High 5.1) ]
colors: [
0x7f420888 (YUV420Flexible),
0x15 (YUV420SemiPlanar) ]
details: AMessage(what = 0x00000000) = {
string alignment = "2x2"
string bitrate-range = "1-120000000"
string block-size = "16x16"
string blocks-per-second-range = "1-2000000"
int32_t feature-adaptive-playback = 0
int32_t feature-low-latency = 0
string measured-frame-rate-1280x720-range = "1030-1030"
string measured-frame-rate-1920x1088-range = "409-589"
string measured-frame-rate-352x288-range = "2239-2239"
string measured-frame-rate-640x368-range = "1950-1950"
string performance-point-3840x2160-range = "60-60"
string size-range = "144x144-3840x2176"
}
Decoder "OMX.Nvidia.h265.decode.secure" supports
aliases: []
attributes: 0xa: [
encoder: 0,
vendor: 1,
software-only: 0,
hw-accelerated: 1 ]
owner: "default"
rank: 256
profile/levels: [
1/131072 (Main/High 5.1),
2/131072 (Main10/High 5.1),
4096/131072 (Main10HDR10/High 5.1) ]
colors: [
0x7f420888 (YUV420Flexible),
0x15 (YUV420SemiPlanar) ]
details: AMessage(what = 0x00000000) = {
string alignment = "2x2"
string bitrate-range = "1-120000000"
string block-size = "16x16"
string blocks-per-second-range = "1-2000000"
int32_t feature-adaptive-playback = 0
int32_t feature-secure-playback = 1
string performance-point-3840x2160-range = "60-60"
string size-range = "144x144-3840x2176"
}
Decoder "OMX.google.hevc.decoder" supports
aliases: []
attributes: 0: [
encoder: 0,
vendor: 0,
software-only: 0,
hw-accelerated: 0 ]
owner: "default"
rank: 528
profile/levels: [
1/65536 (Main/Main 5.1),
4/65536 (MainStill/Main 5.1) ]
colors: [
0x7f420888 (YUV420Flexible),
0x13 (YUV420Planar) ]
details: AMessage(what = 0x00000000) = {
string alignment = "2x2"
string bitrate-range = "1-10000000"
string block-count-range = "1-196608"
string block-size = "8x8"
string blocks-per-second-range = "1-2000000"
int32_t feature-adaptive-playback = 0
string measured-frame-rate-1280x720-range = "120-140"
string measured-frame-rate-1920x1080-range = "63-78"
string measured-frame-rate-352x288-range = "584-590"
string measured-frame-rate-640x360-range = "306-319"
string size-range = "2x2-4096x4096"
}
from jellyfin-androidtv.
Decoder "OMX.Nvidia.h265.decode" supports profile/levels: [ 1/131072 (Main/High 5.1), 2/131072 (Main10/High 5.1), 4096/131072 (Main10HDR10/High 5.1) ]
This shows that the device is self reporting a maximum of level 5.1 high tier for the Main 10 profile. This should guarantee support for all high tier and main tier streams at level 5.1 and below.
Your file appears to be encoded at level 5.2 main tier which your device doesn't report to support.
If you have a look at https://en.wikipedia.org/wiki/High_Efficiency_Video_Coding#Tiers_and_levels you can see that 5.2 main tier supports a bitrate of 60,000 kbit/s while 5.1 high tier supports up to 160,000 kbit/s. But as far as I know, a 5.2 encoding can support things that a 5.1 decoder can't handle.
My guess is that the Shield actually supports a higher level main tier than high tier, such as 5.2 main tier and 5.1 high tier, but it's not reporting that fact.
from jellyfin-androidtv.
The shield probably has hardware decoders for up to 5.1 and software decoding for 5.2. Seems like the same issue with the Fire TV Stick 4K - 2nd Gen (2023). 5.2 now transcodes instead of relying on the built-in software decoder.
The device specs even state it only goes up to 5.1
"H.265 (HEVC). Hardware accelerated up to 3840x2160p (4K) @ 60 fps, 35 Mbps, Main 10 Profile Level 5.1, Color space 8-bit and 10-bit input with HDR10, HDR10+, and HLG"
Fire TV Stick's reported capabilities:
Media type 'video/ ':
Decoder "OMX.MTK.VIDEO.DECODER.HEVC" supports
aliases: []
attributes: 0xa: [
encoder: 0,
vendor: 1,
software-only: 0,
hw-accelerated: 1 ]
owner: "default"
rank: 256
profile/levels: [
1/ 1 (Main/Main 1),
1/ 2 (Main/High 1),
1/ 4 (Main/Main 2),
1/ 8 (Main/High 2),
1/ 16 (Main/Main 2.1),
1/ 32 (Main/High 2.1),
1/ 64 (Main/Main 3),
1/ 128 (Main/High 3),
1/ 256 (Main/Main 3.1),
1/ 512 (Main/High 3.1),
1/ 1024 (Main/Main 4),
1/ 2048 (Main/High 4),
1/ 4096 (Main/Main 4.1),
1/ 8192 (Main/High 4.1),
1/16384 (Main/Main 5),
1/32768 (Main/High 5),
1/65536 (Main/Main 5.1),
1/131072 (Main/High 5.1),
2/ 1 (Main10/Main 1),
2/ 2 (Main10/High 1),
2/ 4 (Main10/Main 2),
2/ 8 (Main10/High 2),
2/ 16 (Main10/Main 2.1),
2/ 32 (Main10/High 2.1),
2/ 64 (Main10/Main 3),
2/ 128 (Main10/High 3),
2/ 256 (Main10/Main 3.1),
2/ 512 (Main10/High 3.1),
2/ 1024 (Main10/Main 4),
2/ 2048 (Main10/High 4),
2/ 4096 (Main10/Main 4.1),
2/ 8192 (Main10/High 4.1),
2/16384 (Main10/Main 5),
2/32768 (Main10/High 5),
2/65536 (Main10/Main 5.1),
2/131072 (Main10/High 5.1),
4096/ 1 (Main10HDR10/Main 1),
4096/ 2 (Main10HDR10/High 1),
4096/ 4 (Main10HDR10/Main 2),
4096/ 8 (Main10HDR10/High 2),
4096/ 16 (Main10HDR10/Main 2.1),
4096/ 32 (Main10HDR10/High 2.1),
4096/ 64 (Main10HDR10/Main 3),
4096/ 128 (Main10HDR10/High 3),
4096/ 256 (Main10HDR10/Main 3.1),
4096/ 512 (Main10HDR10/High 3.1),
4096/ 1024 (Main10HDR10/Main 4),
4096/ 2048 (Main10HDR10/High 4),
4096/ 4096 (Main10HDR10/Main 4.1),
4096/ 8192 (Main10HDR10/High 4.1),
4096/16384 (Main10HDR10/Main 5),
4096/32768 (Main10HDR10/High 5),
4096/65536 (Main10HDR10/Main 5.1),
4096/131072 (Main10HDR10/High 5.1),
8192/ 1 (Main10HDR10Plus/Main 1),
8192/ 2 (Main10HDR10Plus/High 1),
8192/ 4 (Main10HDR10Plus/Main 2),
8192/ 8 (Main10HDR10Plus/High 2),
8192/ 16 (Main10HDR10Plus/Main 2.1),
8192/ 32 (Main10HDR10Plus/High 2.1),
8192/ 64 (Main10HDR10Plus/Main 3),
8192/ 128 (Main10HDR10Plus/High 3),
8192/ 256 (Main10HDR10Plus/Main 3.1),
8192/ 512 (Main10HDR10Plus/High 3.1),
8192/ 1024 (Main10HDR10Plus/Main 4),
8192/ 2048 (Main10HDR10Plus/High 4),
8192/ 4096 (Main10HDR10Plus/Main 4.1),
8192/ 8192 (Main10HDR10Plus/High 4.1),
8192/16384 (Main10HDR10Plus/Main 5),
8192/32768 (Main10HDR10Plus/High 5),
8192/65536 (Main10HDR10Plus/Main 5.1),
Decoder "c2.android.hevc.decoder" supports
aliases: [
"OMX.google.hevc.decoder" ]
attributes: 0x4: [
encoder: 0,
vendor: 0,
software-only: 1,
hw-accelerated: 0 ]
owner: "codec2::software"
rank: 512
profile/levels: [
1/524288 (Main/High 5.2),
4/524288 (MainStill/High 5.2)
from jellyfin-androidtv.
The shield probably has hardware decoders for up to 5.1 and software decoding for 5.2. Seems like the same issue with the Fire TV Stick 4K - 2nd Gen (2023). 5.2 now transcodes instead of relying on the built-in software decoder.
I don't think this is the case because all decoders are checked for the maximum, including software decoders.
From the information that @VampiricAlien provided, the software decoder on the Shield can't even handle Main 10 profile, which is what we're looking at. It supports only up to 5.1 main tier for the Main profile, while the hardware decoder supports up to 5.1 high tier for both Main and Main 10.
From the information you've provided from the Fire TV Stick 4K - 2nd Gen (2023), the software decoder supports only up to 5.2 high tier for the Main profile (and not the Main 10 profile). The hardware decoder supports up to 5.1 high tier for both Main and Main 10, which is the same as the Shield.
If you are also talking about a Main 10 level 5.2 main tier video stream, like @VampiricAlien is, then neither the Fire TV Stick 4K or the Shield seems to be reporting support for this. This indicates nothing in the logic of the change is broken as such, just that both devices seem to support beyond what they claim.
The previous behaviour for the Android TV client was to accept any HEVC Main stream if any HEVC decoder exists (practically all devices), and HEVC Main 10 if profile level 5 main tier is supported for it. The behaviour now is base support for both Main and Main 10 on the maximum level supported by any decoder. Therefore transcoding would be expected based on given the source file and reported decoder support.
from jellyfin-androidtv.
Here are some solutions:
- Do nothing and report issues to the device manufacturers to fix their media configs
- Remove the limit when the device reports a specific level or higher, such as 5.1 high tier
- Remove the limit for specific device IDs
from jellyfin-androidtv.
Here are some solutions:
1. Do nothing and report issues to the device manufacturers to fix their media configs 2. Remove the limit when the device reports a specific level or higher, such as 5.1 high tier 3. Remove the limit for specific device IDs
I don't see option 1 happening anytime soon, upgrade hardware should solved it but this might not be an option for everyone.
Since the update, I never hand an issue with HEVC main 10 level 5.1. ( as you said that both devices seem to support beyond what they claim), I am open to temp solution if needed.
from jellyfin-androidtv.
Related Issues (20)
- certains mp3 file are played beyond their length HOT 3
- Play all & Shuffle option for home videos
- Jellyfin doesn't remember chosen subtitles on resume HOT 6
- UI for TV shows is illogical. Suggestions.
- Jellyfin launches when playing with an other app Tivimate HOT 3
- Please release Jellyfin with media3 version 1.2.1 to fix long time Android OPUS and VORBIS channel layout bug (e.g. where the centre channel plays on the right channel) HOT 3
- Playback of HEVC video w/ OPUS 5.1 and PGS subtitles - visual artifacts, small audio lag
- Unable to play certain media embedded with ASS subtitles in ExoPlayer HOT 2
- Unable to play second audio track on hevc content
- Remote ok button causing action "behind" screensaver when just expecting exit HOT 1
- "Too many errors giving up" Android TV client 0.16.5 HOT 10
- The app creates channels every time it is started for the first time HOT 4
- Display Original Title field
- Jellyfin for Android cannot connect to server [but web browser can connect!] HOT 17
- Option to ignore selfsigned TSL certificate HOT 1
- Constnat HOT 1
- 4k hevc content fails to play on 1080p devices
- Next season is not autoplayed on Android TV client HOT 4
- Starting a LiveTV stream causes a startup loop. HOT 4
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from jellyfin-androidtv.