From 57170b20ea90dad1ef531c37654a518f805f13d0 Mon Sep 17 00:00:00 2001 From: Scarriffle Date: Tue, 29 Sep 2026 06:11:44 +0200 Subject: [PATCH] Der Untertitelstil wirkt jetzt sofort MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `textStyleRules` wird nur gelesen, wenn die Untertitelspur ausgewaehlt wird — eine laufende Einblendung zeichnet AVFoundation davon nicht neu. Genau das war der Eindruck: man stellt um, es passiert nichts, und erst wer die Untertitel aus- und wieder einschaltet, sieht die Aenderung. Dieses Aus- und Einschalten **ist** die Neuwahl. Also machen wir sie selbst, gleich nachdem der Stil gesetzt wurde. Abgewaehlt und wieder angewaehlt wird dabei dieselbe Option, nicht die erste: bei mehreren Spuren waere das ein stiller Sprachwechsel. Co-Authored-By: Claude Opus 5 --- .../FlixyPlayback/Engine/AVPlayerEngine.swift | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/Packages/FlixyKit/Sources/FlixyPlayback/Engine/AVPlayerEngine.swift b/Packages/FlixyKit/Sources/FlixyPlayback/Engine/AVPlayerEngine.swift index 352b9a0..c836328 100644 --- a/Packages/FlixyKit/Sources/FlixyPlayback/Engine/AVPlayerEngine.swift +++ b/Packages/FlixyKit/Sources/FlixyPlayback/Engine/AVPlayerEngine.swift @@ -259,7 +259,26 @@ public final class AVPlayerEngine: VideoPlayerEngine { /// angelegt. public func applySubtitleStyle(_ style: SubtitleStyle) { subtitleStyle = style - player.currentItem?.textStyleRules = style.textStyleRules + guard let item = player.currentItem else { return } + item.textStyleRules = style.textStyleRules + + // **Und die Spur neu wählen, sonst bleibt es bei der alten Form.** + // + // `textStyleRules` wird nur gelesen, wenn die Untertitelspur + // ausgewählt wird — eine laufende Einblendung zeichnet AVFoundation + // davon nicht neu. Das war genau der Eindruck: man stellt um, es + // passiert nichts, und erst wer die Untertitel aus- und wieder + // einschaltet, sieht die Änderung. Das Aus- und Einschalten ist die + // Neuwahl — also machen wir sie selbst. + // + // Abgewählt und wieder angewählt wird dieselbe Option, nicht die + // erste: bei mehreren Spuren wäre das ein stiller Sprachwechsel. + guard let group = item.asset.mediaSelectionGroup(forMediaCharacteristic: .legible), + let gewählt = item.currentMediaSelection.selectedMediaOption(in: group) + else { return } + + item.select(nil, in: group) + item.select(gewählt, in: group) } /// Was gerade über die Leitung kommt.