mirror of
https://github.com/yattee/yattee.git
synced 2025-08-09 20:24:06 +00:00
feat: default lang and mpv audio track switching
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -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 ?? []
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user