Pārlūkot izejas kodu

#429 - Extract ffmpeg from core product

Luke Pulverenti 11 gadi atpakaļ
vecāks
revīzija
a02333fb0c

+ 3 - 3
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();
         }

+ 25 - 28
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);
             }
         }