Untertitel werden auch gezeigt, und die Stelle geht nicht mehr verloren
Zwei Fehler, die beide beim Umstellen im laufenden Film auftraten. Der Server lieferte den gewaehlten Untertitel brav mit — nur sagte danach niemand dem Player, dass er ihn **zeigen** soll. Gewaehlt wurde allein in `applyPreferredLanguages()`, und das greift nur, wenn in den Einstellungen eine Untertitelsprache steht. Wer keine eingestellt hatte, schaltete die Untertitel ein und sah nichts. Jetzt wird die bestellte Spur nach dem Neuaufbau angezeigt; bei einem umgerechneten Stream liegt genau eine drin, naemlich die bestellte, also gibt es nichts zu verwechseln. Und der Sprung an den Filmanfang, der „teilweise\" passierte: ein frisch geoeffneter Stream meldet erst einmal null, eins, zwei — er springt erst danach an die gemerkte Stelle. Wer in diesem Augenblick `currentTime` liest, liest zwei Sekunden statt einundzwanzig Minuten. Genau das tut ein zweiter Neuaufbau, wenn man zuegig noch etwas umstellt: er merkt sich die falsche Stelle. Daher trat es nicht immer auf, sondern nur manchmal. Waehrend auf die gemerkte Stelle gewartet wird, gelten die Meldungen des anlaufenden Streams jetzt nicht mehr — dasselbe Prinzip wie beim Spulen, wo die Nachzuegler der alten Stelle verworfen werden. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
0815432efd
commit
88ba1a540c
@@ -1594,6 +1594,16 @@ final class PlayerModel {
|
|||||||
guard abs((time - ziel).seconds) < 1.5 else { break }
|
guard abs((time - ziel).seconds) < 1.5 else { break }
|
||||||
seekTarget = nil
|
seekTarget = nil
|
||||||
}
|
}
|
||||||
|
// **Und dasselbe beim Neuaufbau.**
|
||||||
|
//
|
||||||
|
// Ein frisch geöffneter Stream meldet erst einmal null,
|
||||||
|
// eins, zwei — er springt erst danach an die gemerkte
|
||||||
|
// Stelle. Wer in diesem Augenblick `currentTime` liest,
|
||||||
|
// liest zwei Sekunden statt einundzwanzig Minuten. Und
|
||||||
|
// genau das tut ein **zweiter** Neuaufbau, wenn man zügig
|
||||||
|
// noch etwas umstellt: er merkt sich die falsche Stelle
|
||||||
|
// und landet am Filmanfang. Daher „teilweise".
|
||||||
|
if let ziel = resumeTarget, time + .seconds(2) < ziel { break }
|
||||||
currentTime = time
|
currentTime = time
|
||||||
// Gedrosselt in `NowPlaying`: zwischen zwei Meldungen
|
// Gedrosselt in `NowPlaying`: zwischen zwei Meldungen
|
||||||
// zählt das System selbst weiter, es kennt das Tempo.
|
// zählt das System selbst weiter, es kennt das Tempo.
|
||||||
@@ -1620,12 +1630,33 @@ final class PlayerModel {
|
|||||||
case .tracksResolved(let audio, let subtitle):
|
case .tracksResolved(let audio, let subtitle):
|
||||||
audioTracks = audio
|
audioTracks = audio
|
||||||
subtitleTracks = subtitle
|
subtitleTracks = subtitle
|
||||||
|
showOrderedSubtitle()
|
||||||
applyPreferredLanguages()
|
applyPreferredLanguages()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Zeigt den Untertitel, den wir beim Server bestellt haben.
|
||||||
|
///
|
||||||
|
/// **Der Fehler, den das behebt:** Wer im Player einen Untertitel wählt,
|
||||||
|
/// löst einen Neuaufbau aus — der Server bekommt die Spurnummer und
|
||||||
|
/// liefert sie brav mit. Nur sagte danach niemand dem Player, dass er sie
|
||||||
|
/// **zeigen** soll. Gewählt wurde bisher allein in
|
||||||
|
/// `applyPreferredLanguages()`, und das greift nur, wenn in den
|
||||||
|
/// Einstellungen eine Untertitelsprache steht. Wer keine eingestellt
|
||||||
|
/// hatte, schaltete die Untertitel ein und sah nichts.
|
||||||
|
///
|
||||||
|
/// **Die erste ist die richtige.** Rechnet der Server um, liegt genau
|
||||||
|
/// eine im Stream — nämlich die bestellte. Es gibt nichts zu verwechseln.
|
||||||
|
private func showOrderedSubtitle() {
|
||||||
|
guard selectedSubtitleStream != nil,
|
||||||
|
selectedSubtitleTrack == nil,
|
||||||
|
let erste = subtitleTracks.first
|
||||||
|
else { return }
|
||||||
|
selectSubtitleTrack(erste)
|
||||||
|
}
|
||||||
|
|
||||||
/// Wählt die Untertitelspur, sofern eine gewünscht ist.
|
/// Wählt die Untertitelspur, sofern eine gewünscht ist.
|
||||||
///
|
///
|
||||||
/// **Nur noch Untertitel.** Die Tonspur wird nicht mehr hier gewählt,
|
/// **Nur noch Untertitel.** Die Tonspur wird nicht mehr hier gewählt,
|
||||||
|
|||||||
Reference in New Issue
Block a user