diff --git a/modules/mpv-player/android/src/main/java/expo/modules/mpvplayer/MPVLayerRenderer.kt b/modules/mpv-player/android/src/main/java/expo/modules/mpvplayer/MPVLayerRenderer.kt index b026c6b8..241d3cdd 100644 --- a/modules/mpv-player/android/src/main/java/expo/modules/mpvplayer/MPVLayerRenderer.kt +++ b/modules/mpv-player/android/src/main/java/expo/modules/mpvplayer/MPVLayerRenderer.kt @@ -539,7 +539,9 @@ class MPVLayerRenderer(private val context: Context) : MPVLib.EventObserver { // Identity fields used to map a Jellyfin subtitle to the real track // (instead of fragile positional counting). `external` + `external-filename` - // uniquely identify a sub-added sidecar; `ff-index` aids embedded matching. + // uniquely identify a sub-added sidecar. `ff-index` is exposed for + // diagnostics / potential future exact-index matching; the current + // resolver matches embedded tracks by language/title, not ff-index. val external = mpv?.getPropertyBoolean("track-list/$i/external") ?: false track["external"] = external mpv?.getPropertyString("track-list/$i/external-filename")?.let { diff --git a/modules/mpv-player/ios/MPVLayerRenderer.swift b/modules/mpv-player/ios/MPVLayerRenderer.swift index e6a5e0a0..52e2ea67 100644 --- a/modules/mpv-player/ios/MPVLayerRenderer.swift +++ b/modules/mpv-player/ios/MPVLayerRenderer.swift @@ -786,7 +786,9 @@ final class MPVLayerRenderer { // Identity fields used to map a Jellyfin subtitle to the real track // (instead of fragile positional counting). `external` + `external-filename` - // uniquely identify a sub-added sidecar; `ff-index` aids embedded matching. + // uniquely identify a sub-added sidecar. `ff-index` is exposed for + // diagnostics / potential future exact-index matching; the current + // resolver matches embedded tracks by language/title, not ff-index. var external: Int32 = 0 getProperty(handle: handle, name: "track-list/\(i)/external", format: MPV_FORMAT_FLAG, value: &external) track["external"] = external != 0 diff --git a/utils/jellyfin/subtitleUtils.ts b/utils/jellyfin/subtitleUtils.ts index 7905d93c..3eeb2a66 100644 --- a/utils/jellyfin/subtitleUtils.ts +++ b/utils/jellyfin/subtitleUtils.ts @@ -91,7 +91,9 @@ export const compareTracksForMenu = (a: MediaStream, b: MediaStream): number => Number(a.IsExternal ?? false) - Number(b.IsExternal ?? false) || Number(b.IsForced ?? false) - Number(a.IsForced ?? false) || Number(b.IsDefault ?? false) - Number(a.IsDefault ?? false) || - (a.Index ?? 0) - (b.Index ?? 0); + // Missing Index sorts to the end (not 0, which would float it to the top and + // collide with a real Index 0). + (a.Index ?? Number.MAX_SAFE_INTEGER) - (b.Index ?? Number.MAX_SAFE_INTEGER); /** * Identity of a subtitle track as reported by the *player's real track list*