Wiedergabe: ohne Basisprofil lehnt der Transcoder alles ab

Der Unterschied zwischen 400 und 200 war ein einziger Parameter:

    …&protocol=hls&X-Plex-Token=…                          → 400
    …&protocol=hls&X-Plex-Client-Profile-Name=Chrome&…     → 200

Flixy hat immer nur `X-Plex-Client-Profile-Extra` geschickt. Das
**erweitert** ein Profil, es ersetzt keins — ohne Basis gibt es nichts zu
erweitern, und der Server kann keine Entscheidung bilden. Seine Antwort
darauf ist eine nackte 400 ohne jeden Hinweis.

Das betrifft alles, was durch den Transcoder geht: die Qualitätswahl im
Player, komprimierte Downloads und Live-TV. Bei Filmen fiel es nicht auf,
weil dort DirectPlay greift.

„Chrome" als Basis, weil dieses Profil auf jedem Server vorhanden ist und
genau das kann, was AVPlayer kann: HLS mit H.264 und AAC. Die Feinheiten
für iOS stehen weiterhin im Zusatz.

Gefunden wurde es, indem die Anfragen Angabe für Angabe aufgebaut wurden,
bis eine davon umschlug — nicht durch Nachdenken.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-09-12 16:28:55 +02:00
co-authored by Claude Opus 5
parent f87cddbd21
commit d28df346f2
4 changed files with 82 additions and 0 deletions
@@ -132,6 +132,19 @@ extension PlexServer {
/// schwarz.
private nonisolated var clientProfileItems: [URLQueryItem] {
[
// Das **Basisprofil**. Ohne diese eine Angabe lehnt der Server
// jede Anfrage an den Transcoder mit einer nackten 400 ab — und
// zwar jede, auch die an eine gewöhnliche Datei.
//
// Der Grund ist banal und war zwei Tage lang unsichtbar:
// `X-Plex-Client-Profile-Extra` **erweitert** ein Profil, es
// ersetzt keins. Ohne Basis gibt es nichts zu erweitern, und der
// Server kann keine Entscheidung bilden.
//
// „Chrome", weil dieses Profil auf jedem Server vorhanden ist und
// genau das kann, was auch AVPlayer kann: HLS mit H.264 und AAC.
// Die Feinheiten für iOS stehen ohnehin im Zusatz darunter.
URLQueryItem(name: "X-Plex-Client-Profile-Name", value: "Chrome"),
URLQueryItem(
name: "X-Plex-Client-Profile-Extra",
value: [