aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNiels van Velzen <nielsvanvelzen@users.noreply.github.com>2026-05-04 17:57:49 +0200
committerGitHub <noreply@github.com>2026-05-04 17:57:49 +0200
commitb7d030109996a3fc1331d0e63e5a57b13468fe00 (patch)
tree453d4395472c55d24af5cddaab29684292146081
parent622947e37425f3620432995cde5d4a0809d91694 (diff)
parent19b756a5073d33f31181eef2c47212aed3b2abf4 (diff)
Merge pull request #16747 from MBR-0001/fix-ffprobe-subs
Fix FFProbeVideoInfo downloading subtitles without considering internal streams
-rw-r--r--MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs30
1 files changed, 13 insertions, 17 deletions
diff --git a/MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs b/MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs
index fdc2f36469..e79f69dd28 100644
--- a/MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs
+++ b/MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs
@@ -194,20 +194,11 @@ namespace MediaBrowser.Providers.MediaInfo
IReadOnlyList<MediaAttachment> mediaAttachments;
ChapterInfo[] chapters;
- // Add external streams before adding the streams from the file to preserve stream IDs on remote videos
- await AddExternalSubtitlesAsync(video, mediaStreams, options, cancellationToken).ConfigureAwait(false);
-
await AddExternalAudioAsync(video, mediaStreams, options, cancellationToken).ConfigureAwait(false);
- var startIndex = mediaStreams.Count == 0 ? 0 : (mediaStreams.Max(i => i.Index) + 1);
-
if (mediaInfo is not null)
{
- foreach (var mediaStream in mediaInfo.MediaStreams)
- {
- mediaStream.Index = startIndex++;
- mediaStreams.Add(mediaStream);
- }
+ mediaStreams.AddRange(mediaInfo.MediaStreams);
mediaAttachments = mediaInfo.MediaAttachments;
video.TotalBitrate = mediaInfo.Bitrate;
@@ -231,7 +222,6 @@ namespace MediaBrowser.Providers.MediaInfo
{
if (!mediaStream.IsExternal)
{
- mediaStream.Index = startIndex++;
mediaStreams.Add(mediaStream);
}
}
@@ -240,6 +230,14 @@ namespace MediaBrowser.Providers.MediaInfo
chapters = [];
}
+ // Download and insert external streams before the streams from the file to preserve stream IDs on remote videos
+ await AddExternalSubtitlesAsync(video, mediaStreams, options, cancellationToken).ConfigureAwait(false);
+
+ for (var i = 0; i < mediaStreams.Count; i++)
+ {
+ mediaStreams[i].Index = i;
+ }
+
var libraryOptions = _libraryManager.GetLibraryOptions(video);
if (mediaInfo is not null)
@@ -542,8 +540,7 @@ namespace MediaBrowser.Providers.MediaInfo
MetadataRefreshOptions options,
CancellationToken cancellationToken)
{
- var startIndex = currentStreams.Count == 0 ? 0 : (currentStreams.Select(i => i.Index).Max() + 1);
- var externalSubtitleStreams = await _subtitleResolver.GetExternalStreamsAsync(video, startIndex, options.DirectoryService, false, cancellationToken).ConfigureAwait(false);
+ var externalSubtitleStreams = await _subtitleResolver.GetExternalStreamsAsync(video, 0, options.DirectoryService, false, cancellationToken).ConfigureAwait(false);
var enableSubtitleDownloading = options.MetadataRefreshMode == MetadataRefreshMode.Default ||
options.MetadataRefreshMode == MetadataRefreshMode.FullRefresh;
@@ -569,13 +566,13 @@ namespace MediaBrowser.Providers.MediaInfo
// Rescan
if (downloadedLanguages.Count > 0)
{
- externalSubtitleStreams = await _subtitleResolver.GetExternalStreamsAsync(video, startIndex, options.DirectoryService, true, cancellationToken).ConfigureAwait(false);
+ externalSubtitleStreams = await _subtitleResolver.GetExternalStreamsAsync(video, 0, options.DirectoryService, true, cancellationToken).ConfigureAwait(false);
}
}
video.SubtitleFiles = externalSubtitleStreams.Select(i => i.Path).Distinct().ToArray();
- currentStreams.AddRange(externalSubtitleStreams);
+ currentStreams.InsertRange(0, externalSubtitleStreams);
}
/// <summary>
@@ -591,8 +588,7 @@ namespace MediaBrowser.Providers.MediaInfo
MetadataRefreshOptions options,
CancellationToken cancellationToken)
{
- var startIndex = currentStreams.Count == 0 ? 0 : currentStreams.Max(i => i.Index) + 1;
- var externalAudioStreams = await _audioResolver.GetExternalStreamsAsync(video, startIndex, options.DirectoryService, false, cancellationToken).ConfigureAwait(false);
+ var externalAudioStreams = await _audioResolver.GetExternalStreamsAsync(video, 0, options.DirectoryService, false, cancellationToken).ConfigureAwait(false);
video.AudioFiles = externalAudioStreams.Select(i => i.Path).Distinct().ToArray();