aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2013-09-23 12:00:22 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2013-09-23 12:00:22 -0400
commita02333fb0cbda8227dd6a5662c6a880eafd5074c (patch)
tree3cd5921a74c0dcc1cfd03c4ffc0c5c12967aa17b
parentcacba5ca11d600ed9d496c566807be92b228de7e (diff)
#429 - Extract ffmpeg from core product
-rw-r--r--MediaBrowser.ServerApplication/ApplicationHost.cs6
-rw-r--r--MediaBrowser.ServerApplication/Implementations/FFMpegDownloader.cs53
2 files changed, 28 insertions, 31 deletions
diff --git a/MediaBrowser.ServerApplication/ApplicationHost.cs b/MediaBrowser.ServerApplication/ApplicationHost.cs
index 5cae99785..a2965d4ea 100644
--- a/MediaBrowser.ServerApplication/ApplicationHost.cs
+++ b/MediaBrowser.ServerApplication/ApplicationHost.cs
@@ -258,6 +258,8 @@ namespace MediaBrowser.ServerApplication
ZipClient = new DotNetZipClient();
RegisterSingleInstance(ZipClient);
+ var mediaEncoderTask = RegisterMediaEncoder();
+
UserDataRepository = new SqliteUserDataRepository(ApplicationPaths, JsonSerializer, LogManager);
RegisterSingleInstance(UserDataRepository);
@@ -284,8 +286,6 @@ namespace MediaBrowser.ServerApplication
RegisterSingleInstance<ILibrarySearchEngine>(() => new LuceneSearchEngine(ApplicationPaths, LogManager, LibraryManager));
- await RegisterMediaEncoder().ConfigureAwait(false);
-
var clientConnectionManager = new SessionManager(UserDataRepository, ServerConfigurationManager, Logger, UserRepository);
RegisterSingleInstance<ISessionManager>(clientConnectionManager);
@@ -310,7 +310,7 @@ namespace MediaBrowser.ServerApplication
await ConfigureNotificationsRepository().ConfigureAwait(false);
- await Task.WhenAll(itemsTask, displayPreferencesTask, userdataTask).ConfigureAwait(false);
+ await Task.WhenAll(itemsTask, displayPreferencesTask, userdataTask, mediaEncoderTask).ConfigureAwait(false);
SetKernelProperties();
}
diff --git a/MediaBrowser.ServerApplication/Implementations/FFMpegDownloader.cs b/MediaBrowser.ServerApplication/Implementations/FFMpegDownloader.cs
index 7fd0acddd..861ca7f3b 100644
--- a/MediaBrowser.ServerApplication/Implementations/FFMpegDownloader.cs
+++ b/MediaBrowser.ServerApplication/Implementations/FFMpegDownloader.cs
@@ -29,33 +29,37 @@ namespace MediaBrowser.ServerApplication.Implementations
public async Task<FFMpegInfo> GetFFMpegInfo()
{
- var assembly = GetType().Assembly;
+ var version = "ffmpeg20130904";
- var prefix = GetType().Namespace + ".";
+ var versionedDirectoryPath = Path.Combine(GetMediaToolsPath(true), version);
- var srch = prefix + "ffmpeg";
-
- var resource = assembly.GetManifestResourceNames().First(r => r.StartsWith(srch));
-
- var filename =
- resource.Substring(resource.IndexOf(prefix, StringComparison.OrdinalIgnoreCase) + prefix.Length);
-
- var versionedDirectoryPath = Path.Combine(GetMediaToolsPath(true),
- Path.GetFileNameWithoutExtension(filename));
+ var info = new FFMpegInfo
+ {
+ ProbePath = Path.Combine(versionedDirectoryPath, "ffprobe.exe"),
+ Path = Path.Combine(versionedDirectoryPath, "ffmpeg.exe"),
+ Version = version
+ };
if (!Directory.Exists(versionedDirectoryPath))
{
Directory.CreateDirectory(versionedDirectoryPath);
}
- await ExtractTools(assembly, resource, versionedDirectoryPath).ConfigureAwait(false);
+ if (!File.Exists(info.ProbePath) || !File.Exists(info.Path))
+ {
+ ExtractTools(version, versionedDirectoryPath);
+ }
- return new FFMpegInfo
+ try
{
- ProbePath = Path.Combine(versionedDirectoryPath, "ffprobe.exe"),
- Path = Path.Combine(versionedDirectoryPath, "ffmpeg.exe"),
- Version = Path.GetFileNameWithoutExtension(versionedDirectoryPath)
- };
+ await DownloadFonts(versionedDirectoryPath).ConfigureAwait(false);
+ }
+ catch (Exception ex)
+ {
+ _logger.ErrorException("Error getting ffmpeg font files", ex);
+ }
+
+ return info;
}
/// <summary>
@@ -64,20 +68,13 @@ namespace MediaBrowser.ServerApplication.Implementations
/// <param name="assembly">The assembly.</param>
/// <param name="zipFileResourcePath">The zip file resource path.</param>
/// <param name="targetPath">The target path.</param>
- private async Task ExtractTools(Assembly assembly, string zipFileResourcePath, string targetPath)
+ private void ExtractTools(string version, string targetPath)
{
- using (var resourceStream = assembly.GetManifestResourceStream(zipFileResourcePath))
- {
- _zipClient.ExtractAll(resourceStream, targetPath, false);
- }
+ var zipFileResourcePath = GetType().Namespace + "." + version + ".zip";
- try
+ using (var resourceStream = GetType().Assembly.GetManifestResourceStream(zipFileResourcePath))
{
- await DownloadFonts(targetPath).ConfigureAwait(false);
- }
- catch (Exception ex)
- {
- _logger.ErrorException("Error getting ffmpeg font files", ex);
+ _zipClient.ExtractAll(resourceStream, targetPath, false);
}
}