From b861ca0599f562604f1c4285ac9138e022e57fe5 Mon Sep 17 00:00:00 2001 From: Scarriffle Date: Sun, 27 Sep 2026 18:06:04 +0200 Subject: [PATCH] =?UTF-8?q?Pr=C3=BCfen,=20woran=20die=20kleine=20Plex-Aufl?= =?UTF-8?q?=C3=B6sung=20h=C3=A4ngt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- .../FlixyKit/Sources/FlixyProbe/main.swift | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/Packages/FlixyKit/Sources/FlixyProbe/main.swift b/Packages/FlixyKit/Sources/FlixyProbe/main.swift index d0fab80..96e89ef 100644 --- a/Packages/FlixyKit/Sources/FlixyProbe/main.swift +++ b/Packages/FlixyKit/Sources/FlixyProbe/main.swift @@ -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 {