From 064f8f61af16047cb288470b3ce93e18f0bd52ac Mon Sep 17 00:00:00 2001 From: Scarriffle Date: Sat, 10 Oct 2026 20:50:44 +0200 Subject: [PATCH] =?UTF-8?q?Eine=20wachsende=20Abspielliste=20hat=20keine?= =?UTF-8?q?=20L=C3=A4nge,=20also=20kam=20nie=20eine?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Mein letzter Versuch griff an der falschen Stelle: er verbesserte, was `durationResolved` einträgt — nur kommt dieses Ereignis bei einem Strom aus Flaro gar nicht. Die Abspielliste wächst und trägt kein `EXT-X-ENDLIST`; für AVPlayer ist die Dauer damit unbestimmt. `duration` blieb also auf nichts, und die Ansicht rechnet dann mit einer Sekunde (`model.duration ?? .seconds(1)`). Darum stand der Regler bei 1:50:07 am Anschlag, egal was noch kam. Jetzt wird die Länge gesetzt, sobald der Strom steht — aus der Datei, die der Spieler ohnehin in der Hand hat. Auf den Player zu warten hiesse, auf etwas zu warten, das er nicht wissen kann. Co-Authored-By: Claude Opus 5 --- Flaro/Views/Player/PlayerModel.swift | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Flaro/Views/Player/PlayerModel.swift b/Flaro/Views/Player/PlayerModel.swift index 72d4d8c..aa8d8d7 100644 --- a/Flaro/Views/Player/PlayerModel.swift +++ b/Flaro/Views/Player/PlayerModel.swift @@ -873,6 +873,17 @@ final class PlayerModel { streamOffset = target.startOffset streamEnd = nil + // **Die Länge kommt aus der Datei, nicht vom Player.** + // + // Eine wachsende Abspielliste hat für AVPlayer keine Länge — sie + // trägt kein `EXT-X-ENDLIST`, also bleibt die Dauer unbestimmt + // und `durationResolved` kommt nie. Ohne diese Zeile blieb + // `duration` auf nichts, und die Ansicht rechnet dann mit einer + // Sekunde: der Regler stand bei 1:50:07 am Anschlag. + if let bekannt = part.duration ?? item.duration { + duration = .milliseconds(bekannt) + } + // **Der Vorrat läuft voraus, nicht der Player.** // // AVPlayer entscheidet selbst, wie weit er puffert, und bei einer