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
@@ -191,9 +191,13 @@ struct LiveTVGuideTests {
let url = try #require(result.url)
let items = try #require(URLComponents(url: url, resolvingAgainstBaseURL: false)?.queryItems)
#expect(items.first { $0.name == "path" }?.value == "/livetv/sessions/abc/stream")
// Die Adresse der Sitzung, nicht die des Teils darin.
#expect(items.first { $0.name == "path" }?.value == "/livetv/sessions/abc")
// Ein laufender Sender hat keine Fassungen zur Auswahl.
#expect(items.first { $0.name == "mediaIndex" }?.value == "-1")
// Ohne die Gerätekennung in der Adresse kann der Server die Abholung
// keiner Sitzung zuordnen: AVPlayer schickt keine Kopfzeilen mit.
#expect(items.contains { $0.name == "X-Plex-Client-Identifier" })
}
@Test("Der Raster-Schlüssel wird zuerst versucht, und nie ein ganzer Pfad")