Wiedergabe: die Plex-Kennung muss in die Adresse, nicht nur in die Kopfzeilen

HTTP 400 vom Transcoder. Die Kennung dieses Geräts reist bei jeder
Anfrage als Kopfzeile mit — aber die Adresse des Stroms ruft nicht die
App ab, sondern AVPlayer, und der schickt keine Kopfzeilen mit. Bei
Dateien fällt das nicht auf; bei Live-TV schon: der Server legt die
Sitzung unter der Gerätekennung an und kann die Abholung ohne sie keiner
Sitzung zuordnen.

Also trägt die Transcoder-Adresse die Kennung jetzt selbst. Das gilt für
alle Ströme, nicht nur für Live — dort fiel es nur zuerst auf.

Dazu: umgerechnet wird die Adresse der Sitzung, nicht die des Teils
darin. Der Transcoder sucht sich den Teil selbst, deshalb steht dort -1.

Und der Entscheider unterscheidet jetzt zwischen „nein" und „keine
Antwort". Ein Schweigen als Ablehnung zu lesen hieße, eine
funktionierende Sendung zu blocken, bloß weil er Live-Adressen womöglich
gar nicht kennt.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-09-12 14:02:12 +02:00
co-authored by Claude Opus 5
parent 861ca805a5
commit 8dba05b4f9
6 changed files with 66 additions and 19 deletions
@@ -53,6 +53,19 @@ public struct PlexClientIdentity: Sendable, Equatable {
"Accept": "application/json",
]
}
/// Dieselben Angaben als Abfrageteile der Adresse.
///
/// Für Adressen, die nicht die App abruft, sondern der Systemplayer:
/// AVPlayer schickt keine Plex-Kopfzeilen mit. Bei Live-TV ist das
/// entscheidend — der Server legt die Sitzung unter der Gerätekennung an
/// und lehnt die Abholung ohne sie mit „HTTP 400" ab.
public var queryItems: [URLQueryItem] {
headers
.filter { $0.key.hasPrefix("X-Plex-") }
.map { URLQueryItem(name: $0.key, value: $0.value) }
.sorted { $0.name < $1.name }
}
}
extension PlexClientIdentity {