From 56cfb95af50858e67504055c92ba7b533715e7dc Mon Sep 17 00:00:00 2001 From: edde746 <86283021+edde746@users.noreply.github.com> Date: Tue, 26 May 2026 23:57:17 +0200 Subject: [PATCH] fix(playback): apply default quality to jellyfin close #1150 --- lib/media/media_server_client.dart | 2 +- lib/models/transcode_quality_preset.dart | 6 +++--- lib/screens/video_player_screen.dart | 8 ++++---- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/lib/media/media_server_client.dart b/lib/media/media_server_client.dart index 30404a80..0ef8e446 100644 --- a/lib/media/media_server_client.dart +++ b/lib/media/media_server_client.dart @@ -506,7 +506,7 @@ abstract class MediaServerClient { /// playback. Backends own the per-backend particulars: Plex runs the /// transcode-decision flow when [PlaybackInitializationOptions.qualityPreset] /// is non-original; Jellyfin asks PlaybackInfo for a matching stream when a - /// non-original preset is explicitly selected. Throws + /// non-original preset is selected. Throws /// [PlaybackException] when the item can't be resolved (no MediaSources, /// no playable URL, transcode decision unavailable). /// diff --git a/lib/models/transcode_quality_preset.dart b/lib/models/transcode_quality_preset.dart index 3735236e..ac4547de 100644 --- a/lib/models/transcode_quality_preset.dart +++ b/lib/models/transcode_quality_preset.dart @@ -1,8 +1,8 @@ /// Video transcode quality presets modeled on Plex Web's custom-quality table. /// -/// When a non-[original] preset is selected, playback goes through Plex's -/// `/video/:/transcode/universal/decision` + `start` flow. [original] bypasses -/// transcoding entirely and uses the direct-play URL. +/// When a non-[original] preset is selected, playback asks the active backend +/// for a capped transcode stream. [original] bypasses transcoding entirely and +/// uses the direct-play URL. enum TranscodeQualityPreset { original(null, null, null), p240_320(320, '420x240', 30), diff --git a/lib/screens/video_player_screen.dart b/lib/screens/video_player_screen.dart index 3d92f76c..be5fb4c3 100644 --- a/lib/screens/video_player_screen.dart +++ b/lib/screens/video_player_screen.dart @@ -609,12 +609,12 @@ class VideoPlayerScreenState extends State with WidgetsBindin throw StateError('No client registered for ${_currentMetadata.serverId}'); } _streamHeaders = genericClient.streamHeaders; - // Single source of truth for showing quality controls. Plex uses a - // per-server probe; Jellyfin supports explicit quality selection but - // should not inherit the global Plex-style default on ordinary play. + // Single source of truth for showing quality controls and applying the + // saved startup quality. Backends that cannot transcode always start at + // Original even if the user picked a lower default quality. _serverSupportsTranscoding = genericClient.capabilities.videoTranscoding; if (widget.selectedQualityPreset == null) { - _selectedQualityPreset = genericClient.backend == MediaBackend.plex && _serverSupportsTranscoding + _selectedQualityPreset = _serverSupportsTranscoding ? settingsService.read(SettingsService.defaultQualityPreset) : TranscodeQualityPreset.original; } else {