Probe: den Server nach seinen eigenen Fähigkeiten fragen
Der Befund wird deutlicher: ping und stop antworten mit 404, start.m3u8 und decision mit 400. Die einen Routen gibt es nicht, die anderen lehnen ab. Und die Mediathek antwortet normal — an der Verbindung liegt es nicht. In jeder Antwort der Wurzel stehen Felder, deren Werte ich nie angesehen habe: transcoderVideo, transcoderActiveVideoSessions, transcoderVideoBitrates. Steht dort `transcoderVideo: false`, kann dieser Server kein Video umrechnen — und dann suche ich seit Tagen nach einer Fähigkeit, die es auf diesem Gerät nicht gibt. Das ist dieselbe Art Annahme wie „der Transcoder tut es schon": etwas Vorausgesetztes, das nie jemand nachgesehen hat. Nachsehen kostet eine Zeile. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
2a19db2757
commit
ab3e1c975e
@@ -1569,11 +1569,33 @@ extension PlexServer {
|
||||
|
||||
// Und zur Gegenkontrolle etwas, von dem wir wissen, dass es geht:
|
||||
// die Bilder kommen über denselben `/:/`-Aufbau.
|
||||
lines.append(" Bild-Transcoder: \(await rawResponse(forPath: "/photo/:/transcode", limit: 120))")
|
||||
lines.append(" Mediathek: \(await rawResponse(forPath: "/library/sections", limit: 120))")
|
||||
lines.append(" Mediathek: \(await rawResponse(forPath: "/library/sections", limit: 90))")
|
||||
lines.append(" Server sagt über sich: \(await capabilities())")
|
||||
return lines
|
||||
}
|
||||
|
||||
/// Was der Server über seine eigenen Fähigkeiten sagt.
|
||||
///
|
||||
/// Die Felder stehen in jeder Antwort der Wurzel, und ihre Werte habe ich
|
||||
/// nie angesehen. Steht dort `transcoderVideo: false`, kann dieser Server
|
||||
/// kein Video umrechnen — und dann war die ganze Suche der letzten Tage
|
||||
/// die Suche nach einer Fähigkeit, die es nicht gibt.
|
||||
public func capabilities() async -> String {
|
||||
guard let data = try? await client.send(PlexRequest(path: "/", timeout: .seconds(15))),
|
||||
let root = try? JSONSerialization.jsonObject(with: data) as? [String: Any],
|
||||
let container = root["MediaContainer"] as? [String: Any]
|
||||
else { return "keine Antwort" }
|
||||
|
||||
let interesting = [
|
||||
"transcoderVideo", "transcoderAudio", "transcoderSubtitles",
|
||||
"transcoderActiveVideoSessions", "transcoderVideoBitrates",
|
||||
"offlineTranscode", "allowSync", "version", "platform",
|
||||
]
|
||||
return interesting
|
||||
.compactMap { key in container[key].map { "\(key)=\($0)" } }
|
||||
.joined(separator: ", ")
|
||||
}
|
||||
|
||||
private func probe(items: [URLQueryItem], endpoint: String) async -> String {
|
||||
guard let baseURL = connection.url,
|
||||
var components = URLComponents(
|
||||
|
||||
Reference in New Issue
Block a user