Fix external subtitles not displayed (#533)

This commit is contained in:
Jiahao Lu 2022-08-23 05:22:53 +08:00 committed by GitHub
parent 89fc8dbbf3
commit ad07f088bc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 29 additions and 12 deletions

View File

@ -646,6 +646,23 @@ extension VideoPlayerViewModel {
} }
} }
// MARK: Subtitle Streams
extension VideoPlayerViewModel {
func videoSubtitleStreamIndex(of subtitleStreamIndex: Int) -> Int32 {
let externalSubtitleStreams = subtitleStreams.filter { $0.isExternal == true }
guard let externalSubtitleStreamIndex = externalSubtitleStreams.firstIndex(where: { $0.index == subtitleStreamIndex }) else {
return Int32(subtitleStreamIndex)
}
let embeddedSubtitleStreamCount = subtitleStreams.count - externalSubtitleStreams.count
let embeddedStreamCount = 1 + audioStreams.count + embeddedSubtitleStreamCount
return Int32(embeddedStreamCount + externalSubtitleStreamIndex)
}
}
// MARK: Equatable // MARK: Equatable
extension VideoPlayerViewModel: Equatable { extension VideoPlayerViewModel: Equatable {

View File

@ -754,7 +754,7 @@ extension LiveTVPlayerViewController: VLCMediaPlayerDelegate {
} }
// If needing to fix subtitle streams during playback // If needing to fix subtitle streams during playback
if vlcMediaPlayer.currentVideoSubTitleIndex != viewModel.selectedSubtitleStreamIndex && if vlcMediaPlayer.currentVideoSubTitleIndex != viewModel.videoSubtitleStreamIndex(of: viewModel.selectedSubtitleStreamIndex) &&
viewModel.subtitlesEnabled viewModel.subtitlesEnabled
{ {
didSelectSubtitleStream(index: viewModel.selectedSubtitleStreamIndex) didSelectSubtitleStream(index: viewModel.selectedSubtitleStreamIndex)
@ -792,7 +792,7 @@ extension LiveTVPlayerViewController: PlayerOverlayDelegate {
func didSelectSubtitleStream(index: Int) { func didSelectSubtitleStream(index: Int) {
viewModel.subtitlesEnabled = true viewModel.subtitlesEnabled = true
vlcMediaPlayer.currentVideoSubTitleIndex = Int32(index) vlcMediaPlayer.currentVideoSubTitleIndex = viewModel.videoSubtitleStreamIndex(of: index)
viewModel.sendProgressReport() viewModel.sendProgressReport()
@ -809,7 +809,7 @@ extension LiveTVPlayerViewController: PlayerOverlayDelegate {
func didToggleSubtitles(newValue: Bool) { func didToggleSubtitles(newValue: Bool) {
if newValue { if newValue {
vlcMediaPlayer.currentVideoSubTitleIndex = Int32(viewModel.selectedSubtitleStreamIndex) vlcMediaPlayer.currentVideoSubTitleIndex = viewModel.videoSubtitleStreamIndex(of: viewModel.selectedSubtitleStreamIndex)
} else { } else {
vlcMediaPlayer.currentVideoSubTitleIndex = -1 vlcMediaPlayer.currentVideoSubTitleIndex = -1
} }

View File

@ -754,7 +754,7 @@ extension VLCPlayerViewController: VLCMediaPlayerDelegate {
} }
// If needing to fix subtitle streams during playback // If needing to fix subtitle streams during playback
if vlcMediaPlayer.currentVideoSubTitleIndex != viewModel.selectedSubtitleStreamIndex && if vlcMediaPlayer.currentVideoSubTitleIndex != viewModel.videoSubtitleStreamIndex(of: viewModel.selectedSubtitleStreamIndex) &&
viewModel.subtitlesEnabled viewModel.subtitlesEnabled
{ {
didSelectSubtitleStream(index: viewModel.selectedSubtitleStreamIndex) didSelectSubtitleStream(index: viewModel.selectedSubtitleStreamIndex)
@ -791,7 +791,7 @@ extension VLCPlayerViewController: PlayerOverlayDelegate {
func didSelectSubtitleStream(index: Int) { func didSelectSubtitleStream(index: Int) {
viewModel.subtitlesEnabled = true viewModel.subtitlesEnabled = true
vlcMediaPlayer.currentVideoSubTitleIndex = Int32(index) vlcMediaPlayer.currentVideoSubTitleIndex = viewModel.videoSubtitleStreamIndex(of: index)
viewModel.sendProgressReport() viewModel.sendProgressReport()
@ -808,7 +808,7 @@ extension VLCPlayerViewController: PlayerOverlayDelegate {
func didToggleSubtitles(newValue: Bool) { func didToggleSubtitles(newValue: Bool) {
if newValue { if newValue {
vlcMediaPlayer.currentVideoSubTitleIndex = Int32(viewModel.selectedSubtitleStreamIndex) vlcMediaPlayer.currentVideoSubTitleIndex = viewModel.videoSubtitleStreamIndex(of: viewModel.selectedSubtitleStreamIndex)
} else { } else {
vlcMediaPlayer.currentVideoSubTitleIndex = -1 vlcMediaPlayer.currentVideoSubTitleIndex = -1
} }

View File

@ -823,7 +823,7 @@ extension LiveTVPlayerViewController: VLCMediaPlayerDelegate {
} }
// If needing to fix subtitle streams during playback // If needing to fix subtitle streams during playback
if vlcMediaPlayer.currentVideoSubTitleIndex != viewModel.selectedSubtitleStreamIndex, if vlcMediaPlayer.currentVideoSubTitleIndex != viewModel.videoSubtitleStreamIndex(of: viewModel.selectedSubtitleStreamIndex),
viewModel.subtitlesEnabled viewModel.subtitlesEnabled
{ {
didSelectSubtitleStream(index: viewModel.selectedSubtitleStreamIndex) didSelectSubtitleStream(index: viewModel.selectedSubtitleStreamIndex)
@ -859,7 +859,7 @@ extension LiveTVPlayerViewController: PlayerOverlayDelegate {
/// Do not call when setting to index -1 /// Do not call when setting to index -1
func didSelectSubtitleStream(index: Int) { func didSelectSubtitleStream(index: Int) {
viewModel.subtitlesEnabled = true viewModel.subtitlesEnabled = true
vlcMediaPlayer.currentVideoSubTitleIndex = Int32(index) vlcMediaPlayer.currentVideoSubTitleIndex = viewModel.videoSubtitleStreamIndex(of: index)
viewModel.sendProgressReport() viewModel.sendProgressReport()
@ -877,7 +877,7 @@ extension LiveTVPlayerViewController: PlayerOverlayDelegate {
func didToggleSubtitles(newValue: Bool) { func didToggleSubtitles(newValue: Bool) {
if newValue { if newValue {
vlcMediaPlayer.currentVideoSubTitleIndex = Int32(viewModel.selectedSubtitleStreamIndex) vlcMediaPlayer.currentVideoSubTitleIndex = viewModel.videoSubtitleStreamIndex(of: viewModel.selectedSubtitleStreamIndex)
} else { } else {
vlcMediaPlayer.currentVideoSubTitleIndex = -1 vlcMediaPlayer.currentVideoSubTitleIndex = -1
} }

View File

@ -961,7 +961,7 @@ extension VLCPlayerViewController: VLCMediaPlayerDelegate {
} }
// If needing to fix subtitle streams during playback // If needing to fix subtitle streams during playback
if vlcMediaPlayer.currentVideoSubTitleIndex != viewModel.selectedSubtitleStreamIndex, if vlcMediaPlayer.currentVideoSubTitleIndex != viewModel.videoSubtitleStreamIndex(of: viewModel.selectedSubtitleStreamIndex),
viewModel.subtitlesEnabled viewModel.subtitlesEnabled
{ {
didSelectSubtitleStream(index: viewModel.selectedSubtitleStreamIndex) didSelectSubtitleStream(index: viewModel.selectedSubtitleStreamIndex)
@ -997,7 +997,7 @@ extension VLCPlayerViewController: PlayerOverlayDelegate {
/// Do not call when setting to index -1 /// Do not call when setting to index -1
func didSelectSubtitleStream(index: Int) { func didSelectSubtitleStream(index: Int) {
viewModel.subtitlesEnabled = true viewModel.subtitlesEnabled = true
vlcMediaPlayer.currentVideoSubTitleIndex = Int32(index) vlcMediaPlayer.currentVideoSubTitleIndex = viewModel.videoSubtitleStreamIndex(of: index)
viewModel.sendProgressReport() viewModel.sendProgressReport()
@ -1015,7 +1015,7 @@ extension VLCPlayerViewController: PlayerOverlayDelegate {
func didToggleSubtitles(newValue: Bool) { func didToggleSubtitles(newValue: Bool) {
if newValue { if newValue {
vlcMediaPlayer.currentVideoSubTitleIndex = Int32(viewModel.selectedSubtitleStreamIndex) vlcMediaPlayer.currentVideoSubTitleIndex = viewModel.videoSubtitleStreamIndex(of: viewModel.selectedSubtitleStreamIndex)
} else { } else {
vlcMediaPlayer.currentVideoSubTitleIndex = -1 vlcMediaPlayer.currentVideoSubTitleIndex = -1
} }