Prüfen, woran die kleine Plex-Auflösung hängt

Die Servereinstellungen sind es nicht: „Begrenzung der Stream-Bitrate
übers Internet" steht auf Original, keine Upload-Grenze, Hardware-
Transcoding an. Die Vermutung ist damit widerlegt.

Bleibt die eigene Anfrage. Bei „automatisch" schickt die App
`maxVideoBitrate` und `videoQuality`, aber **kein** `videoResolution` —
dort steht `nil`, weil die Stufe keine vorgibt. Verdacht: Plex nimmt
dann seine Voreinstellung für die Qualitätsstufe, und die ist 540p.

Wäre das so, bekäme jeder Plex-Nutzer bei „automatisch" über eine
Fernverbindung stillschweigend 960x540 bei 1,1 Mbit, auch auf einer
schnellen Leitung. Die Probe fährt deshalb vier Kombinationen ab und
hält jeden Transcoder einzeln wieder an.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-09-27 18:06:04 +02:00
co-authored by Claude Opus 5
parent 7ecb16d4eb
commit b861ca0599
@@ -184,6 +184,37 @@ if CommandLine.arguments.contains("--leiter") {
)
print("Sitzungen: \(ohne.sessionIdentifier.prefix(8)) / \(mit.sessionIdentifier.prefix(8))\n")
// **Warum kommt so wenig zurück?**
//
// Die App schickt bei „automatisch" `maxVideoBitrate` und `videoQuality`,
// aber **kein** `videoResolution` — dort steht `nil`. Verdacht: Plex nimmt
// dann seine eigene Voreinstellung für die Qualitätsstufe, und die ist
// klein. Das wäre kein Servereinstellungs-Problem, sondern unser eigenes.
print("=== Woran hängt die gelieferte Größe? ===")
let proben: [(String, Int, String?)] = [
("wie die App heute (ohne Auflösung)", 8_000, nil),
("mit videoResolution=1920x1080", 8_000, "1920x1080"),
("20 Mbit, ohne Auflösung", 20_000, nil),
("20 Mbit + 1920x1080", 20_000, "1920x1080"),
]
for (name, bitrate, auflösung) in proben {
let probe = TranscodeRequest(
ratingKey: movie.ratingKey,
maximumBitrate: bitrate,
resolution: auflösung,
isLocal: connection.local
)
guard let url = server.transcodeURL(for: probe) else { continue }
let antwort = await prüfePlaylist(url)
let zeile = antwort
.split(separator: "\n")
.first { $0.contains("Mbit/s") }
.map { $0.trimmingCharacters(in: .whitespaces) } ?? "keine Stufe"
print(" \(name): \(zeile)")
await server.stopTranscode(sessionIdentifier: probe.sessionIdentifier)
}
print()
for (name, anfrage) in [("ohne autoAdjustQuality", ohne), ("mit autoAdjustQuality=1", mit)] {
print("=== \(name) ===")
guard let url = server.transcodeURL(for: anfrage) else {