From 5e33971452a3f08be5c13532481c9b1ae707243a Mon Sep 17 00:00:00 2001 From: Scarriffle Date: Mon, 28 Sep 2026 21:40:30 +0200 Subject: [PATCH] AVPlayer hat die Untertitel wieder abgeschaltet MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Der Server lieferte sie, die Spur lag im Stream, ausgewaehlt war sie auch — und angezeigt wurde trotzdem nichts. Der Grund ist eine Eigenschaft, die von Haus aus auf `true` steht: `appliesMediaSelectionCriteriaAutomatically`. Der Player richtet sich damit nach den Untertiteleinstellungen des Systems, und die stehen in aller Regel auf „aus\". Er nahm also jede Wahl, die wir trafen, wieder zurueck — lautlos, und erst nachdem wir sie gesetzt hatten. Beim Ton aendert das Abschalten nichts: welche Spur klingt, ist laengst beim Aushandeln entschieden, und bei einem umgerechneten Stream kommt ohnehin nur eine an. Dazu eine zweite Absicherung: bei einer Abspielliste laedt AVFoundation die Nebenspuren nachtraeglich. Meldet sie beim ersten Mal noch keine, ginge der bestellte Untertitel verloren — deshalb wird im Sekundentakt nachgefasst, solange nichts ausgewaehlt ist. Co-Authored-By: Claude Opus 5 --- Flixy/Views/Player/PlayerModel.swift | 5 +++++ .../FlixyPlayback/Engine/AVPlayerEngine.swift | 17 +++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/Flixy/Views/Player/PlayerModel.swift b/Flixy/Views/Player/PlayerModel.swift index 2e089af..cd14716 100644 --- a/Flixy/Views/Player/PlayerModel.swift +++ b/Flixy/Views/Player/PlayerModel.swift @@ -814,6 +814,11 @@ final class PlayerModel { // „automatisch" — wer eine Stufe gewählt hatte, sah nie, wie // weit geladen ist. self.refreshBuffered() + // **Noch einmal nachfassen.** Bei einer Abspielliste lädt + // AVFoundation die Nebenspuren nachträglich; meldet sie beim + // ersten Mal noch keine, ginge der bestellte Untertitel sonst + // verloren. Der Aufruf prüft selbst, ob es etwas zu tun gibt. + self.showOrderedSubtitle() // Geregelt wird dagegen nur, wo es etwas zu regeln gibt. guard self.quality == .automatic else { continue } diff --git a/Packages/FlixyKit/Sources/FlixyPlayback/Engine/AVPlayerEngine.swift b/Packages/FlixyKit/Sources/FlixyPlayback/Engine/AVPlayerEngine.swift index 030198c..fad508b 100644 --- a/Packages/FlixyKit/Sources/FlixyPlayback/Engine/AVPlayerEngine.swift +++ b/Packages/FlixyKit/Sources/FlixyPlayback/Engine/AVPlayerEngine.swift @@ -85,6 +85,23 @@ public final class AVPlayerEngine: VideoPlayerEngine { public init() { AudioSession.activate() + + // **AVPlayer wählt Untertitel sonst selbst — und schaltet sie ab.** + // + // Diese Eigenschaft steht von Haus aus auf `true`: der Player richtet + // sich dann nach den Untertiteleinstellungen des Systems. Die stehen + // in aller Regel auf „aus", und damit nimmt er jede Wahl, die wir + // treffen, wieder zurück — lautlos, und erst nachdem wir sie gesetzt + // haben. + // + // Zu sehen war das als „ich schalte Untertitel ein und sehe nichts": + // der Server lieferte sie, die Spur war im Stream, ausgewählt war sie + // auch, und angezeigt wurde trotzdem nichts. + // + // Beim Ton ändert das Abschalten nichts: welche Spur klingt, ist + // längst beim Aushandeln entschieden, und bei einem umgerechneten + // Stream kommt ohnehin nur eine an. + player.appliesMediaSelectionCriteriaAutomatically = false } public func load(_ source: PlaybackSource) async throws(PlaybackFailure) {