2023-09-20, 11:30 PM
To answer your last question, as I haven't had time between work and a little passion project I've been doing (over in the off-topic encoding thread), I believe all of this is controlled by device profiles.
The workflow doesn't go exactly as you've described is my understanding, but a dev might have to chime in as I haven't delved into the code enough to fully understand the workflow and explain it ACCURATELY at a 30k foot view. So my understanding, based on previous threads, is this:
1. Client requests media and provides a) user and b) client information to the server.
2. Server decides how to handle the request based on a) user policies and b) device profile.
3. Server builds stream and delivers media playback information to client.
Nowhere in there do you have the option to disable upscaling, enable only de-interlacing, etc...
You can always check your logs to see what Jellyfin itself is doing as well as what ffmpeg is doing. Because it might be the case that you can utilize Jellyfin with an app + external player that will play media at original resolution (but tiny) without any upscaling. I highly doubt you will find anything that will offer to play back SD content on an HD monitor without dynamic/hardware upscaling...it's just not really a thing that displays do since it generally looks like complete trash. Here's an example from my logs of the entire process of media playback request...it's pretty underwhelming...
Three steps. Here's who I am, here's what I am, here's your media.
The workflow doesn't go exactly as you've described is my understanding, but a dev might have to chime in as I haven't delved into the code enough to fully understand the workflow and explain it ACCURATELY at a 30k foot view. So my understanding, based on previous threads, is this:
1. Client requests media and provides a) user and b) client information to the server.
2. Server decides how to handle the request based on a) user policies and b) device profile.
3. Server builds stream and delivers media playback information to client.
Nowhere in there do you have the option to disable upscaling, enable only de-interlacing, etc...
You can always check your logs to see what Jellyfin itself is doing as well as what ffmpeg is doing. Because it might be the case that you can utilize Jellyfin with an app + external player that will play media at original resolution (but tiny) without any upscaling. I highly doubt you will find anything that will offer to play back SD content on an HD monitor without dynamic/hardware upscaling...it's just not really a thing that displays do since it generally looks like complete trash. Here's an example from my logs of the entire process of media playback request...it's pretty underwhelming...
Code:
jellyfin | 2023-09-20T19:41:48.588203934Z [13:41:48] [INF] [39] Jellyfin.Api.Helpers.MediaInfoHelper: User policy for office. EnablePlaybackRemuxing: True EnableVideoPlaybackTranscoding: True EnableAudioPlaybackTranscoding: True
jellyfin | 2023-09-20T19:41:48.588323900Z [13:41:48] [INF] [39] Jellyfin.Api.Helpers.MediaInfoHelper: RemoteClientBitrateLimit: 6500000, RemoteIp: 192.168.99.99, IsInLocalNetwork: True
jellyfin | 2023-09-20T19:41:48.588491532Z [13:41:48] [INF] [39] Jellyfin.Api.Helpers.MediaInfoHelper: StreamBuilder.BuildVideoItem( Profile=Anonymous Profile, Path=/media/4K/tv/Soft Plastic (1842) [333333]/Season 01/Soft Plastic (1842) - S01E05 - The Bendy Straw [WEBRip-2160p AV1 HDR 10bit OPUS 2.0+5.1][EN][EN]-m1CR0.mkv, AudioStreamIndex=null, SubtitleStreamIndex=null ) => ( PlayMethod=DirectPlay, TranscodeReason=0 ) media:/videos/4c237b35-c6db-5a2c-f1dd-c61f1c539c51/stream.webm?MediaSourceId=1c234b56c7rs5a5cd6aac855fasdfc555c22&Static=true&VideoCodec=av1&AudioCodec=opus&AudioStreamIndex=1&api_key=<token>
Three steps. Here's who I am, here's what I am, here's your media.
Jellyfin 10.10.0 LSIO Docker | Ubuntu 24.04 LTS | i7-13700K | Arc A380 6 GB | 64 GB RAM | 79 TB Storage