Fragen statt starten — die Probe überfuhr den Server
Beim letzten Lauf scheiterte auch die Anfrage, die vorher funktioniert hatte. Kein neuer Befund, sondern mein Messfehler: die Probe warf sechs Transcode-Sitzungen in Folge an, und danach lehnt Plex alles mit nackten 400ern ab — auch das, was vorher ging. Jede Anfrage an `start.m3u8` startet einen Transcoder. Für eine Parameterreihe ist das das falsche Werkzeug. Der **Entscheider** sagt, was der Server täte, ohne etwas zu tun: Auflösung, Bitrate, und ob umgerechnet oder umgepackt wird. Die Reihe läuft jetzt darüber. Die zwei verbleibenden echten Sitzungen bekommen Abstand voneinander. Der Wert wird aus der Antwort gesucht statt geparst — Plex antwortet je nach Kopfzeile als XML oder JSON, und es geht um eine Anzeige, nicht um Daten, mit denen weitergerechnet wird. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
b861ca0599
commit
d2237c29cd
@@ -119,6 +119,27 @@ extension PlexServer {
|
||||
)
|
||||
}
|
||||
|
||||
/// Die Entscheidung im Wortlaut — **ohne** etwas zu starten.
|
||||
///
|
||||
/// Der Entscheider sagt, was der Server *täte*: welche Auflösung, welche
|
||||
/// Bitrate, ob umgerechnet oder umgepackt wird. Das ist das richtige
|
||||
/// Werkzeug, um Parameter auszuprobieren.
|
||||
///
|
||||
/// Der Weg über `start.m3u8` ist es **nicht**: jede Anfrage dort wirft
|
||||
/// einen Transcoder an, und ein halbes Dutzend davon in Folge bringt den
|
||||
/// Server dazu, alles Weitere mit nackten 400ern abzulehnen — auch das,
|
||||
/// was vorher ging. Genau so ist eine Messung schon einmal gekippt.
|
||||
public func decisionText(for request: TranscodeRequest) async -> String {
|
||||
let daten = try? await client.send(
|
||||
PlexRequest(
|
||||
path: "/video/:/transcode/universal/decision",
|
||||
query: request.queryItems + clientProfileItems
|
||||
)
|
||||
)
|
||||
guard let daten else { return "nicht erreichbar" }
|
||||
return String(decoding: daten.prefix(4_000), as: UTF8.self)
|
||||
}
|
||||
|
||||
/// Hält den Transcoder an.
|
||||
///
|
||||
/// Muss beim Verlassen des Players laufen. Ohne dieses Signal rechnet der
|
||||
|
||||
Reference in New Issue
Block a user