From 806eb381c72cbf9d77296e0eba47fd002fed73de Mon Sep 17 00:00:00 2001 From: Scarriffle Date: Mon, 28 Sep 2026 19:38:00 +0200 Subject: [PATCH] Beim Durchreichen darf viel weiter vorgeladen werden MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Es sind zwei verschiedene Lagen, und sie hatten bisher dieselbe Zahl. Rechnet der Server um, existieren die Schnipsel noch gar nicht — ffmpeg erzeugt sie gerade, und weiter voraus als bis dorthin kommt niemand. Eine Minute ist dort reichlich; ein groesserer Wunsch liefe ins Leere. Wird die Datei unveraendert durchgereicht, liegt sie fertig auf der Platte und kommt ueber gewoehnliche Bereichsanfragen — dieselbe Lage wie bei einem Video im Netz, das man beliebig weit vorausladen kann. Dort bei einer Minute aufzuhoeren war schlicht zu schuechtern; jetzt sind es zehn. Co-Authored-By: Claude Opus 5 --- Flixy/Views/Player/PlayerModel.swift | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/Flixy/Views/Player/PlayerModel.swift b/Flixy/Views/Player/PlayerModel.swift index f802581..5f856b5 100644 --- a/Flixy/Views/Player/PlayerModel.swift +++ b/Flixy/Views/Player/PlayerModel.swift @@ -225,13 +225,24 @@ final class PlayerModel { /// sagen ihm nur, dass er sich nicht mit weniger zufriedengeben soll, als /// er von sich aus täte. /// - /// Eine Minute. Der Preis ist Datenvolumen, das beim Spulen verfällt, und - /// Speicher — beides tragbar. Der harte Deckel liegt ohnehin woanders: - /// rechnet der Server gerade um, existieren die Schnipsel noch gar nicht, - /// und weiter voraus als ffmpeg produziert hat kommt niemand. Jellyfins - /// eigene Drosselung ist dabei nicht im Spiel — sie ist standardmässig - /// aus und griffe erst bei 180 Sekunden. - private static let forwardBuffer: Duration = .seconds(60) + /// **Zwei Zahlen, weil es zwei verschiedene Lagen sind.** + /// + /// Rechnet der Server um, existieren die Schnipsel noch gar nicht — ffmpeg + /// erzeugt sie gerade. Weiter voraus als bis dorthin kommt niemand, und + /// ein grösserer Wunsch liefe ins Leere. Eine Minute ist dort reichlich. + /// + /// Wird die Datei dagegen unverändert durchgereicht, liegt sie fertig auf + /// der Platte und kommt über gewöhnliche Bereichsanfragen — dieselbe Lage + /// wie bei einem Video im Netz, das man beliebig weit vorausladen kann. + /// Dort bei einer Minute aufzuhören war schlicht zu schüchtern. + /// + /// Der Preis ist Datenvolumen, das beim Spulen verfällt. Beim + /// Durchreichen ist das verschmerzbar: die Datei wird ohnehin als Ganzes + /// geholt, wenn man sie zu Ende sieht. + private static func forwardBuffer(for method: PlaybackDecision.Method) -> Duration { + if case .directPlay = method { return .seconds(600) } + return .seconds(60) + } /// Wie oft der Zustand des Streams geprüft wird. /// @@ -703,7 +714,7 @@ final class PlayerModel { url: target.url, origin: .remote, startTime: start, - forwardBuffer: Self.forwardBuffer + forwardBuffer: Self.forwardBuffer(for: decision.method) ) } catch { // Die Worte des Servers stehen auf dem Bildschirm, nicht „keine