From 2d3c4adbbaa3b64d821d47ffc27d84bdedb9303d Mon Sep 17 00:00:00 2001 From: Scarriffle Date: Sun, 27 Sep 2026 15:21:36 +0200 Subject: [PATCH] =?UTF-8?q?Die=20Probe=20r=C3=A4umt=20auf=20und=20sagt,=20?= =?UTF-8?q?woran=20es=20liegt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sie hat am Server eine Transcode-Sitzung angelegt und nicht wieder beendet — ein Messwerkzeug, das Arbeit hinterlässt, ist ein schlechtes. Jetzt läuft `endPlayback` am Ende. Und sie erklärt das Ergebnis, statt es nur hinzustellen. Kommt nur eine Stufe zurück, nennt sie die Hürden aus Jellyfins eigenem Quelltext (`DynamicHlsHelper.EnableAdaptiveBitrateStreaming`) — allen voran die erste und überraschendste: im lokalen Netz liefert Jellyfin **grundsätzlich** keine Leiter. Wörtlich dort: „Within the local network this will likely do more harm than good." Ein schwaches WLAN ist für Jellyfin auch nur lokales Netz. Co-Authored-By: Claude Opus 5 --- .../FlixyKit/Sources/FlixyProbe/Leiter.swift | 38 ++++++++++++++++++- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/Packages/FlixyKit/Sources/FlixyProbe/Leiter.swift b/Packages/FlixyKit/Sources/FlixyProbe/Leiter.swift index 5872f31..d0e1fc5 100644 --- a/Packages/FlixyKit/Sources/FlixyProbe/Leiter.swift +++ b/Packages/FlixyKit/Sources/FlixyProbe/Leiter.swift @@ -200,8 +200,42 @@ func jellyfinLeiter(host: String) async { } print("3) Als master.m3u8 mit enableAdaptiveBitrateStreaming=true") - print(await prüfePlaylist( + let mitABR = await prüfePlaylist( setzend("enableAdaptiveBitrateStreaming", auf: "true", in: master), kopfzeilen: kopf - )) + ) + print(mitABR) + + if mitABR.contains("1 Stufe:") { erklärungWarumKeineLeiter() } + + // Aufräumen: die Aushandlung hat am Server eine Sitzung angelegt, und + // ohne dieses Signal rechnet der Transcoder weiter, obwohl niemand + // zusieht. Ein Messwerkzeug, das Arbeit hinterlässt, ist ein schlechtes. + if let sitzung = ziel.sessionID { + await backend.endPlayback(sessionID: sitzung) + } + print("") + print("Transcode-Sitzung beendet.") +} + +/// Sagt, woran es liegen kann — aus Jellyfins eigenem Quelltext. +/// +/// `DynamicHlsHelper.EnableAdaptiveBitrateStreaming` prüft der Reihe nach, +/// und die erste Hürde ist die überraschendste. +func erklärungWarumKeineLeiter() { + print("") + print(" Warum nur eine Stufe kommt — aus Jellyfins Quelltext,") + print(" `DynamicHlsHelper.EnableAdaptiveBitrateStreaming`, der Reihe nach:") + print("") + print(" 1. Im lokalen Netz liefert Jellyfin grundsätzlich keine Leiter.") + print(" Wörtlich im Quelltext: „Within the local network this will") + print(" likely do more harm than good.\" Das gilt auch für ein") + print(" schwaches WLAN — unterschieden wird da nicht.") + print(" 2. Ohne den Parameter keine Leiter; im Server steht er auf false.") + print(" 3. Bei einem laufenden Sender nicht.") + print(" 4. Wird Bild ODER Ton nur kopiert statt neu gerechnet, nicht.") + print(" Das trifft oft zu, wenn der Ton schon AAC ist.") + print("") + print(" Kam dieser Aufruf von zuhause, ist Punkt 1 die Erklärung — und dann") + print(" sagt die Messung nichts darüber, was von unterwegs käme.") }