Beim Durchreichen darf viel weiter vorgeladen werden

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 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-09-28 19:38:00 +02:00
co-authored by Claude Opus 5
parent f48e018fa3
commit 806eb381c7
+19 -8
View File
@@ -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