Zwei Fehler, die dieselbe Ursache haben: alles, was über VLC läuft, ging
an der Bildebene vorbei, an der die App gedreht hat.
**Das Bild sass nicht mittig.** Nicht ein paar Punkte daneben — gemessen
eine Anzeigefläche von 1200×480 Punkt in einer Zeichenfläche von 711×400,
unten rechts angeschlagen, im falschen Seitenverhältnis. Der Grund steht
im Vertrag von `VLCDrawable`: VLCKit fragt die Grösse **einmal** beim
Anlegen ab und überlässt seine Anzeigefläche danach der
Autoresizing-Maske. Eine Maske hält aber den Unterschied fest, nicht das
Verhältnis — was beim Anlegen zu gross war, bleibt für immer um denselben
Betrag zu gross. Und angelegt wird sie mitten in der Drehung ins
Querformat, während SwiftUI sie einblendet: also regelmässig falsch.
Die Zeichenfläche ist jetzt eine eigene Klasse, die ihrer Anzeigefläche
bei jedem Layout wieder die eigene Grösse gibt. Danach gemessen: 695,7 ×
400 Punkt, Rand links 130,0, rechts 130,3 — mittig.
**Der Knopf für einpassen/füllen tat nichts.** Er schrieb `videoGravity`
auf eine `AVPlayerLayer`, die bei VLC gar nicht im Baum hängt. Die
Einstellung geht deshalb jetzt durch die Engine: `setVideoFit` am
Protokoll, beim Systemplayer eine Voreinstellung, die nichts tut — dort
macht es die Bildebene —, bei VLC `videoFitMode`. `smaller` heisst bei
libvlc „fit inside", `larger` „fit outside".
Gemessen, im Querformat auf einem Pro Max, über VLC:
eingepasst 695,7 × 400 pt Rand l/r 130,0/130,3 o/u 20,0/20,0
füllend 935,3 × 440 pt Rand l/r 10,3/ 10,3 o/u 0,0/ 0,0
**Zurückgenommen:** im Kommentar an `videoFit` stand, ein `didSet` auf
einer `@Observable`-Klasse werde nicht gemeldet. Das stimmt nicht —
`HomeLayoutSettings` lebt davon. Ein Kommentar, der einen falschen
Mechanismus behauptet, schickt den nächsten in die falsche Richtung;
jetzt steht der belegte Grund dort.
Dazu, damit dieser Weg überhaupt prüfbar ist: die Attrappe meldet mit
`--vlc` DTS-Ton. AVFoundation kann das nicht, also fällt die App auf
VLCKit zurück. Die Beispieldatei bleibt dieselbe — geprüft wird der Weg,
nicht der Ton. Ohne diesen Schalter ist der VLC-Zweig im Simulator gar
nicht zu erreichen, und genau deshalb lagen beide Fehler so lange da.
Ebenfalls dabei: `EdgeInsets.symmetrical` mit fünf Tests und das Polster
im Player, das damit nicht mehr verschiebt statt einrückt.
iOS und tvOS bauen, 465 Tests grün.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
40 lines
1.7 KiB
Markdown
40 lines
1.7 KiB
Markdown
# Jellyfin-Attrappe
|
|
|
|
Ein Server, der so tut, als wäre er Jellyfin — gerade so viel, dass die App
|
|
sich anmelden und stöbern kann. Gedacht fürs Ansehen der Oberfläche, nicht
|
|
fürs Prüfen der Protokollschicht; dafür gibt es Tests mit aufgezeichneten
|
|
Antworten.
|
|
|
|
```bash
|
|
python3 Tools/JellyfinStub/server.py
|
|
```
|
|
|
|
Dann in der App **Mit Jellyfin anmelden** → `127.0.0.1` eintragen. Quick
|
|
Connect bestätigt sich nach drei Abfragen von selbst, damit der Bildschirm mit
|
|
dem Code sichtbar wird und die Anmeldung trotzdem durchläuft.
|
|
|
|
Die Bilder sind einfarbige Flächen, deren Farbe aus der Kennung des Titels
|
|
entsteht. Das ist Absicht: so lässt sich auf einen Blick erkennen, ob der
|
|
Aufmacher tatsächlich weiterwandert und ob eine Kachel das Bild zeigt, das zu
|
|
ihr gehört.
|
|
|
|
Abgespielt wird `sample.mp4` — zehn Sekunden Farbverlauf, mit einem kleinen
|
|
Swift-Programm erzeugt. Der Server beantwortet Bereichsanfragen, weil der
|
|
Systemplayer eine Datei nie am Stück holt.
|
|
|
|
Was hereinkommt, steht unter `http://127.0.0.1:8096/__reports`: jede
|
|
Wiedergabemeldung mit ihrem Anfragekörper. Damit lässt sich prüfen, ob die App
|
|
den Beginn meldet, ob der Fortschritt in Ticks ankommt und ob am Ende
|
|
abgeräumt wird.
|
|
|
|
Mit `--unanalysed` melden die Quellen keine Spuren. Dann entscheidet die App
|
|
wie bei einem Server, der eine Datei noch nicht untersucht hat.
|
|
|
|
Mit `--vlc` melden sie DTS-Ton. AVFoundation kann das nicht, also läuft die
|
|
Wiedergabe über VLCKit — der einzige Weg, diesen Zweig mit der Beispieldatei
|
|
überhaupt zu erreichen. Die Datei bleibt dieselbe; VLC spielt sie ebenso, und
|
|
geprüft wird der Weg, nicht der Ton.
|
|
|
|
Kein echter Server wird dabei angefasst, und es gehen keine Zugangsdaten über
|
|
die Leitung.
|