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.videoType = .transcode
|
||||||
item.videoUrl = streamURL!
|
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)
|
subtitleTrackArray.append(disableSubtitleTrack)
|
||||||
|
|
||||||
// Loop through media streams and add to array
|
// Loop through media streams and add to array
|
||||||
|
@ -467,7 +467,7 @@ class PlayerViewController: UIViewController, GCKDiscoveryManagerListener, GCKRe
|
||||||
} else {
|
} else {
|
||||||
deliveryUrl = nil
|
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 {
|
if subtitle.delivery != .encode {
|
||||||
subtitleTrackArray.append(subtitle)
|
subtitleTrackArray.append(subtitle)
|
||||||
|
@ -475,7 +475,7 @@ class PlayerViewController: UIViewController, GCKDiscoveryManagerListener, GCKRe
|
||||||
}
|
}
|
||||||
|
|
||||||
if stream.type == .audio {
|
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 {
|
if stream.isDefault! == true {
|
||||||
selectedAudioTrack = Int32(stream.index!)
|
selectedAudioTrack = Int32(stream.index!)
|
||||||
}
|
}
|
||||||
|
@ -499,7 +499,7 @@ class PlayerViewController: UIViewController, GCKDiscoveryManagerListener, GCKRe
|
||||||
item.videoUrl = streamURL
|
item.videoUrl = streamURL
|
||||||
item.videoType = .directPlay
|
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)
|
subtitleTrackArray.append(disableSubtitleTrack)
|
||||||
|
|
||||||
// Loop through media streams and add to array
|
// Loop through media streams and add to array
|
||||||
|
@ -511,7 +511,7 @@ class PlayerViewController: UIViewController, GCKDiscoveryManagerListener, GCKRe
|
||||||
} else {
|
} else {
|
||||||
deliveryUrl = nil
|
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 {
|
if subtitle.delivery != .encode {
|
||||||
subtitleTrackArray.append(subtitle)
|
subtitleTrackArray.append(subtitle)
|
||||||
|
@ -519,7 +519,7 @@ class PlayerViewController: UIViewController, GCKDiscoveryManagerListener, GCKRe
|
||||||
}
|
}
|
||||||
|
|
||||||
if stream.type == .audio {
|
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 {
|
if stream.isDefault! == true {
|
||||||
selectedAudioTrack = Int32(stream.index!)
|
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) {
|
func startLocalPlaybackEngine(_ fetchCaptions: Bool) {
|
||||||
print("Local playback engine starting.")
|
print("Local playback engine starting.")
|
||||||
mediaPlayer.media = VLCMedia(url: playbackItem.videoUrl)
|
mediaPlayer.media = VLCMedia(url: playbackItem.videoUrl)
|
||||||
|
@ -594,6 +620,7 @@ class PlayerViewController: UIViewController, GCKDiscoveryManagerListener, GCKRe
|
||||||
|
|
||||||
mediaPlayer.pause()
|
mediaPlayer.pause()
|
||||||
mediaPlayer.play()
|
mediaPlayer.play()
|
||||||
|
setupTracksForPreferLanguage()
|
||||||
|
|
||||||
print("Local engine started.")
|
print("Local engine started.")
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,6 +45,6 @@ final class SettingsViewModel: ObservableObject {
|
||||||
isoLanguageCodesPair = Locale.isoLanguageCodes.compactMap {
|
isoLanguageCodesPair = Locale.isoLanguageCodes.compactMap {
|
||||||
guard let name = currentLocale.localizedString(forLanguageCode: $0) else { return nil }
|
guard let name = currentLocale.localizedString(forLanguageCode: $0) else { return nil }
|
||||||
return (name, $0)
|
return (name, $0)
|
||||||
}
|
}.sorted(by: { $0.name < $1.name })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,10 +16,12 @@ struct Subtitle {
|
||||||
var url: URL?
|
var url: URL?
|
||||||
var delivery: SubtitleDeliveryMethod
|
var delivery: SubtitleDeliveryMethod
|
||||||
var codec: String
|
var codec: String
|
||||||
|
var langCode: String
|
||||||
}
|
}
|
||||||
|
|
||||||
struct AudioTrack {
|
struct AudioTrack {
|
||||||
var name: String
|
var name: String
|
||||||
|
var langCode: String
|
||||||
var id: Int32
|
var id: Int32
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue