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
extension VideoPlayerViewModel: Equatable {

View File

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

View File

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

View File

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

View File

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