Skip to content

Commit

Permalink
fix(MediaStream.swift): adjust external subtitle indexes to correct o…
Browse files Browse the repository at this point in the history
…rdering in VLC player

ref: jellyfin#1311
Signed-off-by: ddrccw <[email protected]>
  • Loading branch information
ddrccw committed Jan 26, 2025
1 parent db7723f commit 2f6b288
Showing 1 changed file with 30 additions and 3 deletions.
33 changes: 30 additions & 3 deletions Shared/Extensions/JellyfinAPI/MediaStream.swift
Original file line number Diff line number Diff line change
Expand Up @@ -220,14 +220,41 @@ extension [MediaStream] {
func adjustExternalSubtitleIndexes(audioStreamCount: Int) -> [MediaStream] {
guard allSatisfy({ $0.type == .subtitle }) else { return self }
let embeddedSubtitleCount = filter { !($0.isExternal ?? false) }.count
let externalSubtitleCount = filter { $0.isExternal ?? false }.count

var mediaStreams = self

// TODO: how to fix when transcoding
// case:鱿鱼游戏第二季,第五集
// display order
// - external, ch
// - korean
// - ...
// - viet

// vlc player subtitle track order
// - 2 ==> viet
// - 3 ==> korean
// - 37 ==> same as displayed subtitle
// - 38 ==> external, ch while displaying viet

// display order
// - extern subtitles
// - embeded subtitles

// ??? weird order
// vlc player subtitle track order
// - embeded subtitles n
// - embeded subtitles (1, n-1)
// - extern subtitles

for (i, mediaStream) in mediaStreams.enumerated() {
guard mediaStream.isExternal ?? false else { continue }
var copy = mediaStream
copy.index = (copy.index ?? 0) + 1 + embeddedSubtitleCount + audioStreamCount

if copy.isExternal ?? false {
copy.index = (copy.index ?? 0) + 1 + embeddedSubtitleCount + audioStreamCount
} else {
copy.index = (copy.index ?? 0) - externalSubtitleCount
}
mediaStreams[i] = copy
}

Expand Down

0 comments on commit 2f6b288

Please sign in to comment.