Apply prefer language settings to VideoPlayer
This commit is contained in:
parent
3ee33461d3
commit
f308219c34
|
@ -455,7 +455,7 @@ class PlayerViewController: UIViewController, GCKDiscoveryManagerListener, GCKRe
|
|||
item.videoType = .transcode
|
||||
item.videoUrl = streamURL!
|
||||
|
||||
let disableSubtitleTrack = Subtitle(name: "Disabled", id: -1, url: nil, delivery: .embed, codec: "")
|
||||
let disableSubtitleTrack = Subtitle(name: "Disabled", id: -1, url: nil, delivery: .embed, codec: "", langCode: "")
|
||||
subtitleTrackArray.append(disableSubtitleTrack)
|
||||
|
||||
// Loop through media streams and add to array
|
||||
|
@ -467,7 +467,7 @@ class PlayerViewController: UIViewController, GCKDiscoveryManagerListener, GCKRe
|
|||
} else {
|
||||
deliveryUrl = nil
|
||||
}
|
||||
let subtitle = Subtitle(name: stream.displayTitle ?? "Unknown", id: Int32(stream.index!), url: deliveryUrl, delivery: stream.deliveryMethod!, codec: stream.codec ?? "webvtt")
|
||||
let subtitle = Subtitle(name: stream.displayTitle ?? "Unknown", id: Int32(stream.index!), url: deliveryUrl, delivery: stream.deliveryMethod!, codec: stream.codec ?? "webvtt", langCode: stream.language ?? "")
|
||||
|
||||
if subtitle.delivery != .encode {
|
||||
subtitleTrackArray.append(subtitle)
|
||||
|
@ -475,7 +475,7 @@ class PlayerViewController: UIViewController, GCKDiscoveryManagerListener, GCKRe
|
|||
}
|
||||
|
||||
if stream.type == .audio {
|
||||
let subtitle = AudioTrack(name: stream.displayTitle!, id: Int32(stream.index!))
|
||||
let subtitle = AudioTrack(name: stream.displayTitle!, langCode: stream.language ?? "", id: Int32(stream.index!))
|
||||
if stream.isDefault! == true {
|
||||
selectedAudioTrack = Int32(stream.index!)
|
||||
}
|
||||
|
@ -499,7 +499,7 @@ class PlayerViewController: UIViewController, GCKDiscoveryManagerListener, GCKRe
|
|||
item.videoUrl = streamURL
|
||||
item.videoType = .directPlay
|
||||
|
||||
let disableSubtitleTrack = Subtitle(name: "Disabled", id: -1, url: nil, delivery: .embed, codec: "")
|
||||
let disableSubtitleTrack = Subtitle(name: "Disabled", id: -1, url: nil, delivery: .embed, codec: "", langCode: "")
|
||||
subtitleTrackArray.append(disableSubtitleTrack)
|
||||
|
||||
// Loop through media streams and add to array
|
||||
|
@ -511,7 +511,7 @@ class PlayerViewController: UIViewController, GCKDiscoveryManagerListener, GCKRe
|
|||
} else {
|
||||
deliveryUrl = nil
|
||||
}
|
||||
let subtitle = Subtitle(name: stream.displayTitle ?? "Unknown", id: Int32(stream.index!), url: deliveryUrl, delivery: stream.deliveryMethod!, codec: stream.codec!)
|
||||
let subtitle = Subtitle(name: stream.displayTitle ?? "Unknown", id: Int32(stream.index!), url: deliveryUrl, delivery: stream.deliveryMethod!, codec: stream.codec!, langCode: stream.language ?? "")
|
||||
|
||||
if subtitle.delivery != .encode {
|
||||
subtitleTrackArray.append(subtitle)
|
||||
|
@ -519,7 +519,7 @@ class PlayerViewController: UIViewController, GCKDiscoveryManagerListener, GCKRe
|
|||
}
|
||||
|
||||
if stream.type == .audio {
|
||||
let subtitle = AudioTrack(name: stream.displayTitle!, id: Int32(stream.index!))
|
||||
let subtitle = AudioTrack(name: stream.displayTitle!, langCode: stream.language ?? "", id: Int32(stream.index!))
|
||||
if stream.isDefault! == true {
|
||||
selectedAudioTrack = Int32(stream.index!)
|
||||
}
|
||||
|
@ -542,7 +542,33 @@ class PlayerViewController: UIViewController, GCKDiscoveryManagerListener, GCKRe
|
|||
.store(in: &cancellables)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
func setupTracksForPreferLanguage() {
|
||||
subtitleTrackArray.forEach { subtitle in
|
||||
if Defaults[.isAutoSelectSubtitles] {
|
||||
if Defaults[.autoSelectSubtitlesLangCode] == "Auto",
|
||||
subtitle.langCode.contains(Locale.current.languageCode ?? "") {
|
||||
selectedCaptionTrack = subtitle.id
|
||||
mediaPlayer.currentVideoSubTitleIndex = subtitle.id
|
||||
} else if subtitle.langCode.contains(Defaults[.autoSelectSubtitlesLangCode]) {
|
||||
selectedCaptionTrack = subtitle.id
|
||||
mediaPlayer.currentVideoSubTitleIndex = subtitle.id
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
audioTrackArray.forEach { audio in
|
||||
if Defaults[.autoSelectAudioLangCode] == "Auto",
|
||||
audio.langCode.contains(Locale.current.languageCode ?? "") {
|
||||
selectedAudioTrack = audio.id
|
||||
mediaPlayer.currentAudioTrackIndex = audio.id
|
||||
} else if audio.langCode.contains(Defaults[.autoSelectAudioLangCode]) {
|
||||
selectedAudioTrack = audio.id
|
||||
mediaPlayer.currentAudioTrackIndex = audio.id
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func startLocalPlaybackEngine(_ fetchCaptions: Bool) {
|
||||
print("Local playback engine starting.")
|
||||
mediaPlayer.media = VLCMedia(url: playbackItem.videoUrl)
|
||||
|
@ -594,6 +620,7 @@ class PlayerViewController: UIViewController, GCKDiscoveryManagerListener, GCKRe
|
|||
|
||||
mediaPlayer.pause()
|
||||
mediaPlayer.play()
|
||||
setupTracksForPreferLanguage()
|
||||
|
||||
print("Local engine started.")
|
||||
}
|
||||
|
|
|
@ -45,6 +45,6 @@ final class SettingsViewModel: ObservableObject {
|
|||
isoLanguageCodesPair = Locale.isoLanguageCodes.compactMap {
|
||||
guard let name = currentLocale.localizedString(forLanguageCode: $0) else { return nil }
|
||||
return (name, $0)
|
||||
}
|
||||
}.sorted(by: { $0.name < $1.name })
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,10 +16,12 @@ struct Subtitle {
|
|||
var url: URL?
|
||||
var delivery: SubtitleDeliveryMethod
|
||||
var codec: String
|
||||
var langCode: String
|
||||
}
|
||||
|
||||
struct AudioTrack {
|
||||
var name: String
|
||||
var langCode: String
|
||||
var id: Int32
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue