aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDominik Krivohlavek <github@xkrivo.net>2024-04-13 01:44:30 +0200
committerGitHub <noreply@github.com>2024-04-12 17:44:30 -0600
commitab731d92128f7068771434f3e157495e3d3f66e5 (patch)
treed137df9c2b86778f58f845d6f51005634e098d38
parenteccc9a0b647b8cdd7380ea83ddbb77333ce691e3 (diff)
Fix track MBID in audio metadata (#11301)
-rw-r--r--MediaBrowser.Providers/MediaInfo/AudioFileProber.cs24
1 files changed, 23 insertions, 1 deletions
diff --git a/MediaBrowser.Providers/MediaInfo/AudioFileProber.cs b/MediaBrowser.Providers/MediaInfo/AudioFileProber.cs
index c9fe4c9b6..67b84681d 100644
--- a/MediaBrowser.Providers/MediaInfo/AudioFileProber.cs
+++ b/MediaBrowser.Providers/MediaInfo/AudioFileProber.cs
@@ -407,7 +407,14 @@ namespace MediaBrowser.Providers.MediaInfo
if (options.ReplaceAllMetadata || !audio.TryGetProviderId(MetadataProvider.MusicBrainzTrack, out _))
{
- audio.SetProviderId(MetadataProvider.MusicBrainzTrack, tags.MusicBrainzTrackId);
+ // Fallback to ffprobe as TagLib incorrectly provides recording MBID in `tags.MusicBrainzTrackId`.
+ // See https://github.com/mono/taglib-sharp/issues/304
+ var mediaInfo = await GetMediaInfo(audio, CancellationToken.None).ConfigureAwait(false);
+ var trackMbId = mediaInfo.GetProviderId(MetadataProvider.MusicBrainzTrack);
+ if (trackMbId is not null)
+ {
+ audio.SetProviderId(MetadataProvider.MusicBrainzTrack, trackMbId);
+ }
}
// Save extracted lyrics if they exist,
@@ -431,5 +438,20 @@ namespace MediaBrowser.Providers.MediaInfo
audio.LyricFiles = externalLyricFiles.Select(i => i.Path).Distinct().ToArray();
currentStreams.AddRange(externalLyricFiles);
}
+
+ private async Task<Model.MediaInfo.MediaInfo> GetMediaInfo(BaseItem item, CancellationToken cancellationToken)
+ {
+ var request = new MediaInfoRequest
+ {
+ MediaType = DlnaProfileType.Audio,
+ MediaSource = new MediaSourceInfo
+ {
+ Path = item.Path,
+ Protocol = item.PathProtocol ?? MediaProtocol.File
+ }
+ };
+
+ return await _mediaEncoder.GetMediaInfo(request, cancellationToken).ConfigureAwait(false);
+ }
}
}