|
|
|
@ -63,16 +63,16 @@ namespace MediaBrowser.MediaEncoding.Encoder
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// These are the library versions that corresponds to our minimum ffmpeg version 4.x according to the version table below
|
|
|
|
|
private static readonly IReadOnlyDictionary<string, double> _ffmpegMinimumLibraryVersions = new Dictionary<string, double>
|
|
|
|
|
private static readonly IReadOnlyDictionary<string, Version> _ffmpegMinimumLibraryVersions = new Dictionary<string, Version>
|
|
|
|
|
{
|
|
|
|
|
{ "libavutil", 56.14 },
|
|
|
|
|
{ "libavcodec", 58.18 },
|
|
|
|
|
{ "libavformat", 58.12 },
|
|
|
|
|
{ "libavdevice", 58.3 },
|
|
|
|
|
{ "libavfilter", 7.16 },
|
|
|
|
|
{ "libswscale", 5.1 },
|
|
|
|
|
{ "libswresample", 3.1 },
|
|
|
|
|
{ "libpostproc", 55.1 }
|
|
|
|
|
{ "libavutil", new Version(56, 14) },
|
|
|
|
|
{ "libavcodec", new Version(58, 18) },
|
|
|
|
|
{ "libavformat", new Version(58, 12) },
|
|
|
|
|
{ "libavdevice", new Version(58, 3) },
|
|
|
|
|
{ "libavfilter", new Version(7, 16) },
|
|
|
|
|
{ "libswscale", new Version(5, 1) },
|
|
|
|
|
{ "libswresample", new Version(3, 1) },
|
|
|
|
|
{ "libpostproc", new Version(55, 1) }
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// This lookup table is to be maintained with the following command line:
|
|
|
|
@ -195,7 +195,7 @@ namespace MediaBrowser.MediaEncoding.Encoder
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (!TryGetFFmpegLibraryVersions(output, out string versionString, out IReadOnlyDictionary<string, double> versionMap))
|
|
|
|
|
if (!TryGetFFmpegLibraryVersions(output, out string versionString, out IReadOnlyDictionary<string, Version> versionMap))
|
|
|
|
|
{
|
|
|
|
|
_logger.LogError("No ffmpeg library versions found");
|
|
|
|
|
|
|
|
|
@ -213,7 +213,7 @@ namespace MediaBrowser.MediaEncoding.Encoder
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private Version TestMinimumFFmpegLibraryVersions(IReadOnlyDictionary<string, double> versionMap)
|
|
|
|
|
private Version TestMinimumFFmpegLibraryVersions(IReadOnlyDictionary<string, Version> versionMap)
|
|
|
|
|
{
|
|
|
|
|
var allVersionsValidated = true;
|
|
|
|
|
|
|
|
|
@ -248,11 +248,11 @@ namespace MediaBrowser.MediaEncoding.Encoder
|
|
|
|
|
/// <param name="versionString"></param>
|
|
|
|
|
/// <param name="versionMap"></param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
private static bool TryGetFFmpegLibraryVersions(string output, out string versionString, out IReadOnlyDictionary<string, double> versionMap)
|
|
|
|
|
private static bool TryGetFFmpegLibraryVersions(string output, out string versionString, out IReadOnlyDictionary<string, Version> versionMap)
|
|
|
|
|
{
|
|
|
|
|
var sb = new StringBuilder(144);
|
|
|
|
|
|
|
|
|
|
var map = new Dictionary<string, double>();
|
|
|
|
|
var map = new Dictionary<string, Version>();
|
|
|
|
|
|
|
|
|
|
foreach (Match match in Regex.Matches(
|
|
|
|
|
output,
|
|
|
|
@ -267,13 +267,14 @@ namespace MediaBrowser.MediaEncoding.Encoder
|
|
|
|
|
.Append(',');
|
|
|
|
|
|
|
|
|
|
var str = $"{match.Groups["major"]}.{match.Groups["minor"]}";
|
|
|
|
|
var versionNumber = double.Parse(str, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture);
|
|
|
|
|
|
|
|
|
|
map.Add(match.Groups["name"].Value, versionNumber);
|
|
|
|
|
var version = Version.Parse(str);
|
|
|
|
|
|
|
|
|
|
map.Add(match.Groups["name"].Value, version);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
versionString = sb.ToString();
|
|
|
|
|
versionMap = map as IReadOnlyDictionary<string, double>;
|
|
|
|
|
versionMap = map as IReadOnlyDictionary<string, Version>;
|
|
|
|
|
|
|
|
|
|
return sb.Length > 0;
|
|
|
|
|
}
|
|
|
|
|