-
-
Notifications
You must be signed in to change notification settings - Fork 252
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
ExoPlayer profiles don't always work as expected - unnecessary transcoding, broken transcodes #28
Comments
This is planned to be resolved with a new apiclient that's already integrated with ExoPlayer and handles media playback itself. |
Is there an ETA when this new apiclient will be integrated, because the problem presits in v2.1? |
New apiclient will be released after the 10.7 server version (since it is not compatible with 10.6). But it will not contain playback related code from the start. |
@nielsvanvelzen Just wondering if there is any news on this now that Jellyfin 10.7 has finally reached stable. |
Working on the new apiclient, branch implementing it already exists in this repository. Hopefully beta release in 1 to 3 weeks. |
@Maxr1998 I think this issue is mostly fixed now right? |
I think so? We don't use/check the resolutions yet, however. |
I'm still having issues where HEVC content is transcoding on the JF android app; content that Direct Plays on the Plex android app. |
This could help with querying codec, profile and level support: |
jellyfin/jellyfin#6450 and jellyfin/jellyfin#6454 might be relevant here, as some of the cases might be covered in those bugs. |
This issue has gone 120 days without comment. To avoid abandoned issues, it will be closed in 21 days if there are no new comments. If you're the original submitter of this issue, please comment confirming if this issue still affects you in the latest release or master branch, or close the issue if it has been fixed. If you're another user also affected by this bug, please comment confirming so. Either action will remove the stale label. This bot exists to prevent issues from becoming stale and forgotten. Jellyfin is always moving forward, and bugs are often fixed as side effects of other changes. We therefore ask that bug report authors remain vigilant about their issues to ensure they are closed if fixed, or re-confirmed - perhaps with fresh logs or reproduction examples - regularly. If you have any questions you can reach us on Matrix or Social Media. |
Still an issue. |
Video codec : mpeg-h part2/hevc Jellyfin Android 2.4.4 |
It's actual |
This open issue is now celebrating its 2nd anniversary. The official Jellyfin Android and iOS apps are apparently still unable to play HEVC files without transcoding (tested on multiple different up-to-date devices), although the unofficial Findroid app or the Jellyfin app on FireTV work correctly. If I disable transcoding for a user profile on the server, then HEVC files won't play at all in the official Android/iOS app. I don't know if Findroid uses ExoPlayer as well. If it does, maybe use their settings? If they use a different player, maybe consider switching the player? |
It seems to be highly dependent on the played media and playback device, since I'm able to play 4K HEVC mkvs without issues on my Samsung and Pixel devices. |
@Maxr1998 Playback of a HEVC video (4K or HD) on a Pixel 6 Pro is only possible with transcoding. Direct playback without transcoding results in an error. Please check correctly: Administration > Dashboard > Users > Click your user > Media Playback: Leave the first item checked, but uncheck everything else ("Allow audio/video playback that requires transcoding/conversion"). Now try playing a HEVC video in the official Android app. It will give you a client codec error, although it still works in Findroid on the same device and on a FireTV 4K stick. |
I did that, it still works and is explicitly direct playing. Maybe a bitrate limit is causing this? Could you take a look into the server logs to see what's causing the transcode? |
You can download this sample here: |
Thanks for the sample. Also direct plays both on my Pixel 5 and Z fold 4. The
Note the |
Installed it just yesterday in Docker from jellyfin/jellyfin:latest. (I'm switching over from Plex.) Integrated player ("Based on ExoPlayer"): "Media cannot be played by this device" (as a line at the bottom) I've noticed in your log that all your transcoding settings are set to True:
Are you really, really, 100% sure you disabled transcoding for the very same profile on your server? Edit: |
I would like to add another observation: I conclude that at least through DLNA the Jellyfin server sends incorrect details for x265/HEVC files. Maybe the same happens with the App as well. The app then refuses to play it because it knows nothing about the file (thus "Anonymous Profile"?), while Findroid or the Jellyfin app on FireTV just start playing it without knowing anything about the file? Based on that, maybe that's not really an issue of the Jellyfin apps but of the server? However, the issue wouldn't be present if the apps just played the file like the other apps do. |
Ok, same here.
I know, I enabled them again after my testing. I just retried again with them off, and it worked just fine.
The web player doesn't work for me either. I can't comment on the topic of DLNA because I don't use it. It may be an issue with the server, yes. |
Yes, sure. I'm just trying to provide all details that might be relevant. Same for DLNA. I understand that it has nothing to do with with the Android app, but I believe the source of this problem might have something to do with this issue. Even if it is some kind of server problem, I can't stress enough that it works with exactly the same server without any issues with Findroid and the Jellyfin FireTV app. (but not on the latest Pixel phone and multiple 1-3 years old Samsung devices) So what now? Anything else I could do to analyze the problem? |
I wonder if it's a configuration issue on my or your server. Still, since it lists Furthermore, could you please check the maximum bitrate you have set in Playback → Streaming? I apologize for the frustration, but unfortunately, it's quite hard to debug issues like these, especially if I can't reproduce them. We really need to get better debugging support into our app. That's definitely something I'll look into soon. |
I'm not frustrated at all. I am mainly confused that you don't seem to have this issue. I highly doubt that it's an issue with my device, because it's the same on my Pixel phone as on the Samsung tablet and phones. The only thing they have in common is the same Jellyfin android app. But nevertheless, here's the AIDA64 output from my Pixel 6 Pro:
Playback → Streaming is empty (I haven't touched it). If you want to see certain server or client settings, just tell me and I'll provide screenshots. Edit: Please take into account that the problem also exists in the official iOS app on an up-to-date iPad Pro. So based on everything we've seen so far, there is probably some issue on the server but the official Jellyfin Android and iOS apps don't seem to be able to handle it well, while other apps like Findroid or the Jellyfin FireTV app seem to ignore the issue. |
Maybe this issue is related: |
Also, i think that https://github.com/jellyfin/jellyfin-docs/blob/master/general/clients/codec-support.md/ could be updated to reflect which player type does support HVEC. For me Web player (which is sadly default ) needs transcoding from H.265, while integrated player direct streams just fine. |
Thanks, those seem to be good.
I'm also thinking that this could be a server issue. When you sent your log output earlier, was that from using the web player or ExoPlayer? I'd need ExoPlayer to properly judge if the device profile is transmitted correctly (it tells the server which codecs and containers the device supports). |
True, the Android hasn't been updated in a while. Back then, there weren't any integrated nor external players supported. |
I am very sorry, you are right, the previous log was from the web player setting.
I guess this is more helpful now with I now also checked other videos in my library, they have this reason for not playing: Knowing that, I searched my library for HEVC videos without any subtitles, found one and it plays fine with ExoPlayer! (the default web player still can't play it - why is it the default player if it's much worse?) So it all comes down to the app being picky/incorrect with audio and subtitle codecs? Why is the sample playing in your case, though? Do you have a supported codec definition for "no audio track"? |
I see, thanks for the updated logs. In my case, the sample you linked does have an audio track: You other samples may not have one, but could you check that with
Yes, it looks like pgs isn't enabled on our ExoPlayer integration. I'll check if I can fix that.
We had it as default in one version, but since it unfortunately doesn't support quality selection and sync play yet, we haven't enabled it as default.
Unfortunately yes.
See above screenshot, it contains a Vorbis audio track. |
Gee, how much can go wrong... Apparently we tested different samples which I now only realized with your screenshot. When I searched for sample files, got to the linked page above, clicked the Download link it said something like "file downloaded too many times / bandwidth exceeded" but had a link to the sample file anyway, so I downloaded it and used for testing. I already wondered about the different file names, but figured you have simply renamed it. Would it be possible to be more flexible with audio/subtitle codecs and try playing anyway? I don't see how it's better to prevent playing the file at all instead of at least trying (and either succeeding or failing, which wouldn't be worse than not trying at all - like in real life ;) ). |
Oh, that explains it. I downloaded the sample directly from the linked Google Drive. Your new sample doesn't direct play for me either. The reason for that is probably a bug in the server. What happens is that the Android app sends a list of supported codecs, which the server tries to match when deciding whether to direct stream or transcode (this happens on the server, and not the client!). Since the played media doesn't have any audio track, it cannot find a supported codec, failing the matcher and forcing a transcode (or remux, possibly). findroid, on the other hand, sends a device profile that marks all codecs as supported. Anyway, what you're experiencing is still a bug and should be fixed. I'll check if I can find the root cause or file an issue on the server repo. |
Thanks for explaining it. I understand both points of view. The huge problem for the official app is that right now codecs or formats that are supported by the device have to be defined in the app. Both problems (HDMV PGS / SubtitleCodecNotSupported and no audio track / AudioCodecNotSupported) prevent the playback although the device would be capable of playing the file. I understand that you maintain some kind of whitelist for different file formats and codecs, but that leads to the problem that the app doesn't even try playing it even if the device would be able to handle it. The device could report an incomplete list, there could be new variants, new combinations, new codecs with fallback routines, etc. What I'm trying to say is that the current implementation isn't future proof but relies on being constantly maintained when users run into problems. I think there should be some kind of these options:
|
jellyfin-archive/jellyfin-docs#701 created :) |
The currently shipped ExoPlayer profile doesn't properly advertise the device capabilities in some cases, e.g. HEVC seems to be transcoded sometimes although it shouldn't need to. Since I'm not very knowledgeable into the internals of Jellyfin transcoding and profiles, I'd request others to help me with getting to profile to work properly with as many devices as possible.
The text was updated successfully, but these errors were encountered: