diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2014-09-14 11:26:33 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2014-09-14 11:26:33 -0400 |
| commit | 10cb5a8bf6a32a84819e841719e2dcc958aec513 (patch) | |
| tree | c0c25bd51c57d208c60f66881eef4ebef3142511 /MediaBrowser.ServerApplication | |
| parent | 5c615fa02448813499ed87f2a1c2b937c7a7dcd5 (diff) | |
add ability to customize ffmpeg path
Diffstat (limited to 'MediaBrowser.ServerApplication')
5 files changed, 65 insertions, 12 deletions
diff --git a/MediaBrowser.ServerApplication/ApplicationHost.cs b/MediaBrowser.ServerApplication/ApplicationHost.cs index 0d76e95b9..25d410bfc 100644 --- a/MediaBrowser.ServerApplication/ApplicationHost.cs +++ b/MediaBrowser.ServerApplication/ApplicationHost.cs @@ -219,6 +219,8 @@ namespace MediaBrowser.ServerApplication private ISyncRepository SyncRepository { get; set; } private ITVSeriesManager TVSeriesManager { get; set; } + private StartupOptions _startupOptions; + /// <summary> /// Initializes a new instance of the <see cref="ApplicationHost" /> class. /// </summary> @@ -226,9 +228,15 @@ namespace MediaBrowser.ServerApplication /// <param name="logManager">The log manager.</param> /// <param name="supportsRunningAsService">if set to <c>true</c> [supports running as service].</param> /// <param name="isRunningAsService">if set to <c>true</c> [is running as service].</param> - public ApplicationHost(ServerApplicationPaths applicationPaths, ILogManager logManager, bool supportsRunningAsService, bool isRunningAsService) + /// <param name="options">The options.</param> + public ApplicationHost(ServerApplicationPaths applicationPaths, + ILogManager logManager, + bool supportsRunningAsService, + bool isRunningAsService, + StartupOptions options) : base(applicationPaths, logManager) { + _startupOptions = options; _isRunningAsService = isRunningAsService; SupportsRunningAsService = supportsRunningAsService; } @@ -548,7 +556,7 @@ namespace MediaBrowser.ServerApplication /// <returns>Task.</returns> private async Task RegisterMediaEncoder(IProgress<double> progress) { - var info = await new FFMpegDownloader(Logger, ApplicationPaths, HttpClient, ZipClient, FileSystemManager).GetFFMpegInfo(progress).ConfigureAwait(false); + var info = await new FFMpegDownloader(Logger, ApplicationPaths, HttpClient, ZipClient, FileSystemManager).GetFFMpegInfo(_startupOptions, progress).ConfigureAwait(false); MediaEncoder = new MediaEncoder(LogManager.GetLogger("MediaEncoder"), JsonSerializer, info.EncoderPath, info.ProbePath, info.Version); RegisterSingleInstance(MediaEncoder); diff --git a/MediaBrowser.ServerApplication/FFMpeg/FFMpegDownloader.cs b/MediaBrowser.ServerApplication/FFMpeg/FFMpegDownloader.cs index ae11712a5..a026f9a49 100644 --- a/MediaBrowser.ServerApplication/FFMpeg/FFMpegDownloader.cs +++ b/MediaBrowser.ServerApplication/FFMpeg/FFMpegDownloader.cs @@ -14,6 +14,7 @@ using System.Threading.Tasks; #if __MonoCS__ using Mono.Unix.Native; #endif +using MediaBrowser.ServerApplication.IO; namespace MediaBrowser.ServerApplication.FFMpeg { @@ -39,8 +40,21 @@ namespace MediaBrowser.ServerApplication.FFMpeg _fileSystem = fileSystem; } - public async Task<FFMpegInfo> GetFFMpegInfo(IProgress<double> progress) + public async Task<FFMpegInfo> GetFFMpegInfo(StartupOptions options, IProgress<double> progress) { + var customffMpegPath = options.GetOption("-ffmpeg"); + var customffProbePath = options.GetOption("-ffprobe"); + + if (!string.IsNullOrWhiteSpace(customffMpegPath) && !string.IsNullOrWhiteSpace(customffProbePath)) + { + return new FFMpegInfo + { + ProbePath = customffProbePath, + EncoderPath = customffMpegPath, + Version = "custom" + }; + } + var rootEncoderPath = Path.Combine(_appPaths.ProgramDataPath, "ffmpeg"); var versionedDirectoryPath = Path.Combine(rootEncoderPath, FFMpegDownloadInfo.Version); diff --git a/MediaBrowser.ServerApplication/IO/StartupOptions.cs b/MediaBrowser.ServerApplication/IO/StartupOptions.cs new file mode 100644 index 000000000..e74151e4c --- /dev/null +++ b/MediaBrowser.ServerApplication/IO/StartupOptions.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +namespace MediaBrowser.ServerApplication.IO +{ + public class StartupOptions + { + private readonly List<string> _options = Environment.GetCommandLineArgs().ToList(); + + public bool ContainsOption(string option) + { + return _options.Contains(option, StringComparer.OrdinalIgnoreCase); + } + + public string GetOption(string name) + { + var index = _options.IndexOf(name); + + if (index != -1) + { + return _options.ElementAtOrDefault(index + 1); + } + + return null; + } + } +} diff --git a/MediaBrowser.ServerApplication/MainStartup.cs b/MediaBrowser.ServerApplication/MainStartup.cs index 685e60c8a..33529a31a 100644 --- a/MediaBrowser.ServerApplication/MainStartup.cs +++ b/MediaBrowser.ServerApplication/MainStartup.cs @@ -2,6 +2,7 @@ using MediaBrowser.Common.Implementations.Logging; using MediaBrowser.Model.Logging; using MediaBrowser.Server.Implementations; +using MediaBrowser.ServerApplication.IO; using MediaBrowser.ServerApplication.Native; using MediaBrowser.ServerApplication.Splash; using MediaBrowser.ServerApplication.Updates; @@ -32,8 +33,8 @@ namespace MediaBrowser.ServerApplication /// </summary> public static void Main() { - var startFlag = Environment.GetCommandLineArgs().ElementAtOrDefault(1); - _isRunningAsService = string.Equals(startFlag, "-service", StringComparison.OrdinalIgnoreCase); + var options = new StartupOptions(); + _isRunningAsService = options.ContainsOption("-service"); var applicationPath = Process.GetCurrentProcess().MainModule.FileName; @@ -48,7 +49,7 @@ namespace MediaBrowser.ServerApplication BeginLog(logger, appPaths); // Install directly - if (string.Equals(startFlag, "-installservice", StringComparison.OrdinalIgnoreCase)) + if (options.ContainsOption("-installservice")) { logger.Info("Performing service installation"); InstallService(applicationPath, logger); @@ -56,7 +57,7 @@ namespace MediaBrowser.ServerApplication } // Restart with admin rights, then install - if (string.Equals(startFlag, "-installserviceasadmin", StringComparison.OrdinalIgnoreCase)) + if (options.ContainsOption("-installserviceasadmin")) { logger.Info("Performing service installation"); RunServiceInstallation(applicationPath); @@ -64,7 +65,7 @@ namespace MediaBrowser.ServerApplication } // Uninstall directly - if (string.Equals(startFlag, "-uninstallservice", StringComparison.OrdinalIgnoreCase)) + if (options.ContainsOption("-uninstallservice")) { logger.Info("Performing service uninstallation"); UninstallService(applicationPath, logger); @@ -72,7 +73,7 @@ namespace MediaBrowser.ServerApplication } // Restart with admin rights, then uninstall - if (string.Equals(startFlag, "-uninstallserviceasadmin", StringComparison.OrdinalIgnoreCase)) + if (options.ContainsOption("-uninstallserviceasadmin")) { logger.Info("Performing service uninstallation"); RunServiceUninstallation(applicationPath); @@ -99,7 +100,7 @@ namespace MediaBrowser.ServerApplication try { - RunApplication(appPaths, logManager, _isRunningAsService); + RunApplication(appPaths, logManager, _isRunningAsService, options); } finally { @@ -205,9 +206,10 @@ namespace MediaBrowser.ServerApplication /// <param name="appPaths">The app paths.</param> /// <param name="logManager">The log manager.</param> /// <param name="runService">if set to <c>true</c> [run service].</param> - private static void RunApplication(ServerApplicationPaths appPaths, ILogManager logManager, bool runService) + /// <param name="options">The options.</param> + private static void RunApplication(ServerApplicationPaths appPaths, ILogManager logManager, bool runService, StartupOptions options) { - _appHost = new ApplicationHost(appPaths, logManager, true, runService); + _appHost = new ApplicationHost(appPaths, logManager, true, runService, options); var initProgress = new Progress<double>(); diff --git a/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj b/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj index 6c255f2a8..33bdea0f6 100644 --- a/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj +++ b/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj @@ -105,6 +105,7 @@ <Compile Include="FFMpeg\FFMpegInfo.cs" /> <Compile Include="IO\FileSystemFactory.cs" /> <Compile Include="IO\NativeFileSystem.cs" /> + <Compile Include="IO\StartupOptions.cs" /> <Compile Include="Logging\LogForm.cs"> <SubType>Form</SubType> </Compile> |
