Der Vorrat holte unangemeldet, und das stand im Protokoll
20:32:40 Umpacken … Vorbereitung 3203 ms
20:32:40 FlaroToken was challenged
20:32:52 Umkodieren … 0 ms
20:32:55 erstes Stück nach 2750 ms
Einmal je Wiedergabe eine abgewiesene Anfrage, gefolgt von zwölf
Sekunden Stille und einer zweiten Bestellung. Die zwölf Sekunden sind
AVPlayer, der auf etwas wartet, das nie kommt.
Der Vorrat, der dem Spieler die Schnipsel voraushält, benutzt eine
flüchtige URLSession — und die bringt ihren eigenen, leeren Keksspeicher
mit. Jede Anfrage von dort ging unangemeldet hinaus. Bei Jellyfin fiel
das nie auf, weil der Schlüssel dort in der Adresse steht; Flaro meldet
über ein Keks an. Und bisher kam der Vorrat bei Flaro nie zum Zug: er
springt nur bei einer Abspielliste an, und die App hat bis gestern eine
fertige Datei abgespielt.
Dass die zweite Bestellung lief, passt dazu: nach dem Fehlschlag gibt der
Vorrat auf, und der Spieler holt unmittelbar vom Server — mit dem Keks,
den er selbst hat.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
347ddfea01
commit
f789c40594
@@ -80,6 +80,17 @@ public actor StreamCache {
|
|||||||
configuration.urlCache = nil
|
configuration.urlCache = nil
|
||||||
configuration.httpMaximumConnectionsPerHost = 4
|
configuration.httpMaximumConnectionsPerHost = 4
|
||||||
configuration.timeoutIntervalForRequest = 30
|
configuration.timeoutIntervalForRequest = 30
|
||||||
|
|
||||||
|
// **Die Anmeldung muss mit.**
|
||||||
|
//
|
||||||
|
// Eine flüchtige Sitzung bringt ihren eigenen, leeren Keksspeicher
|
||||||
|
// mit — jede Anfrage von hier ging also unangemeldet hinaus. Bei
|
||||||
|
// Jellyfin fiel das nie auf: dort steht der Schlüssel in der Adresse.
|
||||||
|
// Flaro meldet über ein Keks an, und im Protokoll stand genau das:
|
||||||
|
// `FlaroToken was challenged`, einmal je Wiedergabe, gefolgt von
|
||||||
|
// zwölf Sekunden Stille und einer zweiten Bestellung.
|
||||||
|
configuration.httpCookieStorage = HTTPCookieStorage.shared
|
||||||
|
configuration.httpShouldSetCookies = true
|
||||||
self.session = URLSession(configuration: configuration)
|
self.session = URLSession(configuration: configuration)
|
||||||
|
|
||||||
self.directory = FileManager.default.temporaryDirectory
|
self.directory = FileManager.default.temporaryDirectory
|
||||||
|
|||||||
Reference in New Issue
Block a user