diff --git a/Shared/ViewModels/VideoPlayerViewModel/VideoPlayerViewModel.swift b/Shared/ViewModels/VideoPlayerViewModel/VideoPlayerViewModel.swift index 747f50db..58121e79 100644 --- a/Shared/ViewModels/VideoPlayerViewModel/VideoPlayerViewModel.swift +++ b/Shared/ViewModels/VideoPlayerViewModel/VideoPlayerViewModel.swift @@ -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 extension VideoPlayerViewModel: Equatable { diff --git a/Swiftfin tvOS/Views/VideoPlayer/LiveTVPlayerViewController.swift b/Swiftfin tvOS/Views/VideoPlayer/LiveTVPlayerViewController.swift index e53cd431..9ccdcba9 100644 --- a/Swiftfin tvOS/Views/VideoPlayer/LiveTVPlayerViewController.swift +++ b/Swiftfin tvOS/Views/VideoPlayer/LiveTVPlayerViewController.swift @@ -754,7 +754,7 @@ extension LiveTVPlayerViewController: VLCMediaPlayerDelegate { } // If needing to fix subtitle streams during playback - if vlcMediaPlayer.currentVideoSubTitleIndex != viewModel.selectedSubtitleStreamIndex && + if vlcMediaPlayer.currentVideoSubTitleIndex != viewModel.videoSubtitleStreamIndex(of: viewModel.selectedSubtitleStreamIndex) && viewModel.subtitlesEnabled { didSelectSubtitleStream(index: viewModel.selectedSubtitleStreamIndex) @@ -792,7 +792,7 @@ extension LiveTVPlayerViewController: PlayerOverlayDelegate { func didSelectSubtitleStream(index: Int) { viewModel.subtitlesEnabled = true - vlcMediaPlayer.currentVideoSubTitleIndex = Int32(index) + vlcMediaPlayer.currentVideoSubTitleIndex = viewModel.videoSubtitleStreamIndex(of: index) viewModel.sendProgressReport() @@ -809,7 +809,7 @@ extension LiveTVPlayerViewController: PlayerOverlayDelegate { func didToggleSubtitles(newValue: Bool) { if newValue { - vlcMediaPlayer.currentVideoSubTitleIndex = Int32(viewModel.selectedSubtitleStreamIndex) + vlcMediaPlayer.currentVideoSubTitleIndex = viewModel.videoSubtitleStreamIndex(of: viewModel.selectedSubtitleStreamIndex) } else { vlcMediaPlayer.currentVideoSubTitleIndex = -1 } diff --git a/Swiftfin tvOS/Views/VideoPlayer/VLCPlayerViewController.swift b/Swiftfin tvOS/Views/VideoPlayer/VLCPlayerViewController.swift index 0a844cc0..32ad9085 100644 --- a/Swiftfin tvOS/Views/VideoPlayer/VLCPlayerViewController.swift +++ b/Swiftfin tvOS/Views/VideoPlayer/VLCPlayerViewController.swift @@ -754,7 +754,7 @@ extension VLCPlayerViewController: VLCMediaPlayerDelegate { } // If needing to fix subtitle streams during playback - if vlcMediaPlayer.currentVideoSubTitleIndex != viewModel.selectedSubtitleStreamIndex && + if vlcMediaPlayer.currentVideoSubTitleIndex != viewModel.videoSubtitleStreamIndex(of: viewModel.selectedSubtitleStreamIndex) && viewModel.subtitlesEnabled { didSelectSubtitleStream(index: viewModel.selectedSubtitleStreamIndex) @@ -791,7 +791,7 @@ extension VLCPlayerViewController: PlayerOverlayDelegate { func didSelectSubtitleStream(index: Int) { viewModel.subtitlesEnabled = true - vlcMediaPlayer.currentVideoSubTitleIndex = Int32(index) + vlcMediaPlayer.currentVideoSubTitleIndex = viewModel.videoSubtitleStreamIndex(of: index) viewModel.sendProgressReport() @@ -808,7 +808,7 @@ extension VLCPlayerViewController: PlayerOverlayDelegate { func didToggleSubtitles(newValue: Bool) { if newValue { - vlcMediaPlayer.currentVideoSubTitleIndex = Int32(viewModel.selectedSubtitleStreamIndex) + vlcMediaPlayer.currentVideoSubTitleIndex = viewModel.videoSubtitleStreamIndex(of: viewModel.selectedSubtitleStreamIndex) } else { vlcMediaPlayer.currentVideoSubTitleIndex = -1 } diff --git a/Swiftfin/Views/VideoPlayer/LiveTVPlayerViewController.swift b/Swiftfin/Views/VideoPlayer/LiveTVPlayerViewController.swift index 375de4c2..f8f2a1ff 100644 --- a/Swiftfin/Views/VideoPlayer/LiveTVPlayerViewController.swift +++ b/Swiftfin/Views/VideoPlayer/LiveTVPlayerViewController.swift @@ -823,7 +823,7 @@ extension LiveTVPlayerViewController: VLCMediaPlayerDelegate { } // If needing to fix subtitle streams during playback - if vlcMediaPlayer.currentVideoSubTitleIndex != viewModel.selectedSubtitleStreamIndex, + if vlcMediaPlayer.currentVideoSubTitleIndex != viewModel.videoSubtitleStreamIndex(of: viewModel.selectedSubtitleStreamIndex), viewModel.subtitlesEnabled { didSelectSubtitleStream(index: viewModel.selectedSubtitleStreamIndex) @@ -859,7 +859,7 @@ extension LiveTVPlayerViewController: PlayerOverlayDelegate { /// Do not call when setting to index -1 func didSelectSubtitleStream(index: Int) { viewModel.subtitlesEnabled = true - vlcMediaPlayer.currentVideoSubTitleIndex = Int32(index) + vlcMediaPlayer.currentVideoSubTitleIndex = viewModel.videoSubtitleStreamIndex(of: index) viewModel.sendProgressReport() @@ -877,7 +877,7 @@ extension LiveTVPlayerViewController: PlayerOverlayDelegate { func didToggleSubtitles(newValue: Bool) { if newValue { - vlcMediaPlayer.currentVideoSubTitleIndex = Int32(viewModel.selectedSubtitleStreamIndex) + vlcMediaPlayer.currentVideoSubTitleIndex = viewModel.videoSubtitleStreamIndex(of: viewModel.selectedSubtitleStreamIndex) } else { vlcMediaPlayer.currentVideoSubTitleIndex = -1 } diff --git a/Swiftfin/Views/VideoPlayer/VLCPlayerViewController.swift b/Swiftfin/Views/VideoPlayer/VLCPlayerViewController.swift index 39ffac79..07659dfb 100644 --- a/Swiftfin/Views/VideoPlayer/VLCPlayerViewController.swift +++ b/Swiftfin/Views/VideoPlayer/VLCPlayerViewController.swift @@ -961,7 +961,7 @@ extension VLCPlayerViewController: VLCMediaPlayerDelegate { } // If needing to fix subtitle streams during playback - if vlcMediaPlayer.currentVideoSubTitleIndex != viewModel.selectedSubtitleStreamIndex, + if vlcMediaPlayer.currentVideoSubTitleIndex != viewModel.videoSubtitleStreamIndex(of: viewModel.selectedSubtitleStreamIndex), viewModel.subtitlesEnabled { didSelectSubtitleStream(index: viewModel.selectedSubtitleStreamIndex) @@ -997,7 +997,7 @@ extension VLCPlayerViewController: PlayerOverlayDelegate { /// Do not call when setting to index -1 func didSelectSubtitleStream(index: Int) { viewModel.subtitlesEnabled = true - vlcMediaPlayer.currentVideoSubTitleIndex = Int32(index) + vlcMediaPlayer.currentVideoSubTitleIndex = viewModel.videoSubtitleStreamIndex(of: index) viewModel.sendProgressReport() @@ -1015,7 +1015,7 @@ extension VLCPlayerViewController: PlayerOverlayDelegate { func didToggleSubtitles(newValue: Bool) { if newValue { - vlcMediaPlayer.currentVideoSubTitleIndex = Int32(viewModel.selectedSubtitleStreamIndex) + vlcMediaPlayer.currentVideoSubTitleIndex = viewModel.videoSubtitleStreamIndex(of: viewModel.selectedSubtitleStreamIndex) } else { vlcMediaPlayer.currentVideoSubTitleIndex = -1 }