aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Startup.Common/FFMpeg
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2016-06-30 00:23:52 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2016-06-30 00:23:52 -0400
commit525f7804532bb0d5a1dc38668fbcf511acc2877c (patch)
tree9093ffe63d6c18a6565d1f57b337e622f71cec87 /MediaBrowser.Server.Startup.Common/FFMpeg
parentcbeb77c0ad366f25e3cb26d80e27648598240c59 (diff)
add startup error handling
Diffstat (limited to 'MediaBrowser.Server.Startup.Common/FFMpeg')
-rw-r--r--MediaBrowser.Server.Startup.Common/FFMpeg/FFmpegValidator.cs161
1 files changed, 0 insertions, 161 deletions
diff --git a/MediaBrowser.Server.Startup.Common/FFMpeg/FFmpegValidator.cs b/MediaBrowser.Server.Startup.Common/FFMpeg/FFmpegValidator.cs
deleted file mode 100644
index d92dc1b965..0000000000
--- a/MediaBrowser.Server.Startup.Common/FFMpeg/FFmpegValidator.cs
+++ /dev/null
@@ -1,161 +0,0 @@
-using MediaBrowser.Common.Configuration;
-using MediaBrowser.Model.Logging;
-using System;
-using System.Diagnostics;
-using System.IO;
-using System.Collections.Generic;
-using CommonIO;
-
-namespace MediaBrowser.Server.Startup.Common.FFMpeg
-{
- public class FFmpegValidator
- {
- private readonly ILogger _logger;
- private readonly IApplicationPaths _appPaths;
- private readonly IFileSystem _fileSystem;
-
- public FFmpegValidator(ILogger logger, IApplicationPaths appPaths, IFileSystem fileSystem)
- {
- _logger = logger;
- _appPaths = appPaths;
- _fileSystem = fileSystem;
- }
-
- public Tuple<List<string>,List<string>> Validate(string encoderPath)
- {
- var decoders = GetDecoders(encoderPath);
- var encoders = GetEncoders(encoderPath);
-
- return new Tuple<List<string>, List<string>>(decoders, encoders);
- }
-
- private List<string> GetDecoders(string ffmpegPath)
- {
- string output = string.Empty;
- try
- {
- output = GetFFMpegOutput(ffmpegPath, "-decoders");
- }
- catch
- {
- }
- //_logger.Debug("ffmpeg decoder query result: {0}", output ?? string.Empty);
-
- var found = new List<string>();
- var required = new[]
- {
- "h264_qsv",
- "mpeg2_qsv",
- "vc1_qsv"
- };
-
- foreach (var codec in required)
- {
- var srch = " " + codec + " ";
-
- if (output.IndexOf(srch, StringComparison.OrdinalIgnoreCase) == -1)
- {
- _logger.Warn("ffmpeg is missing decoder " + codec);
- }
- else
- {
- found.Add(codec);
- }
- }
-
- return found;
- }
-
- private List<string> GetEncoders(string ffmpegPath)
- {
- string output = null;
- try
- {
- output = GetFFMpegOutput(ffmpegPath, "-encoders");
- }
- catch
- {
- }
- //_logger.Debug("ffmpeg encoder query result: {0}", output ?? string.Empty);
-
- var found = new List<string>();
- var required = new[]
- {
- "libx264",
- "libx265",
- "mpeg4",
- "msmpeg4",
- //"libvpx",
- //"libvpx-vp9",
- "aac",
- "libmp3lame",
- "libopus",
- //"libvorbis",
- "srt"
- };
-
- foreach (var codec in required)
- {
- var srch = " " + codec + " ";
-
- if (output.IndexOf(srch, StringComparison.OrdinalIgnoreCase) == -1)
- {
- _logger.Warn("ffmpeg is missing encoder " + codec);
- }
- else
- {
- found.Add(codec);
- }
- }
-
- return found;
- }
-
- private string GetFFMpegOutput(string path, string arguments)
- {
- var process = new Process
- {
- StartInfo = new ProcessStartInfo
- {
- CreateNoWindow = true,
- UseShellExecute = false,
- FileName = path,
- Arguments = arguments,
- WindowStyle = ProcessWindowStyle.Hidden,
- ErrorDialog = false,
- RedirectStandardOutput = true,
- RedirectStandardError = true
- }
- };
-
- using (process)
- {
- process.Start();
-
- try
- {
- process.BeginErrorReadLine();
-
- using (var reader = new StreamReader(process.StandardOutput.BaseStream))
- {
- return reader.ReadToEnd();
- }
- }
- catch
- {
- // Hate having to do this
- try
- {
- process.Kill();
- }
- catch (Exception ex1)
- {
- _logger.ErrorException("Error killing ffmpeg", ex1);
- }
-
- throw;
- }
- }
- }
- }
-}