feat: default lang and mpv audio track switching

This commit is contained in:
ned
2025-06-01 21:10:46 +02:00
parent 2a597ab3cb
commit 2461a33feb
7 changed files with 216 additions and 12 deletions

View File

@@ -185,6 +185,10 @@ final class MPVBackend: PlayerBackend {
var audioSampleRate: String {
client?.audioSampleRate ?? "unknown"
}
var availableAudioTracks: [Stream.AudioTrack] {
stream?.audioTracks ?? []
}
init() {
clientTimer = .init(interval: .seconds(Self.timeUpdateInterval), mode: .infinite) { [weak self] _ in
@@ -243,6 +247,9 @@ final class MPVBackend: PlayerBackend {
let updateCurrentStream = {
DispatchQueue.main.async { [weak self] in
if self?.video?.id != video.id {
self?.model.selectedAudioTrackIndex = 0
}
self?.stream = stream
self?.video = video
self?.model.stream = stream
@@ -319,6 +326,7 @@ final class MPVBackend: PlayerBackend {
startPlaying()
}
stream.audioAsset = AVURLAsset(url: stream.audioTracks[stream.selectedAudioTrackIndex].url)
let fileToLoad = self.model.musicMode ? stream.audioAsset.url : stream.videoAsset.url
let audioTrack = self.model.musicMode ? nil : stream.audioAsset.url
@@ -728,4 +736,13 @@ final class MPVBackend: PlayerBackend {
logger.info("MPV backend received unhandled property: \(name)")
}
}
func switchAudioTrack(to index: Int) {
guard let stream, let video else { return }
stream.selectedAudioTrackIndex = index
model.saveTime { [weak self] in
self?.playStream(stream, of: video, preservingTime: true, upgrading: false)
}
}
}

View File

@@ -210,6 +210,14 @@ final class PlayerModel: ObservableObject {
var keyPressMonitor: Any?
#endif
@Published var selectedAudioTrackIndex = 0 {
didSet {
if oldValue != selectedAudioTrackIndex {
handleAudioTrackChange()
}
}
}
init() {
#if os(iOS)
isOrientationLocked = Defaults[.isOrientationLocked]
@@ -1467,4 +1475,12 @@ final class PlayerModel: ObservableObject {
}
}
#endif
private func handleAudioTrackChange() {
(backend as? MPVBackend)?.switchAudioTrack(to: selectedAudioTrackIndex)
}
var availableAudioTracks: [Stream.AudioTrack] {
(backend as? MPVBackend)?.availableAudioTracks ?? []
}
}