Zwei Dinge in derselben Ecke, und ein Modus, den niemand bestellt hat
Der Gesehen-Haken und die drei Punkte sassen beide oben rechts — auf dem Plakat sah das aus wie ein Fehler. Jetzt hat jede Ecke eine Aufgabe: oben links die Auswahl, oben rechts der Stand, unten links Abspielen, unten rechts das Menü. Der Knopf „Auswählen" ist weg. Gemessen, warum er stören musste: der längere Text „Auswahl beenden" brach die Filterzeile um und schob das Raster um zwanzig Bildpunkte nach unten. Und grundsätzlicher ist ein Modus ein Zustand, den man kennen muss, bevor man etwas tun kann. Jetzt trägt jede Kachel oben links ein Kästchen, das beim Überfahren erscheint — wie die drei Punkte auch. Der erste Haken fängt die Auswahl an, der letzte beendet sie. Der Spieler lässt sich verkleinern. Er rutscht in eine Leiste am unteren Rand und läuft weiter, während man die Mediathek aufräumt; ein Klick darauf holt ihn zurück. Dasselbe Videoelement, nur anders eingerahmt — ein zweiter Spieler unten hiesse, das Video auszuhängen, und dabei hört es auf zu spielen. Das Zahnrad mit acht Strahlen sah aus wie eine Sonne. Jetzt: Wellenform für den Ton, CC-Kasten für die Untertitel, Schieberegler für die Qualität. Alle drei Menüs stehen immer da — vorher verschwanden sie bei nur einer Tonspur oder ohne Untertitel, und wer sie suchte, fand nichts und wusste nicht warum. Dabei gefunden und behoben: die Wiedergabe blieb nach zwanzig Sekunden stehen, obwohl längst der ganze Rest auf der Platte lag. Results.File setzte Last-Modified, der Browser legte die Playlist mit zwei Einträgen ab, und hls.js bekam bei jedem Nachfragen dieselben zwei zurück. Eine wachsende Liste ist das Gegenteil von zwischenspeicherbar. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
eda9e67802
commit
7df9fa6c01
@@ -167,6 +167,38 @@ public class StreamTests
|
||||
});
|
||||
}
|
||||
|
||||
/// <summary>Die Liste darf nicht zwischengespeichert werden, die Segmente schon.</summary>
|
||||
///
|
||||
/// <remarks>
|
||||
/// <b>Aus einem Fehler gelernt.</b> Die Wiedergabe blieb nach zwanzig
|
||||
/// Sekunden stehen, obwohl auf der Platte längst der ganze Rest lag:
|
||||
/// <c>Results.File</c> setzte <c>Last-Modified</c>, der Browser legte die
|
||||
/// Liste mit zwei Einträgen ab, und hls.js bekam bei jedem Nachfragen
|
||||
/// dieselben zwei zurück. Eine wachsende Liste ist das Gegenteil von
|
||||
/// zwischenspeicherbar — ein fertiges Segment dagegen ändert sich nie.
|
||||
/// </remarks>
|
||||
[Test]
|
||||
public async Task Die_Playlist_wird_nicht_zwischengespeichert()
|
||||
{
|
||||
Film("Zwischenspeicher (2020)");
|
||||
var (client, datei) = await Eingelesen();
|
||||
|
||||
var strom = await Strom(client, datei.Id, Browser());
|
||||
var liste = await client.GetAsync(strom.Url);
|
||||
var segment = await client.GetAsync($"/api/v1/stream/{strom.SessionId}/seg00000.m4s");
|
||||
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(liste.Headers.CacheControl?.NoStore, Is.True,
|
||||
"eine wachsende Liste darf nirgends liegenbleiben");
|
||||
Assert.That(liste.Content.Headers.LastModified, Is.Null,
|
||||
"sonst fragt der Browser bedingt nach und bekommt 304 auf eine veraltete Liste");
|
||||
|
||||
Assert.That(segment.Headers.CacheControl?.MaxAge, Is.Not.Null,
|
||||
"ein fertiges Segment darf liegenbleiben — das spart den Weg beim Zurückspringen");
|
||||
});
|
||||
}
|
||||
|
||||
/// <summary>Ein unbekannter Bildcodec führt zum Rechnen, nicht zum Umpacken.</summary>
|
||||
///
|
||||
/// <remarks>
|
||||
|
||||
Reference in New Issue
Block a user