Ein Sprung in den Vorrat laeuft jetzt sofort weiter
Drei Gruende, und der erste erklaert das ganze Aergernis. AVPlayer besteht nach einem Sprung darauf, erst seinen eigenen Puffer zu fuellen. Der stand auf sechzig Sekunden — richtig, solange er selbst vorladen sollte. Mit einem Speicher davor ist es das Gegenteil: springt man mitten in den Vorrat, liegt dahinter vielleicht noch eine halbe Minute, zu wenig fuer seine sechzig, und er wartet auf den Server, obwohl alles da ist. Der Abstand liegt jetzt bei uns; seiner darf klein sein. Der Vorrat holte ausserdem weiter Schnipsel hinter der Abspielstelle, wenn der Player vorausgesprungen war — und der eine, auf den gerade gewartet wurde, kam als letzter. Er macht jetzt dort weiter, wo gesprungen wurde. Und dieselbe Liste noch einmal zu holen setzte den Vorrat zurueck. Der Player holt sie staendig: nach einem Sprung, beim Stufenwechsel, von sich aus. Zurueckgesetzt wird nur noch bei einem echten Wechsel der Quelle. Dazu ein latenter Fehler, der beim Umpacken ein Schwarzbild gegeben haette: in EXT-X-MAP steckt die Adresse des Kopfstuecks einer fragmentierten MP4, ohne das kein einziger Schnipsel zu dekodieren ist. Sie blieb stehen und zeigte damit relativ auf den lokalen Server. Der alte Test hielt genau dieses Verhalten fest — er hat mitgeaendert. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
bbd1c3b572
commit
4b084bc926
@@ -752,13 +752,28 @@ final class PlayerModel {
|
||||
// **Und wenn es nicht hochkommt, spielt es trotzdem.** Ein
|
||||
// fehlender Vorrat ist ein Verlust an Bequemlichkeit; keine
|
||||
// Wiedergabe ist ein Verlust an allem.
|
||||
let adresse = await startPrefetching(from: target.url) ?? target.url
|
||||
let lokal = await startPrefetching(from: target.url)
|
||||
let adresse = lokal ?? target.url
|
||||
|
||||
return PlaybackSource(
|
||||
url: adresse,
|
||||
origin: .remote,
|
||||
startTime: start,
|
||||
forwardBuffer: Self.forwardBuffer(for: decision.method)
|
||||
// **Mit eigenem Vorrat ein kleiner Puffer.**
|
||||
//
|
||||
// Er bestimmt, wie viel AVPlayer beisammenhaben will, bevor
|
||||
// er nach einem Sprung weiterspielt. Sechzig Sekunden waren
|
||||
// richtig, solange er selbst vorladen sollte; mit einem
|
||||
// Speicher davor sind sie das Gegenteil: springt man mitten
|
||||
// in den Vorrat, liegt dahinter vielleicht noch ein halbe
|
||||
// Minute — zu wenig für seine sechzig, und er wartet auf den
|
||||
// Server, obwohl alles da ist.
|
||||
//
|
||||
// Der Abstand liegt jetzt bei uns. Seiner darf so klein sein,
|
||||
// dass er sofort loslegt.
|
||||
forwardBuffer: lokal == nil
|
||||
? Self.forwardBuffer(for: decision.method)
|
||||
: .seconds(8)
|
||||
)
|
||||
} catch {
|
||||
// Die Worte des Servers stehen auf dem Bildschirm, nicht „keine
|
||||
|
||||
Reference in New Issue
Block a user