Skip to content

Choose a streaming quality, in settings and in the player #87

Description

@superuser404notfound

What's the feature?

A quality choice for what leaves the Jellyfin server, in two places:

  1. Playback settings: a default, from the original file down through a handful of bitrate rungs.
  2. In the player: the same list next to the audio and subtitle pickers, for the times the default is wrong (a hotel line, a phone on a train).

Later, once offline downloads (#81) exist, the same choice decides what gets written to disk. A phone has less room than a NAS, and a 60 GB remux is rarely what you want on a plane.

Why? When would you use it?

Sodalite direct-plays by design: the device profile advertises what the hardware can decode, so the server hands over the original file and never re-encodes. That is the right default and stays the default. It is also the wrong answer on a line that cannot carry 40 Mbit, where today the only outcome is buffering.

Notes and open questions

  • This deliberately gives up direct play. A rung below "original" means the server transcodes, so the entry has to read as a trade the user makes on purpose, not a quality slider that magically costs nothing. The picker should say what it is doing.
  • The playback path changes with it. A capped stream arrives as a server-side HLS transcode rather than the original container, so DirectPlayProfile needs a transcoding-profile shape for the capped case, and MaxStreamingBitrate has to reach PlaybackInfo for VOD the way it already does for Live TV.
  • End the old encode when switching. Changing quality mid-playback opens a second transcode. Without an explicit stop, the first one keeps an ffmpeg process alive on the server. Live TV has taught this lesson already.
  • Keep the position. A switch is a new stream: report, tear down, reopen, resume at the same second, ideally without a visible restart from zero.
  • Per-network defaults on iOS and iPadOS. Wifi and cellular deserve separate defaults; an Apple TV has one kind of connection and needs only one.
  • Rungs, not a slider. A short list of named steps (original, plus a few bitrate caps) is easier to reason about than a continuous value, and it matches what the server can actually deliver.
  • The existing version picker is a different thing: it chooses between several files of the same title on the server. This chooses how one file is delivered.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions