Der Decider brauchte keine Änderung — nur eine andere Richtlinie.
Genau dafür war er gebaut.
Transcoding
- TranscodeRequest baut die Parameter für /video/:/transcode/universal.
directStream=1 lässt Plex nur umpacken, wenn der Bildcodec passt,
statt pauschal neu zu kodieren.
- Vor dem Start wird der Server gefragt (decision); sagt er nein, steht
der Grund im Klartext da statt eines schwarzen Bildes.
- Beim Verlassen wird der Transcoder angehalten. Ohne dieses Signal
rechnet der Server minutenlang für niemanden weiter.
- Die adaptive Bitrate kommt mit HLS: AVPlayer wechselt sie selbst.
Qualitätseinstellungen
- Getrennt für WLAN und Mobilfunk, fünf spürbare Stufen.
Voreinstellung: zuhause Original, unterwegs 4 Mbit.
- NetworkConditions erkennt Mobilfunk über isExpensive — das deckt auch
den Hotspot ab, der technisch WLAN ist und trotzdem Volumen kostet.
Spuren und Marken
- Ton- und Untertitelwahl im Player, bevorzugte Sprache in den
Einstellungen, nachsichtiger Sprachvergleich (de/deu/ger/de-DE).
- Intro- und Abspann-Marken mit Überspringen-Knopf, optional
automatisch. Bereits übersprungene Marken werden gemerkt, sonst käme
man nach einem Rücksprung nie ins Intro zurück.
- Nächste Folge inkl. Staffelwechsel; Specials in Staffel 0 werden
nicht vorgezogen.
Fortschritt
- Alle zehn Sekunden an den Server, plus Schlussmeldung beim Verlassen.
Erst die nimmt den Titel aus „wird gerade abgespielt" heraus.
- markWatched/markUnwatched/rate/refreshLibrary stehen bereit.
86 Tests.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Anmelde-Adresse wurde doppelt kodiert
URLComponents.fragment kodiert beim Setzen erneut, aus %5B wurde
%255B. Plex antwortete mit „Diese Anfrage konnte nicht abgeschlossen
werden". Die Adresse wird jetzt von Hand zusammengesetzt.
Verbindungssuche hing bis zu anderthalb Minuten
probeTimeout war deklariert, aber nirgends angewendet — es galt der
URLSession-Standard von 60 Sekunden. Zusammen mit der Prüfung Rang
für Rang kostete eine schweigende lokale Adresse die volle Zeit,
bevor der direkte Weg überhaupt begann. Jetzt laufen alle Adressen
gleichzeitig, mit Zeitgrenze, und die Rangordnung entscheidet unter
den erreichbaren.
Kein Zurück während des Ladens
Die Kopfzeile mit dem Schließen-Knopf wurde nur im Zustand .playing
gezeichnet. Bei langsamer Verbindung saß man ohne Ausweg vor einem
Ladekreis. Sie liegt jetzt als eigene Ebene darüber und erscheint
auch beim Vorbereiten — samt Titel, damit erkennbar bleibt, worauf
gewartet wird.
Sechs neue Tests, darunter drei, die die Zeitgrenze der
Verbindungssuche an einer schweigenden Adresse nachstellen.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Die Datenschicht:
- plex.tv-Anmeldung über das PIN-Verfahren, Token im Schlüsselbund
- Serversuche und Verbindungsauswahl nach Rang (lokal vor direkt vor
Vermittlung), mit Abgleich der Server-Kennung gegen veraltete
plex.direct-Adressen
- PlexServer als einzige Stelle, an der die App Endpunkte kennt:
Mediatheken, Hubs, seitenweises Blättern mit Filtern, Metadaten,
Staffeln/Folgen, Suche
Die Oberfläche:
- Startseite mit Aufmacher und den Reihen vom Server
- Mediathek als Raster oder Liste, mit Filter- und Sortierblatt
- Detailseiten für Filme, Folgen, Serien und Staffeln inkl. Besetzung,
Fassungsauswahl und aufklappbaren technischen Angaben
- Suche mit gemerkten Anfragen
- Vollbildplayer mit eigenem Chrome
Der Player:
- AVPlayerEngine und VLCPlayerEngine hinter einem gemeinsamen Protokoll
- VLCKit liegt in einem eigenen Package (FlixyVLC), damit `swift test`
in FlixyKit nicht das 920-MB-Binärpaket mitzieht
Am echten plex.tv geprüft: der Anmeldecode kommt an. Dabei fiel auf,
dass `strong=true` einen dreißigstelligen Code liefert, der sich bei
plex.tv/link nicht eintippen lässt — jetzt der kurze.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>