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