Apply prefer language settings to VideoPlayer

This commit is contained in:
PangMo5 2021-06-25 17:42:40 +09:00
parent 3ee33461d3
commit f308219c34
3 changed files with 37 additions and 8 deletions

View File

@ -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!)
}
@ -543,6 +543,32 @@ class PlayerViewController: UIViewController, GCKDiscoveryManagerListener, GCKRe
}
}
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.")
}

View File

@ -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 })
}
}

View File

@ -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
}